diag: H 段(老师 oracle 走 rollout / 前缀消融 / 子目标越过顶点规则 / 分轴与分类别指标);训练:EMA、选模不落在 p_neq 预热、闭环分数选模、24000 步余弦、p_neq 0.5 + p_edge 0.1、子目标头切断抄输入、前缀/dq 增广;仿真:last 记真正提交的候选、碰撞与到达按每题时限、回放门禁读 pass+指纹并走 rollout;数据:动作标签按 1.25·STEP 归一化(act_scale 随 meta/ckpt/ONNX 传递,旧模型 1.0)、收回亏空结转、DAgger 带 qPrev 与起步速度、打包签名变更自动重打;ik-policy.js 同步(actScale、子目标规则、DLS 时清 lastPlan);本机执行清单与 README 更新
This commit is contained in:
@@ -60,3 +60,33 @@ def set_rng_state(d):
|
||||
try: torch.cuda.set_rng_state_all([t.cpu() for t in d['cuda']])
|
||||
except Exception: pass
|
||||
return True
|
||||
|
||||
|
||||
def load_policy(path, device, prefer_ema=True):
|
||||
"""载入策略(2026-10-19,审查 review_model_train P0-2):优先取 EMA 权重 ck['ema'](train.py 起存),没有就用 ck['model'](旧 checkpoint、APG 产物)。
|
||||
model.act_scale = ck['act_scale'](动作标签归一化倍数,见 ml/prep/build_dataset.cjs ACT_SCALE);旧 checkpoint 缺省 1.0 = 原口径。
|
||||
闭环仿真 / DAgger / APG 起点 / 挖错 / 门禁 / 验收 / 导出都经这里载入,保证同一份权重、同一个动作尺度。返回 (model.eval(), ck)。"""
|
||||
from ml.model.policy import build
|
||||
ck = torch.load(path, map_location=device)
|
||||
m = build(ck['cfg']).to(device)
|
||||
sd = ck.get('ema') if prefer_ema and ck.get('ema') is not None else ck['model']
|
||||
m.load_state_dict(sd)
|
||||
m.act_scale = float(ck.get('act_scale', 1.0))
|
||||
return m.eval(), ck
|
||||
|
||||
|
||||
def pick_start(run_dir):
|
||||
"""DAgger 起点(2026-10-19,审查 P0-2):best.pt 的闭环 success > 0 才用 best.pt;否则用 last.pt
|
||||
(success 全 0 时 best.pt 只由开环误差决定,可能落在 p_neq 预热期,一步映射没训过)。载入时取 EMA。"""
|
||||
best, last = os.path.join(run_dir, 'best.pt'), os.path.join(run_dir, 'last.pt')
|
||||
if os.path.exists(best):
|
||||
ev = torch.load(best, map_location='cpu').get('eval') or {}
|
||||
if (ev.get('success') or 0) > 0 or not os.path.exists(last): return best
|
||||
return last if os.path.exists(last) else best
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# python -m ml.common.ckpt pick <运行目录> → 打印 DAgger 起点 checkpoint 路径
|
||||
import sys
|
||||
if len(sys.argv) == 3 and sys.argv[1] == 'pick': print(pick_start(sys.argv[2]))
|
||||
else: raise SystemExit('usage: python -m ml.common.ckpt pick <run_dir>')
|
||||
|
||||
Reference in New Issue
Block a user