Ayúdenme a comprender mi error en el código TensorFlow.js. Intentando superar la clasificación binaria y fitDataset.
Ejemplo simplificado https://jsfiddle.net/9w8hx21o/4/ .
En el ejemplo, tengo 4 observaciones que miden 4 por 7 y tienen cuatro etiquetas. Al comienzo del entrenamiento, aparece el error "los registros y las etiquetas deben tener la misma forma, pero tienen formas [2] y [2,1]".
const xs = [ [ [1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1], ], [ [2, 2, 2, 2, 2, 2, 2], [2, 2, 2, 2, 2, 2, 2], [2, 2, 2, 2, 2, 2, 2], [2, 2, 2, 2, 2, 2, 2], ], [ [3, 3, 3, 3, 3, 3, 3], [3, 3, 3, 3, 3, 3, 3], [3, 3, 3, 3, 3, 3, 3], [3, 3, 3, 3, 3, 3, 3], ], [ [4, 4, 4, 4, 4, 4, 4], [4, 4, 4, 4, 4, 4, 4], [4, 4, 4, 4, 4, 4, 4], [4, 4, 4, 4, 4, 4, 4], ] ] const ys = [0, 1, 0, 1] const model = tf.sequential() model.add(tf.layers.inputLayer({ inputShape: [4, 7] })) model.add(tf.layers.conv1d({ filters: 16, kernelSize: 2, activation: 'relu', })) model.add(tf.layers.flatten()) model.add(tf.layers.dense({ units: 1, activation: 'sigmoid' })) model.summary() model.compile({ optimizer: 'adam', loss: 'binaryCrossentropy', metrics: ['accuracy'] }) const xDataset = tf.data.array(xs); const yDataset = tf.data.array(ys); const xyDataset = tf.data.zip({xs: xDataset, ys: yDataset}).batch(2).shuffle(2) const print_xyDataset = async () => { await xyDataset.forEachAsync(e => { console.log('\n'); for (let key in e) { console.log(key + ':'); console.log('Shape ' + e[key].shape) e[key].print(); } }) } print_xyDataset() const train = async () => { await model.fitDataset(xyDataset, { epochs: 4, callbacks: { onEpochEnd: async (epoch, logs) => { console.log(`EPOCH (${epoch + 1}): Train Accuracy: ${(logs.acc * 100).toFixed(2)}\n`); }, } }) } train().catch(e => console.log(e))Probablemente esté ejecutando una nueva versión de TF. El antiguo TF crearía un comportamiento matemáticamente equivalente pero internamente inesperado si a true y pred les faltara una atenuación adicional. Hacer esto
const ys = [[0], [1], [0], [1]]
y a ver si eso lo soluciona.