我正在尝试为 NLP 任务实现一个神经网络,其中包含一个卷积层,后跟一个 LSTM 层。我目前正在尝试使用新的 Tensorflow 2.0 来做到这一点。但是,在构建模型时,我遇到了一个我无法理解的错误。
# Input shape of training and validation set
(1000, 1, 512), (500, 1, 512)
该模型
model = keras.Sequential()
model.add(keras.layers.InputLayer(input_shape=(None, 512)))
model.add(keras.layers.Conv1D(128, 1, activation="relu"))
model.add(keras.layers.MaxPooling1D((2)))
model.add(keras.layers.LSTM(64, activation="tanh"))
model.add(keras.layers.Dense(6))
model.add(keras.layers.Activation("softmax"))
错误
InvalidArgumentError: Tried to stack elements of an empty list with non-fully-defined element_shape: [?,64]
[[{{node unified_lstm_16/TensorArrayV2Stack/TensorListStack}}]] [Op:__inference_keras_scratch_graph_26641]
起初,我试图检查是否存在关于使用层实现Conv1D
层的任何问题LSTM
。我找到了这篇文章,建议我重新塑造卷积层和 lstm 层之间的层。但这仍然不起作用,我得到了一个不同的错误。这篇文章看起来很相似,但它没有使用 Tensorflow 2.0 并且到目前为止没有回答。我还发现这篇文章具有堆叠卷积层和 lstm 层的相同意图。但它使用Conv2D
而不是Conv1D
. 这篇文章还建议使用内置层重塑卷积层的输出,称为Reshape
. 然而,我仍然遇到同样的错误。
我还尝试input_shape
在 LSTM 层中指定 。
model = keras.Sequential()
model.add(keras.layers.InputLayer(input_shape=(None, 512)))
model.add(keras.layers.Conv1D(128, 1, activation="relu"))
model.add(keras.layers.MaxPooling1D((2)))
model.add(keras.layers.LSTM(64, activation="tanh", input_shape=(None, 64)))
model.add(keras.layers.Dense(6))
model.add(keras.layers.Activation("softmax"))
最后我仍然遇到同样的错误。
我不确定我是否了解如何堆叠一维卷积层和 lstm 层。我知道 TF2.0 仍然是 Alpha,但有人能指出我缺少什么吗?提前致谢