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 相关文章推荐
浅析AST抽象语法树及Python代码实现
Jun 06 Python
Python使用functools模块中的partial函数生成偏函数
Jul 02 Python
python 判断是否为正小数和正整数的实例
Jul 23 Python
Python中使用多进程来实现并行处理的方法小结
Aug 09 Python
Python 在字符串中加入变量的实例讲解
May 02 Python
Python装饰器的执行过程实例分析
Jun 04 Python
python得到windows自启动列表的方法
Oct 14 Python
python pygame实现方向键控制小球
May 17 Python
Python爬虫学习之翻译小程序
Jul 30 Python
python 控制Asterisk AMI接口外呼电话的例子
Aug 08 Python
Python3离线安装Requests模块问题
Oct 13 Python
Python中zipfile压缩包模块的使用
May 14 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
在apache下限制每个虚拟主机的并发数!!!!
2006/10/09 PHP
使用php+xslt在windows平台上
2006/10/09 PHP
PHP第一季视频教程(李炎恢+php100 不断更新)
2011/05/29 PHP
体育彩票排列三组选三算法分享
2014/03/07 PHP
PHP中遇到BOM、编码导致json_decode函数无法解析问题
2014/07/02 PHP
Laravel如何自定义command命令浅析
2019/03/23 PHP
php 中的信号处理操作实例详解
2020/03/04 PHP
js用图作提交按钮或超连接
2008/03/26 Javascript
Prototype Hash对象 学习
2009/07/19 Javascript
JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具
2010/12/10 Javascript
如何使用JS获取IE上传文件路径(IE7,8)
2013/07/08 Javascript
将list转换为json失败的原因
2013/12/17 Javascript
同域jQuery(跨)iframe操作DOM(实例讲解)
2013/12/19 Javascript
jquery使用jxl插件导出excel示例
2014/04/14 Javascript
node.js+express制作网页计算器
2016/01/17 Javascript
微信小程序  checkbox组件详解及简单实例
2017/01/10 Javascript
js判断手机系统是android还是ios
2017/03/07 Javascript
浅谈JS中的常用选择器及属性、方法的调用
2017/07/28 Javascript
详解Vuejs2.0 如何利用proxyTable实现跨域请求
2017/08/03 Javascript
手把手教你 CKEDITOR 4 实现Dialog 内嵌 IFrame操作详解
2019/06/18 Javascript
基于JS实现数字动态变化显示效果附源码
2019/07/18 Javascript
vue监听用户输入和点击功能
2019/09/27 Javascript
python模拟登录百度贴吧(百度贴吧登录)实例
2013/12/18 Python
Python随机函数random()使用方法小结
2018/04/29 Python
Spark处理数据排序问题如何避免OOM
2020/05/21 Python
pycharm 2020 1.1的安装流程
2020/09/29 Python
animation和transition的区别
2020/10/12 HTML / CSS
html5配合css3实现带提示文字的输入框(摆脱js)
2013/03/08 HTML / CSS
让ie浏览器成为支持html5的浏览器的解决方法(使用html5shiv)
2014/04/08 HTML / CSS
AmazeUi Tree(树形结构) 应用小结
2020/08/17 HTML / CSS
美国马匹用品和马钉购物网站:State Line Tack
2018/08/05 全球购物
英国的一家创新礼品和小工具零售商:Menkind
2019/08/24 全球购物
全球工业:Global Industrial
2020/02/01 全球购物
大学毕业感言一句话
2014/02/06 职场文书
小学生感恩老师演讲稿
2014/08/28 职场文书
民事答辩状格式范文
2015/05/21 职场文书