fix(cluster): 配置层级写错不再静默忽略,并始终打印生效的超参
聚类配置里 optimizer/epochs 等键都在 `simclr:` 段下。写到顶层会被完全忽略、 不报任何错——用户改了 lr 却毫无反应,极难排查。同样的坑还有:改了基类 configs/cluster/film.yaml 的 simclr.optimizer,但运行的是子配置 film_simclr_resnet18.yaml,子配置里的同名键会盖掉基类的修改。 - 顶层出现 optimizer / scheduler / epochs / temperature / projection / save_interval / resume / checkpoint / log_interval 时警告并给出正确写法 - method != simclr 却写了 simclr: 段时提示该段不会生效 - SimCLRTrainer 初始化时无条件打印实际生效的 epochs / temperature / optimizer / scheduler,不再只在续训时才打印 - 修掉一处假差异:旧存档没有 scheduler_cfg 字段时会误报 "scheduler None -> cosine", 那是"不知道"而非"当时没有调度器" 已验证 --set 覆盖、直接改 yaml、旧格式存档三条路径下 lr/weight_decay 均正常生效。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
105cb38831
commit
506fde0290
@@ -353,6 +353,33 @@ def save_preview(path: Path, metas: list[dict], indices: list[int], cell: int =
|
||||
canvas.save(path)
|
||||
|
||||
|
||||
#: 这些键只在 `simclr:` 段下有意义,写到顶层会被静默忽略
|
||||
SIMCLR_ONLY_KEYS = (
|
||||
"optimizer",
|
||||
"scheduler",
|
||||
"epochs",
|
||||
"temperature",
|
||||
"projection",
|
||||
"save_interval",
|
||||
"resume",
|
||||
"checkpoint",
|
||||
"log_interval",
|
||||
)
|
||||
|
||||
|
||||
def warn_misplaced_keys(cfg, method: str) -> None:
|
||||
"""顶层出现本该放在 simclr: 下的键时警告——否则改了配置却毫无反应,极难排查。"""
|
||||
misplaced = [key for key in SIMCLR_ONLY_KEYS if key in cfg]
|
||||
if misplaced:
|
||||
logger.warning(
|
||||
"配置顶层出现了只在 `simclr:` 段下生效的键 %s,它们会被忽略。"
|
||||
"把它们缩进到 simclr: 下面,例如 `simclr:\n optimizer: {lr: 0.0005}`",
|
||||
misplaced,
|
||||
)
|
||||
if method != "simclr" and cfg.get("simclr"):
|
||||
logger.info("当前 method=%s,`simclr:` 段下的配置不会生效", method)
|
||||
|
||||
|
||||
def sweep_clusters(embeddings, spec: str, cluster_kwargs: dict) -> None:
|
||||
"""扫一遍簇数,同时看轮廓系数和换种子的稳定性。
|
||||
|
||||
@@ -431,6 +458,8 @@ def main() -> int:
|
||||
logger.error("--train-only 与 --sweep-k 不能同时用:前者不聚类,后者要靠聚类才能扫")
|
||||
return 1
|
||||
|
||||
warn_misplaced_keys(cfg, method)
|
||||
|
||||
dataset = build_dataset(dict(cfg["dataset"]))
|
||||
logger.info(
|
||||
"扫描到 %d 张图,来自 %d 个目录;簇数 %d,method=%s,设备 %s",
|
||||
|
||||
Reference in New Issue
Block a user