深入理解model.eval()与torch.no_grad()

model.eval()
  • 使用model.eval()切换到测试模式,不会更新模型的w(权重),b(偏置)参数
  • 通知dropout层和batchnorm层在train和val中间进行切换:
    • train模式,dropout层会按照设定的参数p设置保留激活单元的概率(保留概率=p,比如keep_prob=0.8),batchnorm层会继续计算数据的mean和var并进行更新
    • val模式下,dropout层会让所有的激活单元都通过,而batchnorm层会停止计算和更新mean和var,直接使用在训练阶段已经学出的mean和var值
  • model.eval()不会影响各层的gradient计算行为,即gradient计算和存储与training模式一样,只是不进行反向传播(backprobagation)
torch.no_grad()
  • 用于停止autograd模块的工作,起到加速和节省显存的作用(具体行为就是停止gradient计算,从而节省了GPU算力和显存)
  • 不会影响dropout和batchnorm层的行为

model.eval()torch.no_grad()可以同时用,更加节省GPU的算力

  • 在val模式下,为什么让dropout层所有的激活单元都通过,因为train阶段的dropout层已经屏蔽掉了一些激活单元,在val模式下,让所有的激活单元都通过还能预测数据吗?
    • 在val模式下,让所有的激活单元都通过当然能预测数据了,相当于学习时限定你每次只能选择一份资料学,考试时开卷所有资料你都带着。val模式下,虽然让所有的激活单元都通过,但是对于各个神经元的输出, 要乘上训练时的删除比例后再输出。

相关推荐

  1. 深入理解服务器进程管理优化

    2024-07-10 21:20:09       45 阅读
  2. npm install:深入理解应用

    2024-07-10 21:20:09       38 阅读
  3. 正则表达式:深入理解应用

    2024-07-10 21:20:09       22 阅读
  4. 深入理解 LVS:配置应用详解

    2024-07-10 21:20:09       28 阅读
  5. 深入理解实战CSS变量

    2024-07-10 21:20:09       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 21:20:09       5 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 21:20:09       5 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 21:20:09       4 阅读
  4. Python语言-面向对象

    2024-07-10 21:20:09       7 阅读

热门阅读

  1. gusture

    2024-07-10 21:20:09       8 阅读
  2. python的抽象基类

    2024-07-10 21:20:09       10 阅读
  3. 软设之桥接模式

    2024-07-10 21:20:09       12 阅读
  4. 洛谷 B4006 [GESP202406 四级] 宝箱

    2024-07-10 21:20:09       11 阅读
  5. Qt常用基础控件总结—菜单控件(QMenu类)

    2024-07-10 21:20:09       12 阅读
  6. 缓存击穿、缓存穿透、缓存雪崩以及应对措施

    2024-07-10 21:20:09       9 阅读
  7. Python基础学习笔记——异常

    2024-07-10 21:20:09       10 阅读