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

作者:汐梦聆海 时间:2021-09-17 17:16:55 

有时候使用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的问题

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

答案是:需要的

正确的写法是

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

for循环之后再开启train,

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

来源:https://blog.csdn.net/jackzhang11/article/details/105770223

标签:Pytorch,model.eval
0
投稿

猜你喜欢

  • Dreamweaver2004 中文乱码解决方案

    2007-01-31 10:20:00
  • TensorFlow实现随机训练和批量训练的方法

    2022-06-07 07:45:29
  • 基于Python制作一个文件解压缩工具

    2021-01-10 08:00:13
  • MySQL 数值类型概述int smallint tinyint

    2010-11-02 11:46:00
  • python获得一个月有多少天的方法

    2022-02-21 00:55:15
  • python中Switch/Case实现的示例代码

    2021-09-18 22:03:39
  • PyCharm在win10的64位系统安装实例

    2022-10-14 20:24:46
  • PHP header()函数常用方法总结

    2023-09-06 16:51:50
  • Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)

    2023-03-28 12:39:51
  • 解决pytorch 保存模型遇到的问题

    2021-12-13 08:26:37
  • python中sort和sorted排序的实例方法

    2022-12-22 09:10:12
  • 基于Python中的turtle绘画星星和星空

    2022-10-31 08:57:41
  • 基于python opencv单目相机标定的示例代码

    2022-10-10 23:42:37
  • Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享

    2023-05-01 17:28:00
  • 仿dw8代码折叠功能的HTML编辑器

    2008-04-29 21:19:00
  • HTML在线编辑器任意设置字号大小

    2007-08-29 19:55:00
  • Python异常处理总结

    2021-12-18 17:19:19
  • php实现mysql事务处理的方法

    2023-11-10 10:42:39
  • .NET Core2.1如何获取自定义配置文件信息详解

    2023-07-17 16:26:34
  • Python面向对象之类和对象实例详解

    2022-10-02 05:39:34
  • asp之家 网络编程 m.aspxhome.com