在从检查点恢复时,BaseFinetuning 会重新冻结已解冻的模块
作者: yentur创建于 2026年8月14日更新于 2026年8月14日
标签ver: 2.7.x
QQ 错误描述
恢复“BaseFineturn”从检查站静悄悄地重新冻结了中断前已经解冻的模块。 受影响的参数在优化器中保持正确的学习率,但要求 grad'是假',所以它们不会收到梯度,永远不会再更新. 没有警告, " 学习监测员 " 仍然报告该群体的学习率。
原因是半完成还原:
BaseFineturn.setup()'在恢复运行和重新运行时无条件拨打self.freeze- before training(pl module)'。 这必须在设置()'中发生,因为它必须在配置-优化者()'之前运行。BaseFineturn.on-fit start ()'然后从内部-优化-metadata'恢复优化.param-groups',但只恢复集团成员资格。 它从未恢复param.requires grad'。
backboneFinetue.finetune 函数 ()'只在准确的时代epoch = unfreze backbone at epoch'上解冻;对于后来的时代来说,它只是调整了学习率。 因此,一旦解冻时代已经过去,没有什么能使`要求'退后,骨干在其余训练中会被冻结。
你看到什么版本的问题?
师傅
如何复制错误
导入火炬
从火炬导入n
从闪电. pytorch 导入训练器
从闪电. pytorch. 回调导入 BackboneFineduc, 模型检查点
从闪电. pytorch.demos.boring class 导入 BoringModel
类模型( BringModel) :
\\ nit ( 自己) :
超级 (. ) init ()
自显示器 = nn.Linear(32, 2)
self.backbone=nn.Linear(32,32) 页面存档备份,存于互联网档案馆.
向前( 自, x) :
返回自定义.layer(自定义.backbone(x))
def 配置优化器( 自 ):
# 只有头开始;回调器解冻时会增加骨干
返回火炬. optim.SGD(self.layer.parameters (), lr=0.1)
fit( 最大时代, 回调, ckpt path=无) :
型号=型号()
训练员( E)
默认 root dir="/tmp/bb",
最大时区=最大时区,
限制( T) 列车( B)=2,
限制 val batches=0,
num saniity val steps=0, (中文(简体) ).
启用 进步 bar=假,
启用 model summary=虚假,
记录器=假,
召回数=召回数,
.fit( 型号, ckpt path=ckpt path)
返回模式
ckpt = 模型检查点( dirpath="/tmp/bb),保存 last=True)
直径=合身 (4, [backboneFineturn(unfreze backbone at epoch=1)]).
打印( “ 未中断, 骨干可训练 : ” ), straight. backbone. weight. requires grad)
fit( 2, [backboneFinetation( unfreze backbone at epoch=1, ckpt] ).
恢复=适 (4, [backboneFineturn(unfreze backbone at epoch=1)), ckpt path=ckpt. last model path) 页面存档备份,存于互联网档案馆.
print ("已恢复,可主干线列车:"), recover.backbone. weight.requires grad) 页面存档备份,存于互联网档案馆.QQ 错误消息和日志
不间断、可主干电:真
恢复,可主干线培训:虚假跟踪 " 要求 格勒 " 以及骨干权重是否实际变化,按时代分列 . . . . . . .
内容来源: Lightning-AI/pytorch-lightning