[英]Keras Functional API embedding layer output to LSTM
將嵌入層的 output 傳遞到 LSTM 層時,我遇到了我無法弄清楚的ValueError
。 我的 model 是:
def lstm_mod(self, n_cells,batch_size):
input = tf.keras.Input((self.n_seq, self.n_features))
embedding = tf.keras.layers.Embedding(batch_size,self.n_seq,input_length=self.n_clusters)(input)
x= tf.keras.layers.LSTM(n_cells)(embedding)
out = tf.keras.layers.Dense(1)(x)
model = tf.keras.Model(input, out,name="LSTM")
model.compile(loss='mse', optimizer='Adam')
return model
錯誤是:
ValueError: Input 0 of layer lstm is incompatible with the layer: expected ndim=3, found ndim=4. Full shape received: [None, 128, 7, 128]
鑒於傳遞給 model 輸入和嵌入層的尺寸通過 model 的 arguments 是一致的,我對此感到困惑。 任何指導表示贊賞。
當您通過 model 提供數據時,Keras 會添加一個額外的維度 ( None
),因為它會分批處理您的數據。
在這一行:
input = tf.keras.Input((self.n_seq, self.n_features))
您已經定義了一個二維輸入,並且 Keras 添加了第三維(批次),因此expected ndim=3
。
但是,傳遞給輸入層的數據是 4 維的,這意味着您的實際輸入數據形狀是 3 維 + 批次維度,而不是 2 維 + 批次。
要解決此問題,您需要將 3-D 輸入重新整形為 2-D,或者向輸入形狀添加額外的維度。
打印出self.n_seq
和self.n_features
的值,找出形狀 128、7、128 中缺少的內容128, 7, 128
這將指導您了解需要添加的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.