聊一聊model.fit()与model.evaluate()指标值不同的坑

聊一聊model.fit()与model.evaluate()指标值不同的坑

提示:最近在使用tensorflow.keras进行回归模型的训练,遇到了一点问题如下。


一、fit()训练过程的值与model.evaluate()的值相差很大

1.部分训练过程如下

代码如下(示例):

Epoch 63/100
12182/12182 - 7s - loss: 2218672.4850 - mse: 2218671.5000 - RMSE: 1445.7142 - mae: 1102.8094 - val_loss: 6981241.4427 - val_mse: 6981241.5000 - val_RMSE: 2340.7271 - val_mae: 2175.6528
Epoch 64/100
12182/12182 - 5s - loss: 2061400.8190 - mse: 2061399.8750 - RMSE: 1398.1644 - mae: 1070.7137 - val_loss: 62601254.5411 - val_mse: 62601256.0000 - val_RMSE: 7257.8809 - val_mae: 7141.2192
Epoch 65/100
12182/12182 - 5s - loss: 2187660.4353 - mse: 2187660.5000 - RMSE: 1435.8937 - mae: 1098.1290 - val_loss: 330649278.9154 - val_mse: 330649248.0000 - val_RMSE: 16415.5371 - val_mae: 16445.8516
Epoch 66/100
12182/12182 - 7s - loss: 2053245.3059 - mse: 2053245.1250 - RMSE: 1385.2153 - mae: 1059.9854 - val_loss: 9686156.0783 - val_mse: 9686157.0000 - val_RMSE: 2942.7732 - val_mae: 2712.3650
Epoch 67/100
12182/12182 - 8s - loss: 2172847.3127 - mse: 2172847.0000 - RMSE: 1424.4069 - mae: 1089.1759 - val_loss: 69302169.7549 - val_mse: 69302168.0000 - val_RMSE: 7887.9683 - val_mae: 7707.4131
Epoch 68/100
12182/12182 - 8s - loss: 2085539.7928 - mse: 2085540.3750 - RMSE: 1399.4995 - mae: 1062.7623 - val_loss: 135029237.0560 - val_mse: 135029264.0000 - val_RMSE: 10862.0469 - val_mae: 10757.3652
Epoch 69/100
12182/12182 - 7s - loss: 2048575.7949 - mse: 2048575.7500 - RMSE: 1390.2236 - mae: 1068.1414 - val_loss: 79998649.2958 - val_mse: 79998656.0000 - val_RMSE: 7897.0049 - val_mae: 7833.5410
Wall time: 7min 26s

2.采用model.evaluate()的结果

这里由于权重的覆盖,所以最终模型是最后一步:

scores = Model.evaluate(x_train,y_train, verbose=2, batch_size=32)
12182/1 - 1s - loss: 4461230.6247 - mse: 8907411.0000 - RMSE: 2501.3462 - mae: 2289.9673

下面是测试集:

scores = Model.evaluate(x_test,y_test, verbose=2, batch_size=32)
2375/1 - 0s - loss: 41310416.8979 - mse: 79998656.0000 - RMSE: 7897.0049 - mae: 7833.5410

可以看出测试集上没有变化,这是因为其不参与梯度更新,但是训练集的差距“非常之大”


总结

请教了大神后了解到:
1.模型的BatchNormalizationDropoutLayerNormalization等优化手段只在fit时,对训练集有用;
2.在进行evaluate()的时候,这些优化都会失效,因此,再次进行evaluate(x_train,y_train),就算添加了batchsize,也不能达到相同的评估计算结果。


  • 6
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风筝不是风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值