feat(cluster): 新增 resnet18 自监督聚类配置,并修复 --set 的 YAML 标量解析
- 新增 configs/cluster/film_simclr_resnet18.yaml:用 resnet18 做域内自监督后聚类。 backbone 块带 _replace_,避免 base 里 tiny_conv 的 widths/depths 残留 - parse_override 此前只用 ast.literal_eval,不认 YAML 风格的 null/true/false: `--set xxx.enabled=false` 会得到字符串 "false",而非空字符串是真值,开关反被打开。 改为先试 Python 字面量(保住 1e-3 这类),再退回 YAML 标量解析 - feature_stages 默认由 null 改为 [5, 6]:实测 1 epoch 自监督后 layer2+3 的轮廓 0.243/稳定性 0.997,明显优于 layer4 的 0.156/0.528。原注释里"自监督后 layer4 已是域内特征"的推断被数据推翻 - README 补充三种方案的实测对比与成本 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
47fb0f1125
commit
6f00074199
@@ -16,6 +16,24 @@ def test_parse_override_literals():
|
||||
assert parse_override("train.lr=1e-3") == ("train.lr", 1e-3)
|
||||
assert parse_override("train.amp=False") == ("train.amp", False)
|
||||
assert parse_override("model.backbone.name=tiny_conv") == ("model.backbone.name", "tiny_conv")
|
||||
assert parse_override("simclr.feature_stages=[5, 6]") == ("simclr.feature_stages", [5, 6])
|
||||
|
||||
|
||||
def test_parse_override_accepts_yaml_style_scalars():
|
||||
"""配置文件里写 null/true/false,命令行上也得能这么写。
|
||||
|
||||
回归测试:只用 ast.literal_eval 时 `false` 会变成字符串 "false",
|
||||
而非空字符串是真值——`--set xxx.enabled=false` 反而把开关打开了。
|
||||
"""
|
||||
assert parse_override("a=null") == ("a", None)
|
||||
assert parse_override("a=~") == ("a", None)
|
||||
assert parse_override("a=true") == ("a", True)
|
||||
assert parse_override("a=false") == ("a", False)
|
||||
assert parse_override("a=false")[1] is False # 不是字符串
|
||||
|
||||
# 路径、模型名这类仍应保持字符串
|
||||
assert parse_override("a=resnet18") == ("a", "resnet18")
|
||||
assert parse_override("a=runs/x/best.pth") == ("a", "runs/x/best.pth")
|
||||
|
||||
|
||||
def test_apply_overrides_creates_missing_nodes():
|
||||
|
||||
Reference in New Issue
Block a user