Keras 功能 api 输入形状错误,lstm 层收到 2d 而不是 3d 形状

Posted

技术标签:

【中文标题】Keras 功能 api 输入形状错误,lstm 层收到 2d 而不是 3d 形状【英文标题】:Keras functional api input shape error, lstm layer received 2d instead of 3d shape 【发布时间】:2021-12-04 19:38:25 【问题描述】:

我正在使用 keras 功能 api,但我收到有关模型输入形状的错误 -

ValueError:输入 0 与层金融模型不兼容:预期 shape=(None, 1, 62),发现 shape=(1, 62)

samples = np.array(samples, dtype=np.float64)
labels = np.array(labels, dtype=np.uint8)

x_train, x_test, y_train, y_test = train_test_split(samples, labels, test_size=0.33, 
random_state=42)
        
min_max = MinMaxScaler()
x_train = min_max.fit_transform(x_train)
                            
lstm_input = np.expand_dims(x_train, axis=1).shape

inputs = keras.Input(shape=(lstm_input[1],lstm_input[2]))
hidden = keras.layers.LSTM(lstm_input[2], activation='tanh')(inputs)
output = keras.layers.Dense(2)(hidden)
model = keras.Model(inputs=inputs, outputs=output, name="financial_model")

model.compile(
    loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
    optimizer=keras.optimizers.Adam(learning_rate=0.001),
    metrics=["accuracy"],
)
model.summary()
history = model.fit(x_train, y_train, batch_size=1, epochs=5, validation_split=0.2)

我从类似的问题中了解到,输入形状维度中省略了批量大小。当输入对象中遗漏了批量大小时,如何将 3 维输入形状输入 lstm 层?

【问题讨论】:

你的样品和标签是什么形状的? 【参考方案1】:

由于我的声望低于 50,我无法发表评论。我不确定这一点,但正如错误所说,您的输入形状是错误的。您必须为其添加另一个维度。试试这样的:

inputs = keras.Input(shape=(lstm_input[1],lstm_input[2], 1))

【讨论】:

感谢您的回答,问题是我没有在标签数组中添加时间步列,我还更改了输出层形状以匹配标签列的数量。

以上是关于Keras 功能 api 输入形状错误,lstm 层收到 2d 而不是 3d 形状的主要内容,如果未能解决你的问题,请参考以下文章

Keras LSTM 层输入形状

Keras LSTM 错误 - Logits 和标签应该具有相同的形状

LSTM Keras - 啥是正确的输入形状

keras LSTM 以正确的形状输入输入

Keras LSTM 输入维度设置

有状态LSTM输入形状错误