diff options
| -rw-r--r-- | RAIN_EP_RELEASED_PROFILE.md | 15 | ||||
| -rwxr-xr-x | experiments/rain_ep_centered_r1.sh | 66 |
2 files changed, 81 insertions, 0 deletions
diff --git a/RAIN_EP_RELEASED_PROFILE.md b/RAIN_EP_RELEASED_PROFILE.md index 1b46f1e..c5bed5e 100644 --- a/RAIN_EP_RELEASED_PROFILE.md +++ b/RAIN_EP_RELEASED_PROFILE.md @@ -66,3 +66,18 @@ had a slightly lower residual (`7.42e-3` versus `7.55e-3`) but lower accuracy so R0 is ambiguous negative development evidence and is not promoted. The stable centered-EP backbone identified by C0 is required before further task confirmation. + +The paper-facing decision is based on downstream accuracy, not residual-bias +diagnostics. Reinterpreted on that basis, R0 supplies one positive cadence +(49.9% affine versus 44.8% intercept at cadence 10) and one negative cadence +(47.1% versus 48.4% at cadence 50). This cadence sensitivity and the single +unstable positive-EP run make R0 inconclusive rather than a mechanism gate. + +## R1 centered-EP screen + +R1 freezes cadence 10 from the only positive R0 downstream comparison and +moves to the stable centered estimator. On the same 10,000/2,000 development +split, one epoch compares centered clean, fixed raw/intercept/SDIL, released- +profile raw/intercept/SDIL, and a released-profile oracle. Downstream holdout +accuracy is the only selection endpoint. Residual diagnostics are retained +only to catch implementation errors. diff --git a/experiments/rain_ep_centered_r1.sh b/experiments/rain_ep_centered_r1.sh new file mode 100755 index 0000000..7f4af27 --- /dev/null +++ b/experiments/rain_ep_centered_r1.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT=/home/yurenh2/sdil +AUTHOR=/scratch/yurenh2/energy-based-learning +PYTHON=/scratch/yurenh2/venvs/burstccn/bin/python +PROFILE="$ROOT/results/physical_bias/p0_state_dependence.json" +OUT="$ROOT/results/ep_bias/centered_r1" +mkdir -p "$OUT" +cd "$AUTHOR" + +run_cell() { + local gpu=$1 + local tag=$2 + local mode=$3 + local cadence=$4 + local profile=$5 + local profile_args=() + if [ "$profile" = released ]; then + profile_args=(--dillavou-profile-json "$PROFILE") + fi + CUBLAS_WORKSPACE_CONFIG=:4096:8 CUDA_VISIBLE_DEVICES="$gpu" "$PYTHON" \ + "$ROOT/experiments/rain_ep_bias_train.py" \ + --author-root "$AUTHOR" --device cuda \ + --adapter dillavou --network-protocol comparative32 \ + --beta-policy centered --beta-value 0.25 \ + --mode "$mode" --bias-ratio 1 --dillavou-drift-ratio 0 \ + "${profile_args[@]}" --predictor-rate 1 \ + --dillavou-calibration-steps 1 --neutral-cadence "$cadence" \ + --epochs 1 --schedule-epochs 100 \ + --train-limit 10000 --test-limit 2000 --batch-size 128 \ + --training-iterations 15 --inference-iterations 60 \ + --evaluation-split train_holdout --data-seed 6200 \ + --seed 1988 --beta-seed 7100 --deterministic \ + --output "$OUT/$tag.json" > "$OUT/$tag.log" 2>&1 +} + +run_cell 0 centered_clean clean 0 constant & +run_cell 1 fixed_raw raw 0 constant & +run_cell 2 fixed_intercept constant 0 constant & +run_cell 3 fixed_sdil innovation 0 constant & +run_cell 4 profile_raw raw 0 released & +run_cell 5 profile_intercept_c10 constant 10 released & +run_cell 6 profile_sdil_c10 innovation 10 released & +run_cell 7 profile_oracle oracle 0 released & +wait + +"$PYTHON" - "$OUT" <<'PY' +import json +from pathlib import Path +import sys + +root = Path(sys.argv[1]) +summary = {} +for path in sorted(root.glob("*.json")): + if path.name == "summary.json": + continue + report = json.loads(path.read_text()) + summary[path.stem] = { + "holdout_accuracy": report["final"]["test_accuracy"], + "finite": report["final"]["finite"], + "wall_seconds": report["final"]["wall_seconds"], + } +(root / "summary.json").write_text(json.dumps(summary, indent=2) + "\n") +print(json.dumps(summary, indent=2)) +PY |
