tensorflow - 如何使用Tensorflow2.0 alpha堆叠卷积层和LSTM?

标签 tensorflow deep-learning tf.keras tensorflow2.0

我正在尝试为 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]

首先,我尝试检查使用 LSTM 层实现 Conv1D 层是否存在任何问题。我发现this post ,这表明我 reshape 了卷积层和 lstm 层之间的层。但这仍然不起作用,我得到了一个不同的错误。 This post看起来很相似,但它不使用 Tensorflow 2.0,到目前为止还没有回答。我还发现这篇文章具有相同的堆叠卷积层和 lstm 层的意图。但它使用 Conv2D 而不是 Conv1DThis post还建议使用名为 Reshape 的内置层来 reshape 卷积层的输出。然而,我仍然遇到同样的错误。

我还尝试在 LSTM 层中指定 input_shape

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,但是有人能指出我错过了什么吗?提前致谢

最佳答案

问题是维度问题。您的特征的形状为 [..., 1, 512];因此,MaxPooling1D pooling_size 2 大于 1,导致了该问题。

添加 padding="same" 将解决该问题。

model = tf.keras.Sequential()
model.add(tf.keras.layers.InputLayer(input_shape=(None, 512)))
model.add(tf.keras.layers.Conv1D(128, 1, activation="relu"))
model.add(tf.keras.layers.MaxPooling1D(2, padding="same"))

model.add(tf.keras.layers.LSTM(64, activation="tanh"))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(6))
model.add(tf.keras.layers.Activation("softmax"))

关于tensorflow - 如何使用Tensorflow2.0 alpha堆叠卷积层和LSTM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55746170/

相关文章:

python - 如何在此 Tensorflow 模型中保存和加载 BatchNormalization 层?

tensorflow - 有没有办法使用 Tensorflow(使用 Keras)或 PyTorch 删除 NN 层之间的 1-2(或更多)特定神经元连接?

python - 无法将大小为 1665179 的数组 reshape 为形状 (512,512,3,3)

tensorflow - 没有张量板图

python - 在 slim 的tensorflow和tf记录批处理中微调inceptionv3的问题

python - 试图获得单个图像的卷积

python - tensorflow softmax_cross_entropy_with_logits 和 sigmoid_cross_entropy_with_logits 的实现区别

python - 当我增加神经元或层数时,我的 tensorflow 模型无法训练

python - Keras模型连接: Attribute and Value error

tensorflow - 使用稀疏_分类_交叉熵时如何定义自定义标签值?