
Shaun ZhouandClaude Opus 5
b7505a743d
fix(simclr): 续训以配置为准,不再被存档里的超参静默覆盖
optimizer.load_state_dict 会整体覆盖 param_groups,把 lr / weight_decay 连同动量缓冲
一起还原成存档时的值。改了 yaml 再续训,改动会被静默吃掉:配置写 lr=5e-4,
实际仍按存档的 1e-3 训,scheduler.base_lrs 也是旧值。
改为「配置文件是唯一真相源,存档只提供进度」:
- 加载优化器状态前先抄下配置构造出的每组超参,加载后按组写回,只留下动量缓冲;
按组写回也保住了 build_optimizer 的分组结构(BN 与 bias 那组 weight_decay=0)
- 调度器统一按当前配置重建再快进到已训 epoch,不再恢复存档状态(它带着旧的
T_max 与 base_lrs)。cosine/step/multistep 都是 epoch 的确定性函数,
快进与恢复状态等价,因此不存在第二种行为
- 存档里额外记下当时的 optimizer/scheduler 配置,续训时逐项列出差异,
明确说明按当前配置执行
- 补回归测试:改 lr/weight_decay/总轮数后续训,三者都按 yaml 生效,
分组结构与动量缓冲不受影响
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-04 21:46:40 +08:00
..
2026-09-02 17:55:47 +08:00
2026-09-04 15:09:35 +08:00
2026-09-04 15:51:28 +08:00
2026-09-02 17:55:47 +08:00
2026-09-02 21:43:35 +08:00
2026-09-02 17:55:47 +08:00
2026-09-04 15:28:49 +08:00
2026-09-02 17:55:47 +08:00
2026-09-02 17:55:47 +08:00
2026-09-04 21:46:40 +08:00
2026-09-02 17:55:47 +08:00
2026-09-02 21:43:35 +08:00
2026-09-02 17:55:47 +08:00
2026-09-02 17:55:47 +08:00
2026-09-02 17:55:47 +08:00