Python Keras中的LSTM始终返回相同的输出

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,

我有一个大小为(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, 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之前检查你是否对数据进行了编码,但这也许是另一个问题。