headless / tests /compare_value_proposer.py
logos42's picture
Upload folder using huggingface_hub
216004d verified
Raw History Blame Contribute Delete
2.28 kB
#!/usr/bin/env python3
"""lm4 价值函数调度: fixed / random / value 三臂 × 多 seed 对照。"""
import glob
import json
import os
import numpy as np
R = "/work/liuyuanjie/headless/results"
ARMS = ["fixed", "random", "value"]
data = {a: {} for a in ARMS}
for p in sorted(glob.glob(f"{R}/vp2_*_s*/lm4_wave_results.json")):
tag = os.path.basename(os.path.dirname(p))
_, arm, seed = tag.split("_")
d = json.load(open(p))
v = d.get("replay") or {}
data[arm][seed] = {
"replay": v.get("final_mean_acc"),
"forget": v.get("mean_forget"),
"naive": (d.get("naive") or {}).get("final_mean_acc"),
"naive_forget": (d.get("naive") or {}).get("mean_forget"),
}
print("=" * 78)
print("LM4 价值函数驱动调度 · 三臂对照 (6 域, replay)")
print("=" * 78)
hdr = " %-9s %-30s %-24s %s" % ("调度", "replay mean±std (CV)", "naive mean±std (CV)", "n")
print(hdr)
print(" " + "-" * 74)
for a in ARMS:
rs = [v["replay"] for v in data[a].values() if v["replay"] is not None]
ns = [v["naive"] for v in data[a].values() if v["naive"] is not None]
if not rs:
print(" %-9s (无)" % a)
continue
m, s = np.mean(rs), np.std(rs)
cv = 100 * s / max(1e-9, abs(m))
tag = "可信" if (m > 0 and s < m / 2) else "不可信"
if ns:
mn, sn = np.mean(ns), np.std(ns)
nstr = "%.4f±%.4f (%4.1f%%)" % (mn, sn, 100 * sn / max(1e-9, abs(mn)))
else:
nstr = "-"
print(" %-9s %.4f±%.4f (%5.1f%% %s) %-24s %d" % (a, m, s, cv, tag, nstr, len(rs)))
print()
print(" ── 逐 seed (replay) ──")
seeds = sorted({s for a in ARMS for s in data[a]}, key=lambda x: int(x) if x.isdigit() else 0)
print(" %-9s" % "seed" + "".join("%10s" % s for s in seeds))
for a in ARMS:
row = "".join(("%10.4f" % data[a][s]["replay"]) if s in data[a] and data[a][s]["replay"]
else "%10s" % "-" for s in seeds)
print(" %-9s" % a + row)
print()
print(" ── 参照 ──")
print(" 固定顺序基线 (c1_replay_rr2, 单 seed): replay 0.7368")
print(" SSM 原版 (q5_agg, 6 seed): replay 0.6126±0.0180")
print(" 联合训练上限 (6 域): joint 0.7948")
if not any(data[a] for a in ARMS):
print(" (无结果)")