训练集的不同 mse 结果

different mse result for training set

mse 我得到了不同的结果。在训练期间,我在最后一个训练时期后得到 0.296,当我评估我的模型时,我得到 0.112。有谁知道为什么会这样吗?

代码如下:

model = Sequential()
model.add(Dropout(0.2))
model.add(LSTM(100, return_sequences=True,batch_input_shape=(batch_size,look_back,dim_x)))
model.add(Dropout(0.2))
model.add(LSTM(150,return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(100,return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(50,return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(1, activation='linear'))

model.compile(loss='mean_squared_error', optimizer='adam')
history=model.fit(x_train_r, y_train_r, validation_data=(x_test_r, y_test_r),\
                  epochs=epochs, batch_size=batch_size, callbacks=[es])

score_test = model.evaluate(x_test_r, y_test_r,batch_size=batch_size)
score_train = model.evaluate(x_train_r, y_train_r,batch_size=batch_size)

print("Score Training Data:")
print(score_train)

批量大小和一切都保持不变。有谁知道为什么 mse 的结果如此不同?

训练损失与训练结束后在训练数据上获得的损失之间存在差异的原因是模型中存在Dropout层。这是因为该层在训练和推理期间具有不同的行为。正如我在 中提到的,您可以通过将 training=True 传递给 dropout 调用,或使用 K.learning_phase() 标志和后端函数来使此行为相同。