位置: IT常识 - 正文

关于Pytorch中的train()和eval()(以及no_grad())(pytorch train())

编辑:rootadmin
关于Pytorch中的train()和eval()(以及no_grad()) 1、三剑客:train()、eval()、no_grad()1.1 train()1.2 eval()1.3 no_grad()2、简单分析下2.1 为什么要使用train()和eval()2.2 为什么可以把训练集的统计量用作测试集?3、我的坑

推荐整理分享关于Pytorch中的train()和eval()(以及no_grad())(pytorch train()),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:pytorch trace,pytorch tqdm,pytorch trace,pytorch jit trace,pytorch trace,pytorch tqdm,pytorch tqdm,pytorch trace,内容如对您有帮助,希望把文章链接给更多的朋友!

起源是我训练好了一个模型,新建一个推理脚本加载好checkpoint和预处理输入后推理,发现无论输入是哪一类甚至是随机数,其输出概率总是第一类的值最大,且总是在0.5附近,排查许久,发现是没有加上model.eval()函数。

因为我使用了model.no_grad(),下意识认为不需要加model.eval(),导致发生了本次事故

1、三剑客:train()、eval()、no_grad()

这三个函数实际上很常见,先来简单看下使用方法

1.1 train()

train()是nn.Module的方法,也就是你定义了一个网络model,那么mdoel.train()表示将该model设置为训练模式,一般在开始新epoch训练时,我们会首先执行该命令:

...model.train()# 将模型设置为训练模式for i, data in enumerate(train_loader): # 开始新epoch的训练images, labels = data images, labels = images.to(device), labels.to(device)...

1.2 eval()

同train()一样,其用法和含义也一样,eval()是nn.Module的方法,也就是你定义了一个网络model,那么mdoel.eval()表示将该model设置为验证模式,一般在开始验证当前model效果时,我们会首先执行该命令:

...model.eval()# 将模型设置为验证模式for i, data in enumerate(eval_loader): # 在验证集上验证images, labels = data images, labels = images.to(device), labels.to(device)...

1.3 no_grad()

no_grad()是torch库的方法,和上下文管理器with来搭配使用。 其作用是禁用梯度计算,当你确定不会调用tensor.backward()时。它将减少计算的内存消耗,否则这些计算将requires_grad=True。 如果设定了no_grad(),即使输入张量属性requires_grad为True,也不会计算梯度

一般我们进行模型验证或者模型推理时,就不需要梯度以及反向传播,所以我们可以在torch.no_grad()上下文管理器中执行我们的验证或推理任务,可以显著降低显存的使用。

with torch.no_grad():output=model(input_tensor)# 模型推理print(output) # model推理才涉及梯度等,print都不涉及了,所以在不在with之中已经无所谓了2、简单分析下2.1 为什么要使用train()和eval()

我们知道nn.Module中的BN层可以加速收敛,但是该层需要计算输入BatchTensor的均值和方差,毕竟一个BatchSize为64、128甚至更大,计算他们的均值和方差也简单。

关于Pytorch中的train()和eval()(以及no_grad())(pytorch train())

但问题是,当我们推理时,去对一张图像进行推理时,计算到BN层也需要该批次的均值和方差。但是现在就一个tensor,计算其均值和方差是没有意义的(一个样本的均值和方差统计量说明不了什么)。

实际上在推理时BN所需要的均值和方差是训练时的值(可以理解为训练时把训练样本的均值和方差记录下来了)。

问题来了,模型怎么知道我现在是训练状态还是推理状态?

当model.train()时,模型处于训练状态,模型会计算Batch的均值和方差

当model.eval()时,模型处于验证状态,模型会使用训练集的均值和方差作为验证数据的均值和方差

同样的还有Dropout层,Dropout层在训练时会随机失活某些神经元,提高模型泛化能力,但是在验证推理时,Dropout层不需要再失活了,也就是所有的神经元都要“干活”了。

总之train()和eval()最主要就是影响了BN层和Dropout层

2.2 为什么可以把训练集的统计量用作测试集?

为什么可以把训练集的统计量用作测试集,因为无论是训练集、验证集还是测试机,甚至是没有收集到的同类图像,他们都是独立同分布的。

换句话说,世界上所有的猫的图片组成一个集合,那么这个集合就存在一个分布,这个分布就像高斯分布、泊松分布等,只不过这个猫的集合分布可能更加复杂,暂叫它猫分布吧。

这个猫分布中每一个样本都肯定是服从这个猫分布的,但同时这些样本互不相关联,我们把其中一部分拿来做训练集,再拿一小部分做测试集。

我们设计了一个模型在训练集上训练,因为训练集也服从猫分布,所以模型在训练集上“锻炼”出来的能力,就是从小块训练集去拟合整个猫分布。

即从少量猫图上去推理所有猫图,从而具有泛化能力,去推理没有见过的但同类的图像也有非常好的效果。但是这也容易造成管中窥豹,只看到事物的一部分,见不全面,所以模型又无法识别出所有的猫图。

3、我的坑

我下意识以为使用了no_grad()就不需要再设置了eval(),导致训练效果很好,自己以测试,其输出的概率毫无逻辑。

eval()是影响BN层和Dropout层 而no_grad()是不计算梯度 两个是风马牛不相及,当然搭配使用效果即好还剩内存!

本文链接地址:https://www.jiuchutong.com/zhishi/295386.html 转载请保留说明!

上一篇:面试官问出这几道算法题,你能扛住么?(面试官问几个问题)

下一篇:微信小程序【获取用户昵称头像和昵称(附源码)】(微信小程序获取位置信息的权限在哪里修改位置)

  • ipadpro2021电池容量(2020款ipad pro电池容量)

    ipadpro2021电池容量(2020款ipad pro电池容量)

  • 新浪微博移动端怎么设置隐身状态(新浪微博移动端下载)

    新浪微博移动端怎么设置隐身状态(新浪微博移动端下载)

  • 什么是n28(什么是N2受体)

    什么是n28(什么是N2受体)

  • 美团我的钱包在哪找(美团我的钱包在哪里找不到)

    美团我的钱包在哪找(美团我的钱包在哪里找不到)

  • 华为的云空间和云盘是一回事吗(华为的云空间和真我的云空间能直接)

    华为的云空间和云盘是一回事吗(华为的云空间和真我的云空间能直接)

  • pe读条后黑屏(pe读条后重启)

    pe读条后黑屏(pe读条后重启)

  • 用乘车码为什么没有能量(乘车码为什么不能使用)

    用乘车码为什么没有能量(乘车码为什么不能使用)

  • 微信群移除成员其他人知道吗(微信群移除成员怎么弄)

    微信群移除成员其他人知道吗(微信群移除成员怎么弄)

  • 荣耀30pro+防水级别(荣耀30pro防水等级多少)

    荣耀30pro+防水级别(荣耀30pro防水等级多少)

  • 电脑图标有个白色框(电脑图标有个白框阴影)

    电脑图标有个白色框(电脑图标有个白框阴影)

  • 华为p30手机声音突然变小是怎么回事(华为p30手机声音太小了怎么增大声音)

    华为p30手机声音突然变小是怎么回事(华为p30手机声音太小了怎么增大声音)

  • 全千兆路由器什么意思(千兆路由器什么意思)

    全千兆路由器什么意思(千兆路由器什么意思)

  • 为什么iphone11屏幕偏黄(为什么iphone11屏幕会突然变暗)

    为什么iphone11屏幕偏黄(为什么iphone11屏幕会突然变暗)

  • ios13暗黑模式怎么调(iphone暗黑模式)

    ios13暗黑模式怎么调(iphone暗黑模式)

  • 个人热点用的是流量吗(个人热点用的是哪张卡的流量)

    个人热点用的是流量吗(个人热点用的是哪张卡的流量)

  • ipad2能用办公软件吗(ipad能办公用office吗)

    ipad2能用办公软件吗(ipad能办公用office吗)

  • 手机老掉线怎么回事(手机老掉线是什么原因?)

    手机老掉线怎么回事(手机老掉线是什么原因?)

  • 手机声卡能插电脑吗(手机声卡插电脑没混响)

    手机声卡能插电脑吗(手机声卡插电脑没混响)

  • 苹果11有没有来电闪光灯(苹果11有没有来电显示)

    苹果11有没有来电闪光灯(苹果11有没有来电显示)

  • 书旗网会自动续费吗(书旗小说自动扣费怎么关闭)

    书旗网会自动续费吗(书旗小说自动扣费怎么关闭)

  • 手机如何弄电子版照片(手机如何弄电子稿)

    手机如何弄电子版照片(手机如何弄电子稿)

  • ios录音误剪怎么恢复(ios录音误剪怎么取消)

    ios录音误剪怎么恢复(ios录音误剪怎么取消)

  • 不想接电话怎么设置成关机(不想接电话怎么设置电话已关机)

    不想接电话怎么设置成关机(不想接电话怎么设置电话已关机)

  • 整个表格怎么居中(整个表格怎么居中html)

    整个表格怎么居中(整个表格怎么居中html)

  • 手机设置防火墙在哪里(手机设置防火墙对手机有影响吗)

    手机设置防火墙在哪里(手机设置防火墙对手机有影响吗)

  • ipad上拉菜单没了怎么弄回来(ipad上拉菜单没了)

    ipad上拉菜单没了怎么弄回来(ipad上拉菜单没了)

  • p30屏幕指纹解锁(刚买的华为p30,指纹解锁失灵了,怎么回事?)

    p30屏幕指纹解锁(刚买的华为p30,指纹解锁失灵了,怎么回事?)

  • Win10系统中,电脑经常自动掉线或断网怎么办?(window10的点在哪里)

    Win10系统中,电脑经常自动掉线或断网怎么办?(window10的点在哪里)

  • c语言中如何防止数组下标越界(c语言中如何防止函数重名)

    c语言中如何防止数组下标越界(c语言中如何防止函数重名)

  • 小规模纳税人要做账吗
  • 账账核对的基本内容
  • 处置固定资产亏了怎么做账
  • 有两处收入的怎么报个税汇算清缴
  • 开票资料都包括什么内容
  • 软件开发过程的一般步骤
  • 股权变更怎么缴税
  • 政府补贴项目申报流程
  • 行政事业单位结算起点
  • 个人与个人之间转账有限额吗
  • 合伙人退伙怎么处理
  • 小额贷款公司借钱容易吗
  • 计提法定盈余公积转入利润分配
  • 税务机关未采集开票信息是什么意思
  • 季度申报财务报表如何更改
  • 出口退税限额如何理解
  • 机关党建经费提取比例
  • 外购无形资产如何摊销
  • 民办非企业单位和私营单位的区别
  • php使用memcache
  • 进项税额转出怎么做账务处理
  • Win11 Build 22000.348更新补丁KB5007262预览版发布(附更新修复内容汇总)
  • win10蓝牙无法连接可以尝试以下操作
  • php模拟get请求
  • 安徽4岁男孩户口已解决
  • 应交税费会计分录例题
  • 浏览器windows下载
  • php 中奖概率算法
  • overflow常见释义
  • gfortran编译命令
  • 出口退税管理类别四类
  • 进口货物没有发票怎么入账,报税时怎么填
  • 详细步骤怎么写
  • 酒店会计做账流程及内容
  • 企业接受捐赠怎么入账
  • 公司转让注册海外公司
  • 核销发生的坏账损失
  • mysql in()
  • 进程 python
  • 织梦使用教程
  • 金融债券利息收入免企业所得税吗
  • 揭秘蟹卡骗局
  • sql server 2008登录服务器名称
  • 上级拨付的债券怎么做账
  • 小企业会计准则适用范围
  • 赠送给客户的礼品税法
  • 应纳税所得额是利润总额还是净利润
  • 小微企业所得税优惠政策最新2023
  • 政府会计计提折旧方法
  • 开发票,对方收取税点,如何计算?
  • 股东变更实收资本变更吗
  • 运费少给怎么办
  • 开具增值税专用发票含税吗
  • 贸易公司如何核名
  • 建设工程中设备计入包干价是否合法
  • 加权净资产收益率越高越好吗
  • 银行对账单上借贷方什么意思
  • 短期借款利息是多少
  • 购买土地会计分录及摊销分录
  • 无法安装mysql数据库
  • MySQL5.6.31 winx64.zip 安装配置教程详解
  • wincomp.exe - wincomp进程是什么意思
  • win10无法
  • win10系统如何关闭
  • python 读中文文件
  • 爬虫 python
  • 安卓手机画画触屏笔推荐
  • eclipse创建android项目
  • 禁用javascript后果
  • unity怎么删除导入的包
  • 网页中实现浏览的快捷键
  • Android系统启动负载均衡
  • Android alertDialog 动态添加edittext无法弹出键盘解决方案
  • 税务局上班吗今天
  • 河北税务总局发票怎么开
  • 税务局的章
  • 税务举报被泄漏怎么办
  • 公司可以报停吗
  • 新疆维吾尔自治区民族团结进步工作条例
  • 安徽省历任书记
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设