我目前正在尝试编写一个系统,用于将特定的数字序列分类为动作。使用TensorFlow.js构建这个系统到目前为止进展顺利,但现在我遇到了一些问题。
我正在尝试使用以下这样的输入来训练模型:
[ [0,1,2,3,4,5,6,7,8,9], [0,1,2,3,4,5,6,7,8,9], [0,1,2,3,4,5,6,7,8,9], [0,1,2,3,4,5,6,7,8,9], [0,1,2,3,4,5,6,7,8,9],]
例如,这应该会产生一个输出[1]
我创建了一个如下所示的张量:
let t = tf.tensor2d([...Array.from({ length: (5 * 25) }, (v, i) => i)], [5, 25])//Tensor// [[0 , 1 , 2 , ..., 22 , 23 , 24 ],// [25 , 26 , 27 , ..., 47 , 48 , 49 ],// [50 , 51 , 52 , ..., 72 , 73 , 74 ],// [75 , 76 , 77 , ..., 97 , 98 , 99 ],// [100, 101, 102, ..., 122, 123, 124]]
现在看起来是想要的效果,t.shape 给出 [ 5, 25 ]
,我以为我可以用它作为模型的 inputShape,经过研究,我发现需要定义为 batchInputShape
而不是 inputShape
,这解决了一个错误。
loadedModel.add(tf.layers.dense({ units: 256, activation: 'relu', batchInputShape: [5, 25] }));
现在我遇到了一个问题,模型将张量视为多个值,因此寻找多个输出,但我希望它只给出一个输出。
在运行await loadedModel.fit(t, tf.tensor([0]), { epochs: 5 })
我得到Input Tensors should have the same number of samples as target Tensors. Found 5 input sample(s) and 1 target sample(s).
我认为这表明了上述问题。
现在我的最后一个问题是,我应该如何设置 inputShape(如果这是我做错的地方),以便只期望一个输出。
此致
回答:
我发现如果我只是将数据数组展平,这也应该能正常工作。