【发布时间】:2021-11-08 14:28:16
【问题描述】:
我正在尝试构建一个简单的深度 lstm 神经网络。一般来说,我对机器学习的经验并不多。但我确实知道一些基础知识。这是我的示例模型。
const model = tf.sequential();
const {layers} = tf;
model.add(layers.lstm({
units : 256,
inputShape : [1, 6],
activation : "relu",
returnSequences : true,
}));
model.add(layers.dropout({rate: 0.2}));
model.add(layers.batchNormalization());
model.add(layers.lstm({
units : 128,
activation : "relu",
returnSequences : true,
}));
model.add(layers.dropout({rate: 0.2}));
model.add(layers.batchNormalization());
model.add(layers.lstm({
units : 128,
activation : "relu",
}));
model.add(layers.dropout({rate: 0.2}));
model.add(layers.batchNormalization());
model.add(layers.dense({
units : 32,
activation : "relu",
}));
model.add(layers.dropout({rate: 0.2}));
model.add(layers.dense({
units : 2,
activation : "softmax",
}));
model.compile({
//loss : "sparseCategoricalCrossentropy",
loss : "categoricalCrossentropy",
optimizer : tf.train.adam(0.001),
metrics : ['acc']
});
当我尝试训练模型时出现此错误。
const result = await model.fit(tf.ones([1, 1, 6]), tf.ones([1, 2]));
Error: Argument tensors passed to stack must be a `Tensor[]` or `TensorLike[]`
我在 github 上发现了一个关于 bug 的 thread。但我不认为这是tfjs 错误。因为那条线是一年多前的。如果这是一个错误,我很确定谷歌已经修复了。我想我在这里做错了什么。我也在 python 中尝试了完全相同的模型,它工作正常......但我不想使用 python。自从nodejs问世以来,我多年前就退出了python。我更喜欢 javascript 而不是 python,这对我来说更容易维护。你能帮我理解这里有什么问题吗?
【问题讨论】:
-
我遇到了同样的错误。对我来说,它将我的 lstm inputShape 从 [1, 20] 更改为 [20, 1]。见这里:github.com/tensorflow/tfjs/issues/3550#issuecomment-906864211
-
哇哦。在 tensorflowjs 中 inputShape 维度是反转的吧?比较 python 模型很有趣,也很令人困惑......无论如何它现在正在工作。非常感谢你。 :)
-
对我来说,如果我输入 [1, x],即使是 [1, 1] 也会抛出该错误。此外,使用此当前解决方案运行速度要慢得多。如果它在python中工作,也许你的编码与js不同?无论如何,希望看到一个实际的解决方案。
-
@JanV。你确定我们可以反转 inputShape 吗?据我了解,第一个维度是时间步长。
标签: lstm tensorflow.js