Lecture 03迁移可以只训练新分类头、解冻后部,或整体微调
迁移可以只训练新分类头、解冻后部,或整体微调
按问题继续
同源参数的冻结/局部/全量/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 作用域内,才会丢失需要的记录。
来源与继续阅读