在 keras 中训练 LSTM 模型时,损失值到底给出了啥?
Posted
技术标签:
【中文标题】在 keras 中训练 LSTM 模型时,损失值到底给出了啥?【英文标题】:What exactly does the loss value give while training a LSTM model in keras?在 keras 中训练 LSTM 模型时,损失值到底给出了什么? 【发布时间】:2021-01-16 04:30:57 【问题描述】:我有一个 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:
我想知道为什么训练时验证损失与手动计算时不同。训练时的损失如何计算?
【问题讨论】:
你是怎么得到predicted_y_values_unnor
的?
在深度学习中,通常会给出归一化的输入(mean=0 和 std-dev=1)。这就是为什么损失数字非常小。
我现在明白了。我将归一化损失与我的非归一化均方误差进行比较。
太棒了。很高兴能帮助你。请接受答案,以便我们能够帮助社区中的其他人。
【参考方案1】:
你选择的loss是行中的mean_squared_error
model.compile(optimizer = 'adam', loss = 'mean_squared_error')
这是你的 LSTM 模型最小化的损失。
均方误差或 MSE 损失是用于回归问题的默认损失。均方误差计算为预测值和实际值之间的平方差的平均值。无论预测值和实际值的符号如何,结果始终为正,完美值为 0.0。平方意味着较大的错误比较小的错误导致更多的错误,这意味着模型因犯了较大的错误而受到惩罚。
LSTM 是一个通用模型,您可以选择许多不同的损失函数。这是 keras 内置的可用功能列表 https://keras.io/api/losses/ 您需要根据您的问题选择损失函数。
【讨论】:
我使用测试数据上的 sklean mean_squared_error 函数计算了预测值和实际值之间的平方差的平均值。它与训练时的验证损失有很大不同。训练时的验证损失在 10^-5 的范围内,而使用 sklearn 计算均方误差的值为 130.75。我在比较两个不同的东西吗?以上是关于在 keras 中训练 LSTM 模型时,损失值到底给出了啥?的主要内容,如果未能解决你的问题,请参考以下文章
LSTM 模型中 epoch 图中的损失跳跃 - keras