pytorch中model.eval的理解

在复现simsam的过程中,看到在线性评估部分的训练函数中设置了model.eval,不太理解,印象中一直觉得,model.eval会影响梯度的回传,这里来拨乱反正一下。

  1. 事实上,model.eval()主要影响 BatchNorm 和 Dropout 层的行为,确保它们在训练和评估时的表现一致。
    model.eval() 会做以下几件事:
  • BatchNorm 层:从计算每个批次的均值和方差,变成使用训练期间保存的全局均值和方差。这有助于模型在推理时保持一致的行为。
  • Dropout 层:将 Dropout 层禁用(即在训练时丢弃部分神经元的随机行为停止),以确保所有神经元参与计算。
  1. 而真正影响梯度回传的实际上是requires_grad=True。只要某一层该属性为True,那么这一层就会参与前向传播和反向传播。
  2. 结合simsiam的实际场景来看一下:
    在该场景中希望冻结模型的前几层(特征提取部分)并只训练后面的线性分类器部分,因此,将前面的层的 requires_grad 设置为 False,使得它们不会计算梯度和更新参数,后面的线性分类器部分保持 requires_grad=True,使其参与训练。同时在训练的过程中设置model.eval(),确保被冻结的层中的BN层的参数不会改变。

万万要搞清楚啊!

相关推荐
格林威12 小时前
SSD 写入速度测试命令(Linux)(基于工业相机高速存储)
linux·运维·开发语言·人工智能·数码相机·计算机视觉·工业相机
Hilaku12 小时前
OpenClaw 跟病毒的区别是什么?
前端·javascript·人工智能
逻辑君12 小时前
认知神经科学研究报告【20260008】
人工智能·深度学习·神经网络·机器学习
GIS数据转换器12 小时前
延凡智慧水务系统:引领行业变革的智能引擎
大数据·人工智能·无人机·智慧城市
行者无疆_ty12 小时前
小龙虾(OpenClaw)安装教程
人工智能·agent·openclaw·小龙虾
2601_9495394513 小时前
家用新能源 SUV 核心技术科普:后排娱乐、空间工程与混动可靠性解析
大数据·网络·人工智能·算法·机器学习
北邮刘老师13 小时前
暗数据:智能体探索世界的下一步
人工智能·大模型·prompt·智能体·智能体互联网
ggabb13 小时前
世界人口血型分布及关联特点
人工智能
弘弘弘弘~13 小时前
项目实战之评论情感分析模型——基于Bert(含任务头)
人工智能·深度学习·bert
明月_清风13 小时前
从提示词到脚手架:LLM 开发的三大工程维度对比
人工智能