簡體   English   中英

如何使用Tensorflow2.0 alpha堆疊卷積層和LSTM?

[英]How to stack Convolutional Layer and LSTM using Tensorflow2.0 alpha?

我正在嘗試為具有卷積層和LSTM層的NLP任務實現神經網絡。 我目前正在嘗試使用新的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層是否存在任何問題。 我發現了這篇帖子 ,暗示了這一點 ,以便我重塑卷積層和lstm層之間的層。 但這仍然不起作用,而是出現了另一個錯誤。 這篇文章看起來很相似,但到目前為止並未使用Tensorflow 2.0,也沒有回答。 我還發現這篇文章的意圖是堆疊卷積層和lstm層。 但是它使用Conv2D而不是Conv1D 這篇文章還建議將卷積層的輸出與內置的稱為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"))

padding =“ same”應該可以解決您的問題。

更改以下行:

model.add(tf.keras.layers.MaxPooling1D(2, padding="same"))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM