Keras Functional API 嵌入层输出到 LSTM

时间:2021-04-23 05:12:58

标签: python tensorflow keras lstm embedding

将嵌入层的输出传递给 LSTM 层时,我遇到了一个我无法弄清楚的 .vh{ color: green; } .red-border{ border: 1px solid red; } 。我的模型是:

ValueError

错误是:

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 

鉴于传递给模型输入和嵌入层的维度通过模型的参数是一致的,我对此感到困惑。感谢您提供任何指导。

1 个答案:

答案 0 :(得分:0)

当您通过模型提供数据时,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 中缺少什么,这应该会指导您添加什么。

相关问题