diff --git a/ml/pipeline.sh b/ml/pipeline.sh index 418bc25..4cd2c6f 100755 --- a/ml/pipeline.sh +++ b/ml/pipeline.sh @@ -127,9 +127,9 @@ case $stage in extra=""; [ "${CONSENSUS:-0}" = "1" ] && extra="--consensus 4" run bash ml/gen/run_parallel.sh $per $NPROC 1 "$extra" # 补量:共识过滤与间隙过滤都会降低保留率,样本不足 TARGET_SAMPLES 时按实测"样本/任务"补生成。 - # 最多 4 次(第五轮由 2 改 4:两种过滤叠加时 2 次可能补不满);已写完的补量 shard 续跑时跳过。 + # 最多 5 次(第五轮由 2 改 4;2026-10-18 应用户要求 4 改 5:共识 + 间隙两道过滤叠加时余量更足);已写完的补量 shard 续跑时跳过。 s0=$((1 + NPROC)) - for k in 1 2 3 4; do + for k in 1 2 3 4 5; do need=$($PY -c "import json,math;s=json.load(open('ml/data/stats.json', encoding='utf-8'));d=$TARGET_SAMPLES-s['samplesEvery3'];print(0 if d<=0 else math.ceil(d/(s['samplesEvery3']/max(1,s['tasks']))*1.05))") [ "$need" = "0" ] && break echo "样本不足目标 $TARGET_SAMPLES,补生成 $need 条任务(第 $k 次)" @@ -141,7 +141,7 @@ case $stage in run bash ml/gen/run_parallel.sh $per2 $NPROC $s0 "$extra" s0=$((s0 + NPROC)) done - $PY -c "import json;s=json.load(open('ml/data/stats.json', encoding='utf-8'));import sys;sys.exit(0 if s['samplesEvery3']>=0.9*$TARGET_SAMPLES else 7)" || echo "警告:补 4 次后样本仍不足目标的 90%,按现有样本继续(stats.json 见 samplesEvery3)" ;; + $PY -c "import json;s=json.load(open('ml/data/stats.json', encoding='utf-8'));import sys;sys.exit(0 if s['samplesEvery3']>=0.9*$TARGET_SAMPLES else 7)" || echo "警告:补 5 次后样本仍不足目标的 90%,按现有样本继续(stats.json 见 samplesEvery3)" ;; prep) # 间隙过滤口径必须与生成时一致(审查 N-1) $PY -c "import json,sys;m=json.load(open('ml/data/stats.json', encoding='utf-8')).get('minGapFilterMm');sys.exit(0 if m is None or float(m)==float($MIN_GAP_MM) else 8)" \ || { echo "MIN_GAP_MM=$MIN_GAP_MM 与生成阶段 stats.json 的 minGapFilterMm 不一致:补量口径与训练集会分叉,请用同一值重跑 gen 或 prep"; exit 8; }