首页 > 解决方案 > Keras 中的 LSTM 总是返回相同的输出

问题描述

我有一个大小为 (5358,293,30) 的数据集,我想训练一个 LSTM 网络来预测 0 到 1 之间的值。

我的神经网络定义如下:

model = Sequential()
model.add(LSTM(10, input_shape=(293, 30)))
model.add(Dense(1, activation="sigmoid"))
model.compile(loss="mean_squared_error", optimizer="adam")
model.fit(Xtrain, Ytrain, epochs=20, batch_size=38, shuffle=False)

训练期间所有 epoch 的损失值约为 0.04。当我在测试数据上测试神经网络时,我总是得到与结果相同的输出,~0.80。我也尝试了更大的网络,但输出没有改变。

我使用默认参数并在 [0,1] 范围内缩放数据。

这个问题的可能原因是什么?我该如何解决?

更新:简化版本的 model.summary() 的输出:

Layer (type)                 Output Shape              Param #   
=================================================================
lstm_1 (LSTM)                (None, 10)                1640      
_________________________________________________________________
dense_1 (Dense)              (None, 1)                 11        
=================================================================
Total params: 1,651
Trainable params: 1,651
Non-trainable params: 0
_________________________________________________________________

对于完整版:

Layer (type)                 Output Shape              Param #   
=================================================================
lstm_2 (LSTM)                (None, 293, 64)           24320     
_________________________________________________________________
lstm_3 (LSTM)                (None, 64)                33024     
_________________________________________________________________
dense_2 (Dense)              (None, 64)                4160      
_________________________________________________________________
dense_3 (Dense)              (None, 1)                 65        
=================================================================
Total params: 61,569
Trainable params: 61,569
Non-trainable params: 0
_________________________________________________________________

标签: pythonkeraslstm

解决方案


如果我们假设您的模型没问题,那么您可以尝试的第一件事就是增加 epoch 的数量。

epochs=20

还可以使用优化器。例如,您选择 Adam 优化器,确保您测试不同的参数:

opt = Adam(lr=0.0001, beta_1=0.9, beta_2=0.999, decay=0.01)

您可以添加model.summary()以更好地预测您的模型。我认为提供模型摘要是了解系统的第一件事。

既然你提到了特性,那么注意你如何表示它们是非常重要的。根据特征表示,您可能需要修改 LSTM 模型。


推荐阅读