Reputation: 1
I'm trying to train a model using "binaryCrossentropy" loss. But all I get when printing out loss and accuracy is : loss :NaN. And accuracy is 59.93 (does not change over training).
Any ideas what could be the reason?
Here is the code:
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,
});
Thanks for your time and feedbacks.
Upvotes: 0
Views: 415
Reputation: 1
Training dataset contains empty values. Removing all lines with empty values solves the problem.
Upvotes: 0