0

JS中的错误:

未捕获(承诺中)错误:输入 0 与层展平不兼容:预期 min_ndim=3,发现 ndim=2。

我从尝试在 keras/python 中导入预训练模型(如 VGG oder ResNets)的人那里找到了相同错误的线程。

对他们来说,这主要是因为他们仍然包括模型的顶层,所以不幸的是,这些线程与我在 TensorflowJS 中从 python 完全导入自训练模型的问题无关。我的代码:

Python代码:

model = keras.models.Sequential([
    keras.layers.GRU(128, return_sequences=True, input_shape=[ None, max_id+1]),
    keras.layers.GRU(128, return_sequences=True),
    keras.layers.GRU(128),
    keras.layers.Flatten(),
    keras.layers.Dense(output_size, activation="softmax")
])

model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=['accuracy'])
history = model.fit(train_tokens_X, train_target, validation_data=(valid_tokens_X, valid_target), batch_size=32, epochs=15)
model.save(os.path.join(data_dir, "prototype.h5"))

然后我将它保存到 .h5 并使用 tensorflowjs_converter 进行转换,如下所述:https ://www.tensorflow.org/js/tutorials/conversion/import_keras

然后我在JS中导入它:

<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Js test</title>
</head>
<body>
<h1>JavaScript TF test</h1>

<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@1.0.0/dist/tf.min.js"></script>
<script>
    // init
    let model = null;
    (async () => {
        alert('Hello World!');
        tf.loadLayersModel('http://localhost:3000/prototype_web/model.json'); // Code crashes here with "Error: Input 0 is incompatible with layer flatten: expected min_ndim=3, found ndim=2."
        alert('Hello World2!');
        model.summary();
    })();
</script>

</body>
</html>

到目前为止我已经尝试过:

  • 在 python 中重新导入 .h5 模型效果很好。
  • 将没有任何 RNN 层的小型 MNIST 模型转换为 Tensorflow JS 可以无缝工作,所以这不是 TensorflowJS 配置错误的问题,所以看起来 GRU 层是这里的问题?!
  • 将模型保存为 TF SavedModel 而不是 Keras 的 h5 无法转换为tensorflowjs_converter
  • 固定input_shapetoinput_shape=[ 61, max_id+1])而不是None使训练变得不可能,因为训练实例的长度不同
  • 在 tfjs 中重新实现模型并仅导入权重在这里不起作用,因为 tfjs 缺少从文件加载单个权重的功能

我非常感谢任何想法。

先感谢您!

4

1 回答 1

0

我遇到了同样的问题。删除线:

keras.layers.Flatten(),

它对我有用。

见:https ://github.com/tensorflow/tfjs/issues/2442#issuecomment-563319357

于 2020-04-14T10:27:04.193 回答