()
| 158 | } |
| 159 | |
| 160 | async function main() { |
| 161 | const args = parseArguments(); |
| 162 | |
| 163 | let tfn; |
| 164 | if (args.gpu) { |
| 165 | console.log('Using GPU for training'); |
| 166 | tfn = require('@tensorflow/tfjs-node-gpu'); |
| 167 | } else { |
| 168 | console.log('Using CPU for training'); |
| 169 | tfn = require('@tensorflow/tfjs-node'); |
| 170 | } |
| 171 | |
| 172 | console.log('Loading data...'); |
| 173 | const multihot = args.modelType === 'multihot'; |
| 174 | const {xTrain, yTrain, xTest, yTest} = |
| 175 | await loadData(args.numWords, args.maxLen, multihot); |
| 176 | |
| 177 | console.log('Building model...'); |
| 178 | const model = buildModel( |
| 179 | args.modelType, args.maxLen, args.numWords, args.embeddingSize); |
| 180 | |
| 181 | model.compile({ |
| 182 | loss: 'binaryCrossentropy', |
| 183 | optimizer: args.optimizer, |
| 184 | metrics: ['acc'] |
| 185 | }); |
| 186 | model.summary(); |
| 187 | |
| 188 | console.log('Training model...'); |
| 189 | await model.fit(xTrain, yTrain, { |
| 190 | epochs: args.epochs, |
| 191 | batchSize: args.batchSize, |
| 192 | validationSplit: args.validationSplit, |
| 193 | callbacks: args.logDir == null ? null : tfn.node.tensorBoard(args.logDir, { |
| 194 | updateFreq: args.logUpdateFreq |
| 195 | }) |
| 196 | }); |
| 197 | |
| 198 | console.log('Evaluating model...'); |
| 199 | const [testLoss, testAcc] = |
| 200 | model.evaluate(xTest, yTest, {batchSize: args.batchSize}); |
| 201 | console.log(`Evaluation loss: ${(await testLoss.data())[0].toFixed(4)}`); |
| 202 | console.log(`Evaluation accuracy: ${(await testAcc.data())[0].toFixed(4)}`); |
| 203 | |
| 204 | // Save model. |
| 205 | let metadata; |
| 206 | if (args.modelSaveDir != null && args.modelSaveDir.length > 0) { |
| 207 | if (multihot) { |
| 208 | console.warn( |
| 209 | 'Skipping saving of multihot model, which is not supported.'); |
| 210 | } else { |
| 211 | // Create base directory first. |
| 212 | shelljs.mkdir('-p', args.modelSaveDir); |
| 213 | |
| 214 | // Load metadata template. |
| 215 | console.log('Loading metadata template...'); |
| 216 | metadata = await loadMetadataTemplate(); |
| 217 |
no test coverage detected