在keras中训练LSTM模型时,损失值究竟给出了什么?

时间:2020-09-30 13:27:54

标签: python keras lstm loss-function

我有一个LSTM模型,可以根据今天的出水量,温度和降水量预测明天的出水量。

model = Sequential()
model.add(LSTM(units=24, return_sequences=True, 
           input_shape=(X_Train.shape[1],X_Train.shape[2])))
model.add(Dropout(0.2))
model.add(LSTM(units=50))
model.add(Dropout(0.2))
model.add(Dense(20, activation='relu'))
model.add(Dense(1, activation='linear'))
model.compile(optimizer = 'adam', loss = 'mean_squared_error')
history = model.fit(X_Train, Y_Train, epochs=8,
               validation_data=(X_Test, Y_Test))

While training I got:

Epoch 1/8
4638/4638 [==============================] - 78s 17ms/step - loss: 
1.9951e-04 - val_loss: 1.5074e-04
Epoch 2/8
4638/4638 [==============================] - 77s 17ms/step - loss: 
9.6735e-05 - val_loss: 1.0922e-04
Epoch 3/8
4638/4638 [==============================] - 78s 17ms/step - loss: 
6.5202e-05 - val_loss: 5.9079e-05
Epoch 4/8
4638/4638 [==============================] - 77s 17ms/step - loss: 
5.1011e-05 - val_loss: 4.9478e-05
Epoch 5/8
4638/4638 [==============================] - 77s 17ms/step - loss: 
4.3992e-05 - val_loss: 5.1148e-05
Epoch 6/8
4638/4638 [==============================] - 77s 17ms/step - loss: 
3.9901e-05 - val_loss: 4.2351e-05
Epoch 7/8
4638/4638 [==============================] - 74s 16ms/step - loss: 
3.6884e-05 - val_loss: 4.0763e-05
Epoch 8/8
4638/4638 [==============================] - 74s 16ms/step - loss: 
3.5287e-05 - val_loss: 3.6736e-05

但是当我手动计算均方误差时,会得到不同的结果

mean_square_root = mean_squared_error(predicted_y_values_unnor, Y_test_actual)
130.755469707972

Manual Calculation:

我想知道为什么培训和手动计算时的验证损失会有所不同。训练时如何计算损失?

1 个答案:

答案 0 :(得分:0)

您选择的损失是该行中的mean_squared_error

model.compile(optimizer = 'adam', loss = 'mean_squared_error')

这就是您的LSTM模型使损失最小化的原因。

均方误差或MSE损失是用于回归问题的默认损失。计算均方误差作为预测值与实际值之间平方差的平均值。无论预测值和实际值的符号如何,结果始终为正,理想值为0.0。平方表示较大的错误比较小的错误导致更多的错误,这意味着该模型因犯有较大的错误而受到惩罚。

LSTM是通用模型,您可以选择许多不同的损失函数。这是keras内置的可用功能列表 https://keras.io/api/losses/ 您需要根据问题选择损失函数。