我试着用"binaryCrossentropy“的损失来训练一个模型。但是,当我打印出损失和准确性时,我得到的只是:损失:NaN。准确性为59.93 (不改变训练)。
有什么可以解释的吗?
以下是代码:
const df = await dfd.readCSV("./trainOut2.csv");
const dft = await dfd.readCSV("./testOut2.csv");
const trainX = df.iloc({ columns: ["1:"] }).tensor;
const trainY = df["Survived"].tensor;
const testX = dft.iloc({ columns: ["1:"] }).tensor;
const testY = dft["Survived"].tensor;
console.log(trainX.shape, trainY.shape);
const callbacks = {
onEpochEnd: async (epoch, logs) => {
console.log(`
logs:${Object.keys(logs)}
EPOCH (${epoch + 1}):
Train Accuracy: ${(logs.acc * 100).toFixed(2)},
Val Accuracy: ${(logs.val_acc * 100).toFixed(2)},
Val Loss = ${(logs.val_loss * 100).toFixed(2)},
Loss = ${(logs.loss * 100).toFixed(2)}
`);
},
};
const model = tf.sequential();
model.add(
tf.layers.dense({
inputShape: 7,
units: 120,
activation: "relu",
kernelInitializer: "heNormal",
})
);
model.add(
tf.layers.dense({
units: 64,
activation: "relu",
})
);
model.add(
tf.layers.dense({
units: 32,
activation: "relu",
})
);
model.add(
tf.layers.dense({
units: 1,
activation: "sigmoid",
})
);
model.compile({
optimizer: "adam",
loss: "binaryCrossentropy",
metrics: ["accuracy"],
});
await model.fit(trainX, trainY, {
batchSize: 32,
epochs: 100,
verbose: 2,
validationData: [testX, testY],
callbacks: callbacks,
});
谢谢你的时间和反馈。
发布于 2022-10-09 12:02:55
培训数据集包含空值。删除所有带空值的行可以解决这个问题。
https://stackoverflow.com/questions/74001449
复制