我的代码从csv加载数据。然后,我建立一个模型并将数据传递给它。然后,我尝试使用数据训练模型。
现在,发生上述错误。由于我对javascript的了解很少,因此我不知道在哪里搜索。我认为这与我的.batch-call有关。如果我将行更改为“})。batch(20);”错误更改为:“形状20,1和20,2必须匹配”。以我的理解,批处理是在trainmodel-function的“ batchsize”参数中设置的。我不知所措,我的错误所在。我的数据集有196个特征列和一个标签列。
async train(): Promise<any> {
const csvUrl = '/assets/little.csv';
const csvDataset = tf.data.csv(
csvUrl,
{
columnConfigs: {
quit: {
isLabel: true
}
},
delimiter:','
});
const numOfFeatures = (await csvDataset.columnNames()).length -1;
console.log(numOfFeatures);
const flattenedDataset =
csvDataset
.map(({xs, ys}: any) =>
{
// Convert xs(features) and ys(labels) from object form (keyed by
// column name) to array form.
return {xs:Object.values(xs), ys:Object.values(ys)};
}).batch(10);
console.log(flattenedDataset.toArray());
const model = tf.sequential({
layers: [
tf.layers.dense({inputShape: [196], units: 100, activation: 'relu'}),
tf.layers.dense({units: 100, activation: 'relu'}),
tf.layers.dense({units: 100, activation: 'relu'}),
tf.layers.dense({units: 2, activation: 'softmax'}),
]
});
tfvis.show.modelSummary({name: 'Model Summary'}, model);
await trainModel(model, flattenedDataset);
console.log('Done Training');
}
}
async function trainModel(model, flattenedDataset) {
// Prepare the model for training.
model.compile({
optimizer: tf.train.adam(),
loss: tf.losses.meanSquaredError,
metrics: ['mse'],
});
const batchSize = 32;
const epochs = 50;
return await model.fitDataset(flattenedDataset, {
batchSize,
epochs,
shuffle: true,
callbacks: tfvis.show.fitCallbacks(
{ name: 'Training Performance' },
['loss', 'mse'],
{ height: 200, callbacks: ['onEpochEnd'] }
)
});
答案 0 :(得分:1)
最后一层具有units:2
,而只有一列quit
被设置为标签。
将另一列设置为标签,或者单位数应为1