【问题标题】:Why val_loss is too low but Test Root Mean Squared Error is higher?为什么 val_loss 太低但测试均方根误差更高?
【发布时间】:2020-08-17 21:52:51
【问题描述】:

我正在训练 LSTM,其中数据集包含 17568 行的监测值,为期 2 个月,每个 5 分钟。

型号是:

model = Sequential()
model.add(LSTM(300, activation='relu', input_shape=(X_train.shape[1], X_train.shape[2]),return_sequences=True))
model.add(Dropout(0.1))
model.add(LSTM(300, activation='relu'))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
history = model.fit(X_train, Y_train, epochs=100, batch_size=70, validation_data=(X_test, Y_test), 
                    callbacks=[EarlyStopping(monitor='val_loss',patience=10, verbose=1)], verbose=1, shuffle=False)
model.summary()

计算RMSE的代码是:

train_predict = model.predict(X_train)
test_predict = model.predict(X_test)
# invert predictions
train_predict = scaler.inverse_transform(train_predict)
Y_train = scaler.inverse_transform([Y_train])
test_predict = scaler.inverse_transform(test_predict)
Y_test = scaler.inverse_transform([Y_test])
print('Train Mean Absolute Error:', mean_absolute_error(Y_train[0], train_predict[:,0]))
print('Train Root Mean Squared Error:',np.sqrt(mean_squared_error(Y_train[0], train_predict[:,0])))
print('Test Mean Absolute Error:', mean_absolute_error(Y_test[0], test_predict[:,0]))
print('Test Root Mean Squared Error:',np.sqrt(mean_squared_error(Y_test[0], test_predict[:,0])))

Keras 模型生成的训练表现有:

 val_loss : 0.0017
 loss :  0.0019

虽然手动计算的 RMSE 是:

Train Mean Absolute Error: 10.814174578676965
Train Root Mean Squared Error: 13.792484521895835
Test Mean Absolute Error: 8.059164253166095
Test Root Mean Squared Error: 10.6127240648618

请帮助我了解我做错了什么?

【问题讨论】:

    标签: python machine-learning keras neural-network lstm


    【解决方案1】:

    val_lossloss 在 SCALED 目标训练期间计算。 而maermse 是在 INVERSESCALED 目标上计算后的,这些是真实的性能。

    【讨论】:

      猜你喜欢
      • 2018-07-06
      • 1970-01-01
      • 2020-03-29
      • 2018-11-14
      • 1970-01-01
      • 2017-04-27
      • 2019-07-10
      • 2018-09-18
      • 1970-01-01
      相关资源
      最近更新 更多