python - 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
_________________________________________________________________
解决方案
如果我们假设您的模型没问题,那么您可以尝试的第一件事就是增加 epoch 的数量。
epochs=20
还可以使用优化器。例如,您选择 Adam 优化器,确保您测试不同的参数:
opt = Adam(lr=0.0001, beta_1=0.9, beta_2=0.999, decay=0.01)
您可以添加model.summary()
以更好地预测您的模型。我认为提供模型摘要是了解系统的第一件事。
既然你提到了特性,那么注意你如何表示它们是非常重要的。根据特征表示,您可能需要修改 LSTM 模型。
推荐阅读
- esp8266 - 如何为 ESP8266 实现 100 微秒的股票回调?
- bash - 使用 jq 从变量中更改 json 对象和字段值
- android - 扩展 MaterialButton 时,我无法检索在 styles.xml 中设置的自定义属性
- javascript - Javascript没有在laravel宅基地应用程序上触发
- c - 如果我想访问文件中的不同信息,是否必须多次 fseek?
- c++ - 如何有效地将左值或右值绑定到同一个引用?
- sas - sas 使文件夹名称中带有助记符的目录
- github - GitHub Repo 的 Google Cloud Builds 触发器始终显示“没有标签匹配”
- javascript - Asp:Calendar 总是返回默认日期,而不是单击按钮后用户选择的日期
- python - 我在编写一个正方形的函数时遇到了 Python 的问题