pytorch中的model.eval()和BN层的使用


Posted in Python onMay 22, 2021

看代码吧~

class ConvNet(nn.module):
    def __init__(self, num_class=10):
        super(ConvNet, self).__init__()
        self.layer1 = nn.Sequential(nn.Conv2d(1, 16, kernel_size=5, stride=1, padding=2),
                                    nn.BatchNorm2d(16),
                                    nn.ReLU(),
                                    nn.MaxPool2d(kernel_size=2, stride=2))
        self.layer2 = nn.Sequential(nn.Conv2d(16, 32, kernel_size=5, stride=1, padding=2),
                                    nn.BatchNorm2d(32),
                                    nn.ReLU(),
                                    nn.MaxPool2d(kernel_size=2, stride=2))
        self.fc = nn.Linear(7*7*32, num_classes)
         
    def forward(self, x):
        out = self.layer1(x)
        out = self.layer2(out)
        print(out.size())
        out = out.reshape(out.size(0), -1)
        out = self.fc(out)
        return out
# Test the model
model.eval()  # eval mode (batchnorm uses moving mean/variance instead of mini-batch mean/variance)
with torch.no_grad():
    correct = 0
    total = 0
    for images, labels in test_loader:
        images = images.to(device)
        labels = labels.to(device)
        outputs = model(images)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

如果网络模型model中含有BN层,则在预测时应当将模式切换为评估模式,即model.eval()。

评估模拟下BN层的均值和方差应该是整个训练集的均值和方差,即 moving mean/variance。

训练模式下BN层的均值和方差为mini-batch的均值和方差,因此应当特别注意。

补充:Pytorch 模型训练模式和eval模型下差别巨大(Pytorch train and eval)附解决方案

当pytorch模型写明是eval()时有时表现的结果相对于train(True)差别非常巨大,这种差别经过逐层查看,主要来源于使用了BN,在eval下,使用的BN是一个固定的running rate,而在train下这个running rate会根据输入发生改变。

解决方案是冻住bn

def freeze_bn(m):
    if isinstance(m, nn.BatchNorm2d):
        m.eval()
model.apply(freeze_bn)

这样可以获得稳定输出的结果。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python with statement 进行文件操作指南
Aug 22 Python
Python实现的简单dns查询功能示例
May 24 Python
浅谈python中的数字类型与处理工具
Aug 02 Python
TensorFlow高效读取数据的方法示例
Feb 06 Python
Python实现微信翻译机器人的方法
Aug 13 Python
Python Django实现layui风格+django分页功能的例子
Aug 29 Python
利用Python绘制Jazz网络图的例子
Nov 21 Python
Python迭代器模块itertools使用原理解析
Dec 11 Python
Python特殊属性property原理及使用方法解析
Oct 09 Python
Python Pandas pandas.read_sql_query函数实例用法分析
Jun 21 Python
python unittest单元测试的步骤分析
Aug 02 Python
使用Django框架创建项目
Jun 10 Python
解决Pytorch中关于model.eval的问题
Pytorch 中net.train 和 net.eval的使用说明
May 22 #Python
对PyTorch中inplace字段的全面理解
May 22 #Python
pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
May 22 #Python
用python实现监控视频人数统计
Python基础之进程详解
如何在C++中调用Python
May 21 #Python
You might like
开启CURL扩展,让服务器支持PHP curl函数(远程采集)
2011/03/19 PHP
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
2014/05/15 PHP
支付宝支付开发――当面付条码支付和扫码支付实例
2016/11/04 PHP
使两个iframe的高度与内容自适应,且相等
2006/11/20 Javascript
jQuery的控件及事件(输入控件及回车事件)使用示例
2013/07/25 Javascript
jQuery常用操作方法及常用函数总结
2014/06/19 Javascript
Extjs grid panel自带滚动条失效的解决方法
2014/09/11 Javascript
JQuery中上下文选择器实现方法
2015/05/18 Javascript
javascript实现rgb颜色转换成16进制格式
2015/07/10 Javascript
JavaScript下拉菜单功能实例代码
2017/03/01 Javascript
@ResponseBody 和 @RequestBody 注解的区别
2017/03/08 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
2018/09/15 Javascript
jQuery实现的模仿雨滴下落动画效果
2018/12/11 jQuery
pm2发布node配置文件ecosystem.json详解
2019/05/15 Javascript
ES6 Promise对象概念及用法实例详解
2019/10/15 Javascript
react实现复选框全选和反选组件效果
2020/08/25 Javascript
vue中v-model对select的绑定操作
2020/08/31 Javascript
vue实现日历表格(element-ui)
2020/09/24 Javascript
Python选择排序、冒泡排序、合并排序代码实例
2015/04/10 Python
Python函数中的函数(闭包)用法实例
2016/03/15 Python
python使用itchat实现手机控制电脑
2018/02/22 Python
Python中对数组集进行按行打乱shuffle的方法
2018/11/08 Python
基于python 微信小程序之获取已存在模板消息列表
2019/08/05 Python
python并发爬虫实用工具tomorrow实用解析
2019/09/25 Python
详解Django将秒转换为xx天xx时xx分
2019/09/27 Python
Python数据相关系数矩阵和热力图轻松实现教程
2020/06/16 Python
python 对象真假值的实例(哪些视为False)
2020/12/11 Python
马来西亚和新加坡巴士票在线预订:CatchThatBus
2018/11/17 全球购物
澳大利亚购买最佳炊具品牌网站:Cookware Brands
2019/02/16 全球购物
美国最大的在线生存商店:Survival Frog
2020/12/13 全球购物
金士达面试非笔试
2012/03/14 面试题
UNIX文件系统分类
2014/11/11 面试题
英语系本科生个人求职信
2013/09/21 职场文书
自我鉴定200字
2013/10/28 职场文书
2014领导班子四风剖析对照检查材料思想汇报
2014/09/20 职场文书
副检察长四风问题对照检查材料思想汇报
2014/10/07 职场文书