用户反馈"聚类配置里改不了 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>
44 lines
1.2 KiB
YAML
44 lines
1.2 KiB
YAML
_base_:
|
|
- ../model/tiny_conv.yaml
|
|
- ../dataset/film_defect.yaml
|
|
|
|
work_dir: runs/baseline
|
|
seed: 42
|
|
deterministic: false
|
|
device: auto # auto 按 cuda > mps > cpu 挑最快的可用后端;也可写 cuda / mps / cpu
|
|
|
|
train:
|
|
epochs: 100
|
|
amp: auto # auto: CUDA 上开、MPS 上关(实测 MPS autocast 比 fp32 慢);也可写 true / false
|
|
clip_grad: 5.0
|
|
log_interval: 20
|
|
monitor: f1 # 用于挑选 best.pth 的验证指标
|
|
restart_schedule: false # 续训时按剩余轮数重开学习率曲线(调度已到末尾、想调大 lr 时用)
|
|
|
|
optimizer:
|
|
name: adamw
|
|
lr: 0.001
|
|
weight_decay: 0.0001
|
|
|
|
scheduler:
|
|
name: cosine
|
|
|
|
loss:
|
|
heatmap_weight: 1.0
|
|
wh_weight: 0.1
|
|
offset_weight: 1.0
|
|
cls_weight: 1.0
|
|
|
|
eval:
|
|
score_threshold: 0.3
|
|
iou_threshold: 0.5
|
|
topk: 50
|
|
|
|
# 训练过程可视化(SwanLab)。未安装或 enabled=false 时自动跳过。
|
|
swanlab:
|
|
enabled: true
|
|
project: film-defect
|
|
name: null # 缺省用 work_dir 的目录名
|
|
mode: online # online(云端) | local(本地看板) | offline(仅存盘) | disabled
|
|
tags: [tiny_conv, center-head]
|