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层的参数不会改变。

万万要搞清楚啊!

相关推荐
F&C嘉准传感器12 小时前
嘉准微秒级高速色标传感器:50μs极速响应,高速分拣流水线物料精准识别不漏检
人工智能·目标检测·自动化·视觉检测·产品运营
Anova.YJ12 小时前
World Models for Games
人工智能
AI码农小姐姐12 小时前
2026好用的AI一键成片平台:知漫剧如何颠覆传统动漫短剧制作?
人工智能
王志来1379447300812 小时前
聚焦五大核心场景:工控服务器机箱平台的垂直深耕之路
运维·服务器·python
资源大佬星 课it12 小时前
黑马 Java+AI新版V16零基础就业班视频课程百度网盘下载
java·开发语言·人工智能
杀生丸学AI12 小时前
【三维重建】QuerySplat:在 3DGS 预测中解耦几何与外观表征
人工智能·3d·三维重建·扩散模型·高斯泼溅·空间智能·室内重建
zmzb010312 小时前
Python课后习题训练记录Day193
开发语言·python
卷无止境12 小时前
LiteLLM 全面解析开源AI网关如何统一管理百余种大模型
后端·python
鲁邦通物联网12 小时前
充电站底层脱机DLB引擎解构:基于Linux调度的边缘计算网关并发控制实战
linux·运维·人工智能·边缘计算·边缘计算网关·5g数采·工业级边缘计算网关
ADRU12 小时前
深度拆解DeepSeek Harness插件热更新实现原理
人工智能·ai·ai编程