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

万万要搞清楚啊!

相关推荐
石逸凡4 分钟前
AI驱动的金融IT架构转型升级
人工智能·金融·架构
染指11107 分钟前
76.高级RAG-后检索器(时间排序)
人工智能·python·llama_index·llamaindex
小雷信息医学18 分钟前
5 篇老年队列套路拆解第 3 篇:单库 + U 型新指标 + Cox + RCS 拐点
人工智能·机器学习
少冰19 分钟前
从数据清洗到 Docker 部署:我在本地训练了一个中医领域 Qwen3 模型
人工智能
opensnn23 分钟前
当闭源AI遇上开源反击:未来竞争的核心不是模型,而是生态
人工智能·开源
一碗白开水一31 分钟前
入门实践工程九:基于 BERT 的中文情感分类微调~附:安装依赖库及工程源码
人工智能·深度学习·机器学习·自然语言处理·分类·bert
空堂与归34 分钟前
大模型幻觉:一篇文章搞懂成因、分类与四种解决方案
人工智能
CoordClaw41 分钟前
主流多智能体架构为什么大多失败——它们输在结构,不在模型
人工智能·架构
一只游鱼1 小时前
PianoAgent:开源 AI 钢琴作曲 Agent,用自然语言谱写钢琴曲
人工智能
weixin_446260851 小时前
资源授权:面向部署式AI智能体的参与式治理机制设计模型
人工智能