• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    解决Pytorch中的神坑:关于model.eval的问题

    有时候使用Pytorch训练完模型,在测试数据上面得到的结果令人大跌眼镜。

    这个时候需要检查一下定义的Model类中有没有 BN 或 Dropout 层,如果有任何一个存在

    那么在测试之前需要加入一行代码:

    #model是实例化的模型对象
    model = model.eval()

    表示将模型转变为evaluation(测试)模式,这样就可以排除BN和Dropout对测试的干扰。

    因为BN和Dropout在训练和测试时是不同的:

    对于BN,训练时通常采用mini-batch,所以每一批中的mean和std大致是相同的;而测试阶段往往是单个图像的输入,不存在mini-batch的概念。所以将model改为eval模式后,BN的参数固定,并采用之前训练好的全局的mean和std;

    对于Dropout,训练阶段,隐含层神经元先乘概率P,再进行激活;而测试阶段,神经元先激活,每个隐含层神经元的输出再乘概率P。

    如下图所示:

    补充:pytorch中model.eval之后是否还需要model.train的问题

    答案是:需要的

    正确的写法是

    for循环之后再开启train,

    循环之后的评估model.eval之后就会再次回到model.train

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • 聊聊pytorch测试的时候为何要加上model.eval()
    • pytorch:model.train和model.eval用法及区别详解
    • 解决BN和Dropout共同使用时会出现的问题
    上一篇:Pytorch 中net.train 和 net.eval的使用说明
    下一篇:pytorch中的model.eval()和BN层的使用
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    解决Pytorch中的神坑:关于model.eval的问题 解决,Pytorch,中的,神坑,关于,