Pytorch 中net.train() 和 net.eval()的作用和如何使用?

2023-05-16

#一般在训练模型的代码段加入:

model.train()
#在测试模型时候加入:

model.eval()

同时发现,如果不写这两个程序也可以运行,这是因为这两个方法是针对在网络训练和测试时采用不同方式的情况,比如Batch Normalization 和 Dropout。

训练时是正对每个min-batch的,但是在测试中往往是针对单张图片,即不存在min-batch的概念。

由于网络训练完毕后参数都是固定的,因此每个批次的均值和方差都是不变的,因此直接结算所有batch的均值和方差。

所有Batch Normalization的训练和测试时的操作不同

在训练中,每个隐层的神经元先乘概率P,然后在进行激活,在测试中,所有的神经元先进行激活,然后每个隐层神经元的输出乘P。

补充:Pytorch踩坑记录——model.eval()

最近在写代码时遇到一个问题,原本训练好的模型,加载进来进行inference准确率直接掉了5个点,尼玛,这简直不能忍啊~本菜鸡下意识地感知到我肯定又在哪里写了bug了~~~于是开始到处排查,从model load到data load,最终在一个被我封装好的module的犄角旮旯里找到了问题,于是顺便就在这里总结一下,避免以后再犯。

a) model.eval(),不启用 BatchNormalization 和 Dropout。此时pytorch会自动把BN和DropOut固定住,不会取平均,而是用训练好的值。不然的话,一旦test的batch_size过小,很容易就会因BN层导致模型performance损失较大;

b) model.train() :启用 BatchNormalization 和 Dropout。 在模型测试阶段使用model.train() 让model变成训练模式,此时 dropout和batch normalization的操作在训练q起到防止网络过拟合的问题。

因此,在使用PyTorch进行训练和测试时一定要记得把实例化的model指定train/eval。

model.eval() 负责改变batchnorm、dropout的工作方式,如在eval()模式下,dropout是不工作的。 见下方代码:

  import torch
  import torch.nn as nn
 
  drop = nn.Dropout()
  x = torch.ones(10)
  
  # Train mode   
  drop.train()
  print(drop(x)) # tensor([2., 2., 0., 2., 2., 2., 2., 0., 0., 2.])   
  
  # Eval mode   
  drop.eval()
  print(drop(x)) # tensor([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])

torch.no_grad() 负责关掉梯度计算,节省eval的时间。

只进行inference时,model.eval()是必须使用的,否则会影响结果准确性。 而torch.no_grad()并不是强制的,只影响运行效率。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pytorch 中net.train() 和 net.eval()的作用和如何使用? 的相关文章

  • 使用 PyTorch 分布式 NCCL 连接失败

    我正在尝试使用 torch distributed 将 PyTorch 张量从一台机器发送到另一台机器 dist init process group 函数正常工作 但是 dist broadcast 函数中出现连接失败 这是我在节点 0
  • .NET 字符串.替换

    我很生气 通常 我喜欢像 C 中那样进行替换 但是是否有一种 C 风格的替换 它一次仅替换一个字母或我指定的 X 数量 不 BCL 中不存在仅替换字符的单个实例的 Replace 方法 两个主要的 Replace 方法将替换所有出现的情况
  • 如何对私有方法进行单元测试?

    我正在构建一个类库 它将有一些公共和私有方法 我希望能够对私有方法进行单元测试 主要是在开发时 但它也可能对未来的重构有用 这样做的正确方法是什么 如果您想对私有方法进行单元测试 则可能会出现问题 单元测试 一般来说 旨在测试类的接口 即其
  • 在 C# 中在 Windows 标题栏区域中创建选项卡

    有人可以告诉我如何在 C Winforms 应用程序的标题栏区域中创建选项卡吗 我正在寻找类似于 Google Chrome 的外观 Chrome 中的每个选项卡都停靠在主应用程序窗口的标题栏中 尝试将表单的 FormBorderStyle
  • 是否可以从 C++ 应用程序调用 C# 应用程序?

    我是一名编程学生 现在我已经上了两门 C 课程 这个学期我将参加我的第一门 C 课程 出于好奇 是否可以从 C 应用程序调用 C 应用程序 如果是的话 是否还可以检查运行该程序的计算机是否具有 NET框架 我只是很好奇 我想如果可能的话 这
  • 将日期时间转换为指定格式

    我有这个日期格式yy MM dd HH mm ss ex 12 02 21 10 56 09 问题是 当我尝试使用以下代码将其转换为不同格式时 CDate 12 02 21 10 56 09 ToString MMM dd yyyy HH
  • 如何使用 Roslyn 通过扩展方法、静态类中的方法以及带有 ref/out 参数的方法来访问调用

    我正在致力于创建一个开源项目 用于创建 NET UML 序列图 该项目利用名为 js sequence diagrams 的 javascript 库 我不确定 Roslyn 是适合这项工作的工具 但我想我应该尝试一下 所以我整理了一些概念
  • C# 中的 C/C++ 代码编译器

    在 C 中 我可以使用下面的代码编译 VB 和 C 代码 但无法编译 C C 代码 有什么办法可以做到这一点吗 C 编译器 public void Compile string ToCompile string Result null st
  • .NET 中非常奇怪的 SSL 错误:仅针对特定 URL 无法解密指定数据

    我正在使用 NET 从 URL 下载数据 对于大多数 URL 它都没有问题 但对于一个特定的 URL 当我尝试建立连接时 我收到一个非常奇怪的错误 此外 该错误仅在第二次 及后续 尝试发出请求时发生 第一次似乎总是有效 这是一些演示该问题的
  • .NET 紧凑框架中的信号量

    不幸的是 使用 NET Compact Framework 时 System Threading 中没有信号量 我不确定为什么会这样 有人有想法吗 经过谷歌搜索后 我发现很多人给出了他们自己的实现 但他们中没有一个真正工作得很好 或者根本没
  • 文件是通过 Visual Studio 下载的,但不是通过 .exe 下载的

    当我尝试下载 a 时出现以下错误 pdf通过我的网址从文件 exe file 服务器违反了协议 部分 响应头 详细信息 CR 后必须跟 LF 但当我尝试从 Visual Studio 调试代码时 也会下载同样的内容 我完全迷失了 不知道发生
  • 未将对象引用设置为对象的实例 - 如何在异常中查找有问题的对象名称?

    这是我编程存在的祸根 部署应用程序后 当出现此错误时 没有多少调试转储可以告诉您哪些对象未实例化 我有调用堆栈 这很棒 它大致告诉我对象在哪里 但是有没有办法让 NET 告诉我对象的实际名称 如果你在调试时发现它们 程序当然会在有问题的生物
  • Thread.sleep vs Monitor.Wait vs RegisteredWaitHandle?

    以下项目有不同的目标 但我很有趣知道它们如何 暂停 问题 Thread sleep 它会影响系统性能吗 它是否会占用线程的等待时间 关于什么Monitor Wait 他们 等待 的方式有何不同 他们的等待会占用一个线程吗 关于什么Regis
  • 性能:XmlSerializer、XmlReader、XmlDocument、XDocument

    我正在开发一个小型 Web 项目 并且想要读取 写入 XML 文件 性能是我的首要任务 我已经来到这篇很棒的文章 http www nearinfinity com blogs joe ferner performance linq to
  • .NET 中应用程序域的常见用途和最佳实践?

    关于何时在应用程序中创建新的应用程序域 有哪些准则和最佳实践 另外 有哪些常见用途以及如何在应用程序中使用多个应用程序域的示例 我见过的最常见的场景是能够通过与主程序不同的安全模型提供可扩展性 在单独的 AppDomain 中加载插件可以实
  • 如何从当前 .NET 表单/应用程序发送密钥 F12

    我非常确定以下按钮激活的表单代码应该在我的 C 应用程序中引发 Control F12 SendKeys F12 但它似乎并没有继续进入 Windows shell 并激活另一个正在侦听它的程序 我的键盘可以用 看起来发送键在某处被拦截 并
  • .net 运行时 - Silverlight 运行时 =?

    我用 google 搜索了一下 但没能找到 net CLR 中的哪些类未包含在 CoreCLR 又名 Silverlight 中的详细列表 Windows net Framework 中缺少什么 Silverlight 另外 是否存在 Si
  • .NET 可移植类库中的 .ToShortDateString 发生了什么

    我想知道为什么没有 ToShortDateString在 NET 可移植类库中 我有 2 个项目 Silverlight 和常规 NET 类库 使用相同的代码 并且代码涉及调用 ToShortDateString on a DateTime
  • 我的 C# .NET 团队是否应该迁移到 Windows Presentation Foundation? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 当格式字符串包含“{”时,String.Format 异常

    我正在使用 VSTS 2008 C Net 2 0 执行以下语句时 String Format 语句抛出 FormatException 有什么想法是错误的吗 这是获取我正在使用的 template html 的位置 我想在 templat

随机推荐

  • Java输入数判断是否为回文数

    最近看黑马的Java 顺带做了些课后练习 xff0c 感觉代码还是得自己多打打 xff0c 记录比较简陋 import java util Scanner public class HuiWeng public static void ma
  • copilot申请使用流程(自用)

    整体流程 1 申请github学生包 申请网址 xff1a https education github com 2 copilot学生申请 申请网址 xff1a https copilot github com 3 IDE下载插件配置 下
  • 在VMware Workstation以及云服务器上安装华为FusionCompute

    文章目录 前言使用镜像安装CNAVMware Workstation配置虚拟机步骤一步骤二步骤三步骤四步骤五步骤六步骤七步骤八步骤九步骤十步骤十一步骤十二步骤十二 云服务器远程登录CNA安装步骤一 xff1a 开始安装步骤二 xff1a 配
  • 华为FusionCompute:虚拟机创建与配置

    文章目录 前言创建裸虚拟机删除虚拟机导入虚拟机虚拟机规格调整CPU热添加内存热添加磁盘扩容添加网卡查看 虚拟机配置对象权限 前言 如何在CNA中创建虚拟机 xff0c 创建虚拟机的方法有多种 创建的好的虚拟机我们可以进行虚拟机规格的调整 x
  • Postman接口之token获取及数据关联和断言

    1 环境变量的创建及使用 2 变量名设置 xff0c 点击上一步的环境变量 xff0c 弹出下面的页面 xff1a 3 设置完后记得选择对应的环境变量 4 查看接口运行后参数是否存入到环境变量中 xff1a 好了基础设置如上 xff0c 下
  • OSPF(六)OSPF特殊区域之Stub和Totally Stub区域详解及配置

    文章目录 前言Stub区域和Totally Stub区域传输区域和末端网络Stub Area配置命令 Totally Stub Area配置 整体实验配置过程及命令步骤一 xff1a 搭建拓扑步骤二 xff1a 配置路由器接口IP地址步骤三
  • OSPF(二)DR与BDR选举

    文章目录 MA网络中的问题DR amp DBRDR与BDR的选举 MA网络中的问题 在运行OSPF的MA网络包括广播型网络和NBMA网络 xff0c 都会存在两个问题 在一个有n个路由器的网络 xff0c 会形成 n n 1 2个邻接关系
  • 防火墙详解(三)华为防火墙基础安全策略配置(命令行配置)

    实验要求 根据实验要求配置防火墙 xff1a 合理部署防火墙安全策略以及安全区域实现内网用户可以访问外网用户 xff0c 反之不能访问内网用户和外网用户均可以访问公司服务器 实验配置 步骤一 xff1a 配置各个终端 防火墙端口IP地址 终
  • 常见信息安全威胁与经典案例

    文章目录 信息安全威胁现状网络战争的开端 xff1a 震网 病毒信息安全攻击事件的演变安全威胁分类 网络安全威胁案例美国Dyn DNS服务遭受DDoS攻击Mirai病毒发动攻击过程 xff08 DDos攻击过程 xff09 扫描获取控制权限
  • 华为FusionCompute详解(一)FusionSphere虚拟化套件介绍

    文章目录 虚拟化FusionSphere虚拟化套件特点管理简单性能至优 FusionSphere虚拟化套件组成FusionSphere服务器虚拟化架构FusionSphere架构特点与用途FusionSphere应用场景单虚拟化场景多虚拟化
  • 华为FusionCompute详解(二)FusionCompute总体介绍以及规划部署

    文章目录 FusionCompute产品定位FusionCompute产品架构FusionCompute软件逻辑组成 FusionCompute产品功能虚拟化计算虚拟化存储虚拟化网络 FusionCompute带来的价值FusionComp
  • Docker基础篇(1)

    文章目录 Docker简介是什么概念容器VS虚拟机能干什么技术职级变化一次构建 xff08 镜像 xff09 xff0c 到处运行 xff1a 去哪下 Docker简介 是什么 为什么会有Docker出现 xff1a 解决重复的环境部署开销
  • openStack:学习openStack的前提知识(1)虚拟化以及KVM简介

    文章目录 KVM简介KVM核心组件Libvirt组件 KVM简介 KVM 目前X86平台上最热门 xff0c 运用最多的虚拟化解决方案 xff0c openStack对KVM支持也是最好的 所以后续使用KVM作为Hypervisor xff
  • 解决WSL2/ubuntu安装软件报错 E: Invalid operation insatll 问题

    文章目录 解决WSL2安装软件报错E Invalid operation insatll 问题方法一方法二 解决WSL2安装软件报错E Invalid operation insatll 问题 此问题为系统定位不到软件包 xff0c 无法安
  • github-copilot的使用步骤

    1 首先登录你的github账号 xff0c 点击头像 xff0c 点击设置 2 在设置界面点击Copilot 并点击try Colilot 3 点击绿色按钮继续 4 设置为允许 xff0c 并取消允许使用你的代码来改进这一选项 xff0c
  • Arduino IDE配置esp8266开发环境

    目录 前言arduino IDE安装配置ESP8266开发环境通过开发板管理器安装手动安装开发版管理器备用的网址 参考 前言 之前本科那会疫情在家用esp8266 ESP 01s Relay模块做了一个远程浇花的设备 xff0c 当时使用a
  • 三、Ubuntu 18.04系统调试(命令/换源)

    目录 一 常用命令 二 Ubuntu 18 04换源 2 1便捷方法 2 2命令行方法 xff08 较为复杂 xff0c 但可查看防止后期有些错误是因为源导致的源文件 xff09 一 常用命令 目录操作 pwd 查看当前目录 cd 返回上一
  • 使用VScode远程操作虚拟机(ubuntu)

    1 VSCode安装 2 打开Ubuntu 使用ifconfig 获取系统接口 3 打开remote ssh 4 配置好相关属性 5 开启远程连接输入密码即可连接
  • 学习率(Learing Rate)的作用以及如何调整

    1 什么是学习率 学习率 Learning rate 作为监督学习以及深度学习中重要的超参 xff0c 其决定着目标函数能否收敛到局部最小值以及何时收敛到最小值 合适的学习率能够使目标函数在合适的时间内收敛到局部最小值 这里以梯度下降为例
  • Pytorch 中net.train() 和 net.eval()的作用和如何使用?

    一般在训练模型的代码段加入 xff1a model train 在测试模型时候加入 xff1a model eval 同时发现 xff0c 如果不写这两个程序也可以运行 xff0c 这是因为这两个方法是针对在网络训练和测试时采用不同方式的情