I'm very new to tensorflow.js and machine learning in general. I was trying to do a basic tf.js model for the titanic dataset on kaggle, and I got pretty far, but I ran into an error while trying to train my model. Here is my code:
function convertToTensor(data, ify) {
return tf.tidy(() => {
tf.util.shuffle(data);
const pc = data.map(d => Number(d.pc))
const sex = data.map(d => d.sex)
const age = data.map(d => Number(d.age))
const sib = data.map(d => Number(d.sib))
const par = data.map(d => Number(d.par))
const fare = data.map(d => Number(d.fare))
const inputs = [pc, sex, age, sib, par, fare]
let newy = []
inputs[0].forEach((thing, i) => {
newy.push([thing, inputs[1][i], inputs[2][i], inputs[3][i], inputs[4][i], inputs[5][i]])
})
let inputy = []
for (arr of newy){
inputy.push(tf.tensor2d(arr, [1, arr.length]))
}
if (ify) {
const labels = data.map(d => Number(d.sur))
const labelTensor = tf.tensor2d(labels, [labels.length, 1]);
return {
inputs: inputy,
labels: labelTensor,
}
}
return {
inputs: inputy
}
});
}
function createModel(data) {
// Create a sequential model
const model = tf.sequential();
// Add a single input layer
model.add(tf.layers.dense({inputShape: [1, 6], units: 100}));
model.add(tf.layers.dense({units: 100, activation: 'relu'}));
model.add(tf.layers.dense({units: 100, activation: 'relu'}));
model.add(tf.layers.flatten())
model.add(tf.layers.dense({units: 1}));
return model;
}
async function trainModel(model, inputs, labels) {
// Prepare the model for training.
model.compile({
optimizer: tf.train.adam(),
loss: 'sparseCategoricalCrossentropy',
metrics: ['accuracy']
});
const batchSize = 32;
const epochs = 30;
return await model.fit(tf.stack(inputs), labels, {
batchSize,
epochs,
shuffle: true
})
}
Here is the error that I am getting:
rror: Error in oneHot: depth must be >=2, but it is 1
at oneHot_ (/home/runner/RobustRepulsiveWebmaster/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:7536:15)
at Object.oneHot__op [as oneHot] (/home/runner/RobustRepulsiveWebmaster/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:4283:29)
at /home/runner/RobustRepulsiveWebmaster/node_modules/@tensorflow/tfjs-layers/dist/tf-layers.node.js:5082:32
at /home/runner/RobustRepulsiveWebmaster/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:3337:22
at Engine.scopedRun (/home/runner/RobustRepulsiveWebmaster/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:3347:23)
at Engine.tidy (/home/runner/RobustRepulsiveWebmaster/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:3336:21)
at Object.tidy (/home/runner/RobustRepulsiveWebmaster/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:8941:19)
at sparseCategoricalCrossentropy (/home/runner/RobustRepulsiveWebmaster/node_modules/@tensorflow/tfjs-layers/dist/tf-layers.node.js:5078:16)
at totalLossFunction (/home/runner/RobustRepulsiveWebmaster/node_modules/@tensorflow/tfjs-layers/dist/tf-layers.node.js:9628:32)
at /home/runner/RobustRepulsiveWebmaster/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:3337:22
at Engine.scopedRun (/home/runner/RobustRepulsiveWebmaster/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:3347:23)
at Engine.tidy (/home/runner/RobustRepulsiveWebmaster/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:3336:21)
at /home/runner/RobustRepulsiveWebmaster/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:3865:143
at Engine.scopedRun (/home/runner/RobustRepulsiveWebmaster/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:3347:23)
at Engine.gradients (/home/runner/RobustRepulsiveWebmaster/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:3865:22)
at variableGrads (/home/runner/RobustRepulsiveWebmaster/node_modules/@tensorflow/tfjs-core/dist/tf-core.node.js:13782:21)
(node:157) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:157) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
I found a question very similar to this one: Error in oneHot: depth must be >=2, but it is 1, but it didn't have an answer, so I couldn't get anything from it.
Thanks in advance!