位置: 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 转载请保留说明!

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

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

  • iqoo怎么关闭开发者模式(iqoo怎么关闭开机声音)

    iqoo怎么关闭开发者模式(iqoo怎么关闭开机声音)

  • 微信星标朋友有什么用吗(微信星标朋友有什么不同)

    微信星标朋友有什么用吗(微信星标朋友有什么不同)

  • 桌面旋转了怎么恢复(桌面旋转了怎么恢复快捷键)

    桌面旋转了怎么恢复(桌面旋转了怎么恢复快捷键)

  • 电脑求积怎么操作(电脑求积怎么操作图解)

    电脑求积怎么操作(电脑求积怎么操作图解)

  • wln键盘是什么意思(wlwhee是什么键盘)

    wln键盘是什么意思(wlwhee是什么键盘)

  • 华为哪些型号有红外遥控功能(华为哪些型号有红外线)

    华为哪些型号有红外遥控功能(华为哪些型号有红外线)

  • 淘宝淘气值怎么提升1000(淘宝淘气值怎么看)

    淘宝淘气值怎么提升1000(淘宝淘气值怎么看)

  • word2010中图形的分布分为哪几种(在word2010中使用图形图片,说法错误的是)

    word2010中图形的分布分为哪几种(在word2010中使用图形图片,说法错误的是)

  • 如何注册微信企业邮箱号(如何注册微信企业邮箱)

    如何注册微信企业邮箱号(如何注册微信企业邮箱)

  • 电脑图标一直闪动是什么原因(电脑图标一直闪屏像刷新一样)

    电脑图标一直闪动是什么原因(电脑图标一直闪屏像刷新一样)

  • vivo快应用在哪(vivo快应用在哪个文件夹)

    vivo快应用在哪(vivo快应用在哪个文件夹)

  • 手机无声音是什么原因,插耳机就有(手机无声音咋办)

    手机无声音是什么原因,插耳机就有(手机无声音咋办)

  • 怎么关闭微信二维码收款(怎么关闭微信二维码添加好友功能)

    怎么关闭微信二维码收款(怎么关闭微信二维码添加好友功能)

  • vivoy93s支持无线充电吗(vivoy93s支持5gwifi)

    vivoy93s支持无线充电吗(vivoy93s支持5gwifi)

  • 苹果11gps怎么打开(iphone11怎么打开gps)

    苹果11gps怎么打开(iphone11怎么打开gps)

  • 苹果xr出厂系统是多少(苹果xr的出厂系统)

    苹果xr出厂系统是多少(苹果xr的出厂系统)

  • 华为荣耀9x有没有分屏功能(华为荣耀9x有没有红外线遥控功能)

    华为荣耀9x有没有分屏功能(华为荣耀9x有没有红外线遥控功能)

  • 华为荣耀畅想10plus什么时候上市(华为荣耀畅想10e配置)

    华为荣耀畅想10plus什么时候上市(华为荣耀畅想10e配置)

  • iphone11有128g吗(iphone11有128g内存吗)

    iphone11有128g吗(iphone11有128g内存吗)

  • 文件全选是ctrl加什么(文件全选的快捷方式)

    文件全选是ctrl加什么(文件全选的快捷方式)

  • excel2010打开灰白(excel2007打开灰白)

    excel2010打开灰白(excel2007打开灰白)

  • 在win7系统中为什么IE浏览器打开新页面显示空白?(在windows7提供了一种什么技术)

    在win7系统中为什么IE浏览器打开新页面显示空白?(在windows7提供了一种什么技术)

  • 华为手机隐藏应用教程(华为手机隐藏应用)

    华为手机隐藏应用教程(华为手机隐藏应用)

  • Linux系统Centos没有网卡eth0配置文件的解决方法(centos只有lo)

    Linux系统Centos没有网卡eth0配置文件的解决方法(centos只有lo)

  • Apache.exe是什么文件的进程 Apache进程信息查询(apache是什么文件)

    Apache.exe是什么文件的进程 Apache进程信息查询(apache是什么文件)

  • elinks命令  网络应用(elinks --dump)

    elinks命令 网络应用(elinks --dump)

  • 会计新手如何学会收款流程
  • 增值税纳税申报时间
  • 车船税缴纳的相关知识?
  • 房地产企业递延所得税资产计算方法
  • 应交城建税计入哪个科目
  • 董事会职权是否为强制规定
  • 坏账准备怎么做T型账户
  • 背书承兑分录
  • 发票货物名称前带星号规定
  • 本年利润需要毎月转入未分配利润吗
  • 公司会计日常工作内容
  • 存货的期末余额在借方还是贷方
  • 美团收取的佣金怎么开票
  • 小规模纳税人现金折扣算增值税吗
  • 所得税流程
  • 关联企业利息
  • 汇票贴现的账务处理
  • 存货盘亏进项税额转出会计分录
  • 免征增值税和营业税政策
  • 提前退休取得的一次性补贴收入
  • 增值税抵扣进项税额交税账务处理
  • 旅行社开具会议费发票可以差额征税吗
  • 年薪制离职补偿金
  • 免税企业土地税怎么交
  • 员工一次性赔偿怎么算
  • 学校有税号可以收专票吗
  • 赠送样品需要交税吗
  • 销售返利如何做分录
  • 库存成本与实际成本不符
  • 购进一批材料,材料已经入库
  • 技术服务费属于什么大类
  • 如何自定义桌面图标排列
  • 公司纳税高说明什么
  • 固定资产的财务处理方法
  • win10版本激活码
  • 公司成立之初
  • win11资源管理器卡死
  • 生产车间报销费用
  • 公司装修款怎么做分录
  • 企业受赠业务的法律规定
  • PHP:pg_get_result()的用法_PostgreSQL函数
  • 长期股权投资期末按什么计量
  • 企业开办期间的税费
  • 间接人工费用预算工时分配率将提高10%
  • 收外汇怎么做账报税
  • 用php编写从大到小排序
  • laravel orm使用
  • pytorch技巧
  • 长期待摊费用装修费摊销年限
  • 应付账款转入营业外收入的证明
  • 销售自己使用过的物品
  • 发票上的金额是含税还是不含税
  • 固定资产清理包括什么会计科目
  • 联营扣点怎么做账
  • 医院购买医疗器械
  • 关于小规模纳税人的说法正确的是
  • 物业公司支出费用
  • 税控盘没有反写会罚款吗
  • mysql jdbc
  • 注册表修改后如何生效
  • mac系统怎么新建txt
  • 包含正在使用的windows版本 无法格式化
  • mac系统怎么给文件夹设置密码
  • centos control-d
  • csinsm32.exe是安全的进程吗 csinsm32进程有哪些用处
  • win7连接xp共享
  • windows注册账号
  • centos7安装软件包命令
  • xp怎么删除电脑系统
  • leerfel是什么牌子
  • 蓝屏错误疑难解答win7
  • Android性能优化 武汉招聘
  • android获取音频信息
  • android中的短信联系人管理,浏览器属于
  • lint 工具
  • linux jhat
  • 浙江通用电子发票查不到
  • 非房地产企业土增税扣除有哪些
  • 江西省医保卡缴费
  • 一般纳税人的进项票必须当月认证吗?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设