Python Keras中的LSTM始终返回相同的输出
我有一个大小为(5358293,30)的数据集,我想训练一个LSTM网络来预测0到1之间的值 我的神经网络定义如下:Python Keras中的LSTM始终返回相同的输出,python,keras,lstm,Python,Keras,Lstm,我有一个大小为(5358293,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,
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)
列车运行期间所有时段的损失值约为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
_________________________________________________________________
如果我们假设您的模型是正确的,那么您可以尝试的第一件事就是增加历代的数量
epochs=20
还可以使用优化器。例如,选择Adam优化器,确保测试不同的参数:
opt = Adam(lr=0.0001, beta_1=0.9, beta_2=0.999, decay=0.01)
您可以添加
model.summary()
,以更好地预测您的模型。我认为提供模型摘要是理解系统的第一件事
既然您提到了特性,那么注意如何表示它们是非常重要的。根据功能表示,您可能需要修改LSTM模型。我尝试了随机播放,并将时间步长减少到59,但没有任何更改。我真的不明白怎么回事,为什么你们认为首先需要LSTM?因为每个序列都包含从视频中提取的数据。所以我有5358个视频,从每个视频中我提取了293帧,从每个帧中我提取了30个featuresOK。为什么你选择在LSTM里面只有10个单位?增加这个数字怎么样?我尝试了一个更大的网络,一个单一的LSTM层有64个神经元,另一个版本有两个LSTM层有64个神经元,但我总是得到相同的结果。我建议先检查并确认你的LSTM类型,然后在安装LSTM之前检查你是否对数据进行了编码,但这也许是另一个问题。