簡體   English   中英

Keras 功能 API 嵌入層 output 到 LSTM

[英]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_seqself.n_features的值,找出形狀 128、7、128 中缺少的內容128, 7, 128這將指導您了解需要添加的內容。

暫無
暫無

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

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