fix(config): --set 拦下不存在的键,并支持续训时重开学习率曲线
用户反馈"聚类配置里改不了 lr/weight_decay",实测是两件事:
1. --set 的键打错字母会凭空造出一个谁也不读的键,训练照跑但改动无效。
实例:simclr.optmizer.weight_decay=0.0(optimizer 少个 i)被静默接受。
现在 apply_overrides 默认只允许覆盖已存在的键,报错时给出同级可用键
与最接近的拼写("是不是想写 'optimizer'?")。需要新增键时可 strict=False。
2. lr 其实生效了,但从 2229/2500 续训时 cosine 只剩满值的 3%,
新设的 1e-3 落到 2.87e-5。新增 restart_schedule 开关:按剩余轮数重开曲线,
新 lr 从满值开始;SimCLR 与检测训练都支持。续训日志补上调度进度,
并在 lr 不足 initial_lr 的 10% 时警告并给出两种解法。
顺带:严格校验立刻暴露出 configs/cluster/film.yaml 里根本没有 scatter 段
(代码 cfg.get("scatter", {}) 兜底走默认值,所以功能正常但配置项形同虚设),已补上。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
506fde0290
commit
92c88b785c
@@ -99,6 +99,9 @@ simclr:
|
||||
temperature: 0.2 # 越小越关注难负样本
|
||||
amp: auto # CUDA 上开、MPS 上关
|
||||
save_interval: 5 # 每 5 个 epoch 落一次盘,中途中断也能拿到权重
|
||||
# 续训时若调度已接近末尾,cosine 会把新设的 lr 乘上接近 0 的系数。
|
||||
# 打开这个开关:按剩余轮数重开一条曲线,新 lr 从满值开始。
|
||||
restart_schedule: false
|
||||
|
||||
# 训练可视化,字段与 train.swanlab 相同。默认 local:不需要登录,
|
||||
# 日志写到 <work_dir>/swanlog,另开终端 `uv run swanlab watch runs/simclr/swanlog` 看板。
|
||||
@@ -122,3 +125,14 @@ simclr:
|
||||
# 输出:每簇软链多少张图 / 预览拼图放多少张
|
||||
link_limit: 300
|
||||
preview_count: 100
|
||||
|
||||
# 簇分布图 cluster_scatter.png(与 preview 拼图同级):
|
||||
# 左边是聚类空间的 PCA 二维投影(散点按簇着色,X 是质心),右边是质心两两距离矩阵。
|
||||
# 用 PCA 而不是 t-SNE/UMAP——后两者为了把簇拉开会扭曲簇间距离,而这张图就是要看距离。
|
||||
scatter:
|
||||
enabled: true
|
||||
max_points: 5000 # 点太多会糊成一团且文件很大,超过就随机抽样
|
||||
point_size: 6
|
||||
alpha: 0.35
|
||||
figsize: [14, 6]
|
||||
dpi: 150
|
||||
|
||||
@@ -13,6 +13,7 @@ train:
|
||||
clip_grad: 5.0
|
||||
log_interval: 20
|
||||
monitor: f1 # 用于挑选 best.pth 的验证指标
|
||||
restart_schedule: false # 续训时按剩余轮数重开学习率曲线(调度已到末尾、想调大 lr 时用)
|
||||
|
||||
optimizer:
|
||||
name: adamw
|
||||
|
||||
Reference in New Issue
Block a user