【问题标题】:different mse result for training set训练集的不同mse结果
【发布时间】:2018-11-05 14:22:08
【问题描述】:

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 得到如此不同的结果?

【问题讨论】:

  • 可能有多种原因:您的训练集不能代表您的测试集、您对训练集过度拟合、您存在类不平衡等。有多种原因可能推动差异化。
  • 但是什么更能代表我的训练集的 mse?我知道我的测试集和训练集之间存在差异,但我使用相同的数据进行训练,所以我真的很好奇这个巨大差异来自哪里。你知道我是怎么想出来的吗?

标签: python machine-learning keras loss-function mse


【解决方案1】:

训练loss和训练结束后在训练数据上得到的loss不一致的原因是模型中存在Dropout层。那是因为这一层在训练和推理期间有不同的行为。正如我在another answer 中提到的,您可以通过将training=True 传递给dropout 调用或使用K.learning_phase() 标志和后端函数来使这种行为相同。

【讨论】:

  • 非常感谢 :)
猜你喜欢
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-09
  • 2017-02-18
  • 1970-01-01
  • 2015-06-25
相关资源
最近更新 更多