Keras 多元LSTM预测损失及其评价
我有一个CNN-RNN模型架构,用于时间序列回归问题的双向LSTM。我的损失不会超过50个时代。每个历元有20k个样本。损失保持在0.001-0.01之间反弹Keras 多元LSTM预测损失及其评价,keras,regression,lstm,rnn,Keras,Regression,Lstm,Rnn,我有一个CNN-RNN模型架构,用于时间序列回归问题的双向LSTM。我的损失不会超过50个时代。每个历元有20k个样本。损失保持在0.001-0.01之间反弹 batch_size=1 epochs = 50 model.compile(loss='mean_squared_error', optimizer='adam') trainingHistory=model.fit(trainX,trainY,epochs=epochs,batch_size=batch_size,shuffle
batch_size=1
epochs = 50
model.compile(loss='mean_squared_error', optimizer='adam')
trainingHistory=model.fit(trainX,trainY,epochs=epochs,batch_size=batch_size,shuffle=False)
model = Sequential()
model.add(LSTM(units=128, dropout=0.05, recurrent_dropout=0.35, return_sequences=True, batch_input_shape=(batch_size,featureSteps,input_dim)))
model.add(LSTM(units=32, dropout=0.05, recurrent_dropout=0.35, return_sequences=False))
model.add(Dense(units=2, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy'])
如果您使用以下工具进行测试:
- 错误数据:损失~0.5
- 正确数据:损失~0.01
Y
处于上次激活功能的范围内
- 对于
(LSTM的默认值),所有Y数据应介于-1和+1之间tanh
- 对于
,介于0和1之间sigmoid
- 对于
,介于0和1之间,但请确保最后一个维度不是1,否则所有结果将始终为1李>softmax
- 对于
,介于0和无穷大之间relu
- 对于
,任何值线性
在第一种情况下,您可以以较低的学习率重新编译(训练后)模型,通常我们将其除以10,其中默认值为
0.0001
:
案例2:
如果数据正常,请尝试在模型停滞后降低学习率
adam的默认学习率为0.0001
,我们通常将其除以10:
from keras.optimizers import Adam
#after training enough with the default value:
model.compile(loss='mse', optimizer=Adam(lr=0.00001)
trainingHistory2 = model.fit(.........)
#you can even do this again if you notice that the loss decreased and stopped again:
model.compile(loss='mse',optimizer=Adam(lr=0.000001)
如果问题是学习率,这将使您的模型学习到比以前更多的东西(在优化程序自我调整之前,在开始时可能会有一些困难)
案例3:
如果没有成功,也许是时候提高模型的性能了。
可能会向图层添加更多单位,添加更多图层,甚至更改模型
案例4:
你可能对此无能为力
但是,如果您像案例3那样增加了模型,请小心过度拟合(保留一些测试数据以比较测试损失和训练损失)
太好的模型只会记住你的数据,而不是学习关于它的重要见解 你能评论一下这段训练史吗?{'acc':[0.54,0.62,0.70,0.77,0.81,0.84,0.85,0.86,0.88,0.89],'loss':[0.69,0.64,0.56,0.47,0.40,0.35,0.32,0.29,0.27,0.24],'val_acc':[0.52,0.52,0.51,0.50,0.52,0.53,0.51,0.49],'val_'[0.69,0.75,0.81,0.99,1.03,1.09,1.04,1.16,1.13,1.35]}听起来像是过度拟合。当训练数据变得更好而测试数据变得更差时。这意味着你的模型正在学习记忆训练数据。(它有太多的参数,可能太多的层,或者太多的单元)。人们经常使用“退出”层以减少过度拟合。您也可以尝试更小的模型。(这是假设您的验证数据和培训数据是正确的,选择时没有偏差,等等。)我在问题中添加了我的模型。请看一看。因为我只是想证明我的X和Y中存在一种可学习的关系,而且我的准确性稍微提高了一些(53%时提高了2%)根据我正确匹配的数据,我能得出结论吗?我不确定的原因是我的损失曲线看起来不像流行的L形曲线。正如我所说,你的曲线是过度拟合的曲线。你需要制作一个更小的模型。模型的能力更低。不幸的是,最佳尺寸没有确切的答案。你必须测试直到你的曲线变小鞑靼人的行为不同。你的模型目前正在记忆训练结果(因为你的模型太好了)。它没有学习任何关于测试数据的东西。