keras训练完模型,为什么对训练集进行evaluate和训练时的loss完全不一样?白训练了吗?

如图1所示,我用keras建立好了model,用model.fit进行训练,显示训练集的数据loss已经接近1*e-5,而且第二个输出的性能度量准确性已经是1了,然而接下... 如图1所示,我用keras建立好了model,用model.fit进行训练,显示训练集的数据loss已经接近1*e-5,而且第二个输出的性能度量 准确性已经是1了,然而接下来用model.evaluate对同样的训练集 (训 练 集!不是测试集,一共就400多条数据)进行测试,在过拟合的情况下理论上应该已经完美拟合了才对,然而实际情况如图2 ,就跟没训练过一样……这是为什么呢 展开
 我来答
吉祥长乐7
2020-02-17 · TA获得超过2875个赞
知道小有建树答主
回答量:5372
采纳率:46%
帮助的人:476万
展开全部
问题简述:
在keras框架下使用model.fit得到的训练准确率和损失表现都非常好,但是在相同的训练集上使用model.evaluate得到的准确率和损失都非常差
keras中的model.fit和model.evaluate在同样的数据集上的准确率acc和损失值loss存在巨大的差异
https://github.com/keras-team/keras/issues/6977
上面的github链接讨论了多种可能,
1.model.fit和model.evaluate的batch_size不匹配:model.fit时若指定了batch_size,在使用model.evaluate时的batch_size默认为16,而使用model.evaluate时并未设置与使用model.fit时同样的batch_size。解释大概为不同的batch_size的BatchNormalizaiton会产生不同的效果不同(当然在神经网络中存在BatchNormalization层时)
结果:匹配batch_size了也无效
2.dropout,batchnorm的影响:model.fit时的dropout层是设置dropout参数的,比如说0.5,而model.evaluate设置的dropout参数为1,keras在使用这两个function的时候会呈现两种模式
追问
真的是BN层的问题!把BN层消掉会改善很多!NB!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式