[LAB 02 · 参数迁移:冻结、局部与全量微调](/course/notebooks/4bd450d54870432db91c80a4df563b8e.html) # 迁移可以只训练新分类头、解冻后部,或整体微调 [独立阅读](/course/notebook-blocks/0ef258c369294c3790069c7ff756bc1f.html) 按问题继续 同源参数的冻结/局部/全量/scratch与BN模式辨析 迁移可以只训练新分类头、解冻后部,或整体微调。应固定数据划分与评价指标,使用相同预算或明确记录预算差异;训练集很小时,也要把冻结表示的简单读出作为基线。 三个开关控制不同对象: | 开关 | 改变什么 | 不自动保证什么 | | --- | --- | --- | | model.eval() | BN、Dropout 等模块的模式 | 不关闭自动求导 | | torch.no_grad() | 作用域内的梯度图记录 | 不切换 BN/Dropout 模式 | | parameter.requiresgrad(False) | 指定参数是否需要梯度 | 不冻结 BN 的运行统计 | 例如冻结 backbone 权重后,若它仍处于 train 模式,BN buffers 可能继续变化,Dropout 也可能继续随机屏蔽。普通预测常同时使用 eval 与 no_grad;输入梯度可视化可能需要 eval,但必须保留输入的梯度记录。应按任务组合开关,而非背一个通用模板。 本节扩展了课后 BN 状态知识,主讲结课不以掌握这些 API 差异作为所有学生的通过条件。 **先判断**:为了画输入敏感性图,先调用 eval() 是否会导致无法求输入梯度? **核对提示**:不会。eval 只切换特定模块模式;只要记录计算图并让输入 requiresgrad=True,仍可求梯度。若放在 nograd 作用域内,才会丢失需要的记录。 **来源与继续阅读** - [PyTorch · Autograd mechanics and evaluation mode](https://docs.pytorch.org/docs/stable/notes/autograd.html) - [PyTorch · BatchNorm2d API](https://docs.pytorch.org/docs/stable/generated/torch.nn.BatchNorm2d.html) - [D2L 5.6 · Dropout](https://d2l.ai/chapter_multilayer-perceptrons/dropout.html)