summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYurenHao0426 <Blackhao0426@gmail.com>2026-04-07 22:49:53 -0500
committerYurenHao0426 <Blackhao0426@gmail.com>2026-04-07 22:49:53 -0500
commita89ef4dee2750dd7bddbe1fd0a1b94d1f74d6f9c (patch)
tree0299175a1b943655db74f8343fad9e462f689820
parentc2e145e162444b31ac5c66a90daa6bc0a1cda591 (diff)
Add temporal diagnostic evolution: protocol fires at epoch 4 of DFA
Replays per-epoch logged data from results/snapshot_evolution_v2/ through the protocol thresholds. Result: diagnostics (a) ||h_l|| explosion AND (b) ||g_L|| at floor BOTH first fire at epoch 4 of DFA training. At that point, DFA test acc is 0.308 — its final value at epoch 100 is also 0.308. The protocol could have walked back the headline 96 epochs before training finished. DFA's gamma hovers at 0.087-0.107 for all 100 epochs. A reviewer looking at acc+gamma would conclude 'DFA is hovering at 31% acc with ~0.10 alignment, both reasonable'. Wrong on both counts. BP never fires any diagnostic at any epoch. Stays bounded at ||h_L||~200, ||g_L||~3-5e-5, accuracy climbs to 0.61. This is the temporal validation of decision utility: the protocol catches the pathology AS IT HAPPENS, not just retrospectively.
-rw-r--r--protocol/examples/temporal_diagnostic_evolution.py167
-rw-r--r--results/protocol_audit/temporal_evolution_s42.json724
2 files changed, 891 insertions, 0 deletions
diff --git a/protocol/examples/temporal_diagnostic_evolution.py b/protocol/examples/temporal_diagnostic_evolution.py
new file mode 100644
index 0000000..e349cec
--- /dev/null
+++ b/protocol/examples/temporal_diagnostic_evolution.py
@@ -0,0 +1,167 @@
+"""
+Temporal validation of the diagnostic protocol: at what epoch during DFA
+training does each diagnostic cross its degeneracy threshold?
+
+This uses the existing snapshot evolution data in
+`results/snapshot_evolution_v2/`, which logs per-epoch:
+ - hidden_norms (the (a) diagnostic)
+ - bp_grad_norms_per_sample_med (the (b) diagnostic)
+ - gamma_dfa (the field-standard reference number)
+ - acc_eval
+
+over 100 epochs of both BP and DFA training on the standard 4-block d=256
+ResMLP CIFAR-10 setup. We replay this data through the protocol's
+threshold logic and report:
+
+ (i) the epoch at which each diagnostic first FIRES on DFA,
+ (ii) the per-epoch headline accuracy (so we can show that the diagnostic
+ fires BEFORE the headline acc has converged — i.e. the protocol
+ could have caught the pathology mid-training),
+ (iii) the trajectory on BP for comparison (which should never fire).
+
+This is the temporal validation of the protocol's decision utility: the
+protocol catches the pathology *as it happens*, not just retrospectively.
+
+Run:
+ python -m protocol.examples.temporal_diagnostic_evolution
+"""
+import os
+import json
+import sys
+
+REPO_ROOT = os.path.dirname(
+ os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+)
+sys.path.insert(0, REPO_ROOT)
+
+from protocol.report import DiagnosticThresholds # noqa: E402
+
+THRESHOLDS = DiagnosticThresholds()
+
+
+def diagnose_entry(entry):
+ h = entry["hidden_norms"]
+ g = entry["bp_grad_norms_per_sample_med"]
+ h_exploded = (max(h) / max(h[0], 1e-30)) > THRESHOLDS.h_norm_explosion_ratio
+ g_at_floor = g[-1] < THRESHOLDS.g_norm_floor
+ return h_exploded, g_at_floor
+
+
+def first_fire_epoch(log, predicate):
+ for entry in log:
+ if predicate(entry):
+ return entry["epoch"]
+ return None
+
+
+def main():
+ snapshot_path = os.path.join(
+ REPO_ROOT, "results/snapshot_evolution_v2/snapshot_evolution_s42.json"
+ )
+ with open(snapshot_path) as f:
+ d = json.load(f)
+ bp_log = d["bp_log"]
+ dfa_log = d["dfa_log"]
+
+ print("=" * 88)
+ print("TEMPORAL DIAGNOSTIC EVOLUTION (4-block d=256 ResMLP, CIFAR-10, seed 42)")
+ print("=" * 88)
+
+ # ----- DFA trajectory ----- #
+ print("\nDFA training trajectory (each row = one logged epoch):")
+ print(
+ f" {'epoch':>6} {'acc':>8} {'gamma':>10} "
+ f"{'||h_L||':>14} {'||g_L||':>14} {'(a)':>5} {'(b)':>5}"
+ )
+ fired_a = False
+ fired_b = False
+ fire_a_epoch = None
+ fire_b_epoch = None
+ for entry in dfa_log:
+ h = entry["hidden_norms"]
+ g = entry["bp_grad_norms_per_sample_med"]
+ h_exp = (max(h) / max(h[0], 1e-30)) > THRESHOLDS.h_norm_explosion_ratio
+ g_floor = g[-1] < THRESHOLDS.g_norm_floor
+ flag_a = "FIRE" if h_exp else "ok"
+ flag_b = "FIRE" if g_floor else "ok"
+ ep = entry["epoch"]
+ if h_exp and not fired_a:
+ fired_a = True
+ fire_a_epoch = ep
+ if g_floor and not fired_b:
+ fired_b = True
+ fire_b_epoch = ep
+ if ep <= 5 or ep % 10 == 0 or ep == dfa_log[-1]["epoch"]:
+ gamma = entry.get("gamma_dfa")
+ gamma_s = "nan" if gamma is None or (isinstance(gamma, float) and gamma != gamma) else f"{gamma:.4f}"
+ print(
+ f" {ep:>6} {entry['acc_eval']:>8.4f} {gamma_s:>10} "
+ f"{h[-1]:>14.3e} {g[-1]:>14.3e} {flag_a:>5} {flag_b:>5}"
+ )
+
+ print()
+ print(f" Diagnostic (a) ‖h_l‖ explosion first fires at epoch: {fire_a_epoch}")
+ print(f" Diagnostic (b) ‖g_l‖ floor first fires at epoch: {fire_b_epoch}")
+ print(f" DFA test acc at the moment (a) fires: "
+ f"{next(e['acc_eval'] for e in dfa_log if e['epoch'] == fire_a_epoch):.4f}" if fire_a_epoch is not None else " (a) never fires")
+ print(f" DFA test acc at the moment (b) fires: "
+ f"{next(e['acc_eval'] for e in dfa_log if e['epoch'] == fire_b_epoch):.4f}" if fire_b_epoch is not None else " (b) never fires")
+ print(f" DFA final test acc: {dfa_log[-1]['acc_eval']:.4f}")
+
+ # ----- BP trajectory (sanity) ----- #
+ print("\nBP training trajectory (sanity):")
+ print(
+ f" {'epoch':>6} {'acc':>8} "
+ f"{'||h_L||':>14} {'||g_L||':>14} {'(a)':>5} {'(b)':>5}"
+ )
+ bp_fired = False
+ for entry in bp_log:
+ h = entry["hidden_norms"]
+ g = entry["bp_grad_norms_per_sample_med"]
+ h_exp = (max(h) / max(h[0], 1e-30)) > THRESHOLDS.h_norm_explosion_ratio
+ g_floor = g[-1] < THRESHOLDS.g_norm_floor
+ if h_exp or g_floor:
+ bp_fired = True
+ if entry["epoch"] <= 5 or entry["epoch"] % 10 == 0 or entry["epoch"] == bp_log[-1]["epoch"]:
+ print(
+ f" {entry['epoch']:>6} {entry['acc_eval']:>8.4f} "
+ f"{h[-1]:>14.3e} {g[-1]:>14.3e} "
+ f"{'FIRE' if h_exp else 'ok':>5} {'FIRE' if g_floor else 'ok':>5}"
+ )
+ print(f"\n BP fired any diagnostic at any epoch: {bp_fired}")
+ print(f" BP final test acc: {bp_log[-1]['acc_eval']:.4f}")
+
+ # ----- Save ----- #
+ out = {
+ "dfa": {
+ "trajectory": [
+ {
+ "epoch": e["epoch"],
+ "acc": e["acc_eval"],
+ "h_max_to_h0_ratio": (max(e["hidden_norms"]) / max(e["hidden_norms"][0], 1e-30)),
+ "g_L": e["bp_grad_norms_per_sample_med"][-1],
+ "gamma": e.get("gamma_dfa"),
+ }
+ for e in dfa_log
+ ],
+ "first_fire_a_epoch": fire_a_epoch,
+ "first_fire_b_epoch": fire_b_epoch,
+ "final_acc": dfa_log[-1]["acc_eval"],
+ },
+ "bp": {
+ "any_fire": bp_fired,
+ "final_acc": bp_log[-1]["acc_eval"],
+ },
+ "thresholds": {
+ "g_norm_floor": THRESHOLDS.g_norm_floor,
+ "h_norm_explosion_ratio": THRESHOLDS.h_norm_explosion_ratio,
+ },
+ }
+ out_path = os.path.join(REPO_ROOT, "results/protocol_audit/temporal_evolution_s42.json")
+ with open(out_path, "w") as f:
+ json.dump(out, f, indent=2)
+ print(f"\nSaved {out_path}")
+
+
+if __name__ == "__main__":
+ main()
diff --git a/results/protocol_audit/temporal_evolution_s42.json b/results/protocol_audit/temporal_evolution_s42.json
new file mode 100644
index 0000000..978390a
--- /dev/null
+++ b/results/protocol_audit/temporal_evolution_s42.json
@@ -0,0 +1,724 @@
+{
+ "dfa": {
+ "trajectory": [
+ {
+ "epoch": 0,
+ "acc": 0.115234375,
+ "h_max_to_h0_ratio": 1.0200858518771252,
+ "g_L": 0.0009829498594626784,
+ "gamma": 0.007406219025142491
+ },
+ {
+ "epoch": 1,
+ "acc": 0.310546875,
+ "h_max_to_h0_ratio": 9.105539613439749,
+ "g_L": 1.3869492931917193e-06,
+ "gamma": 0.08989996102172881
+ },
+ {
+ "epoch": 2,
+ "acc": 0.2880859375,
+ "h_max_to_h0_ratio": 23.895634409879722,
+ "g_L": 3.1722706239634135e-07,
+ "gamma": 0.0858152944711037
+ },
+ {
+ "epoch": 3,
+ "acc": 0.3017578125,
+ "h_max_to_h0_ratio": 44.635985187082326,
+ "g_L": 1.2936459370394005e-07,
+ "gamma": 0.08629915304481983
+ },
+ {
+ "epoch": 4,
+ "acc": 0.3076171875,
+ "h_max_to_h0_ratio": 71.4198771808451,
+ "g_L": 6.818439857170233e-08,
+ "gamma": 0.08862219587899745
+ },
+ {
+ "epoch": 5,
+ "acc": 0.328125,
+ "h_max_to_h0_ratio": 102.52852441602016,
+ "g_L": 4.2616289164243426e-08,
+ "gamma": 0.0876110177487135
+ },
+ {
+ "epoch": 6,
+ "acc": 0.2919921875,
+ "h_max_to_h0_ratio": 142.96758299856336,
+ "g_L": 2.847208158129888e-08,
+ "gamma": 0.08417161786928773
+ },
+ {
+ "epoch": 7,
+ "acc": 0.2919921875,
+ "h_max_to_h0_ratio": 185.43609674795738,
+ "g_L": 2.1003458527957264e-08,
+ "gamma": 0.08587896963581443
+ },
+ {
+ "epoch": 8,
+ "acc": 0.306640625,
+ "h_max_to_h0_ratio": 239.98360680624882,
+ "g_L": 1.588542275499094e-08,
+ "gamma": 0.08515941491350532
+ },
+ {
+ "epoch": 9,
+ "acc": 0.318359375,
+ "h_max_to_h0_ratio": 303.4620955013185,
+ "g_L": 1.2595491760691857e-08,
+ "gamma": 0.08757842611521482
+ },
+ {
+ "epoch": 10,
+ "acc": 0.3037109375,
+ "h_max_to_h0_ratio": 371.7242503592611,
+ "g_L": 1.0485931234427426e-08,
+ "gamma": 0.08759273961186409
+ },
+ {
+ "epoch": 11,
+ "acc": 0.3017578125,
+ "h_max_to_h0_ratio": 447.2455723052178,
+ "g_L": 8.995014511015142e-09,
+ "gamma": 0.08920952118933201
+ },
+ {
+ "epoch": 12,
+ "acc": 0.287109375,
+ "h_max_to_h0_ratio": 527.3372707127633,
+ "g_L": 7.906582943917329e-09,
+ "gamma": 0.09209982817992568
+ },
+ {
+ "epoch": 13,
+ "acc": 0.2900390625,
+ "h_max_to_h0_ratio": 624.7571901951717,
+ "g_L": 6.830232379684276e-09,
+ "gamma": 0.0919318727683276
+ },
+ {
+ "epoch": 14,
+ "acc": 0.2978515625,
+ "h_max_to_h0_ratio": 730.2861062582472,
+ "g_L": 5.979241990416995e-09,
+ "gamma": 0.09486197168007493
+ },
+ {
+ "epoch": 15,
+ "acc": 0.28515625,
+ "h_max_to_h0_ratio": 851.5452155120408,
+ "g_L": 5.415522696949893e-09,
+ "gamma": 0.09578572702594101
+ },
+ {
+ "epoch": 16,
+ "acc": 0.2978515625,
+ "h_max_to_h0_ratio": 982.5025411225268,
+ "g_L": 4.859395552614387e-09,
+ "gamma": 0.09745451644994318
+ },
+ {
+ "epoch": 17,
+ "acc": 0.3115234375,
+ "h_max_to_h0_ratio": 1109.2166799007764,
+ "g_L": 4.416958798714177e-09,
+ "gamma": 0.09986255329567939
+ },
+ {
+ "epoch": 18,
+ "acc": 0.296875,
+ "h_max_to_h0_ratio": 1247.5712072754484,
+ "g_L": 4.023625876925507e-09,
+ "gamma": 0.09882167540490627
+ },
+ {
+ "epoch": 19,
+ "acc": 0.294921875,
+ "h_max_to_h0_ratio": 1397.3787963938353,
+ "g_L": 3.6983835993709135e-09,
+ "gamma": 0.1002046266803518
+ },
+ {
+ "epoch": 20,
+ "acc": 0.30859375,
+ "h_max_to_h0_ratio": 1545.1303527397818,
+ "g_L": 3.381670721225305e-09,
+ "gamma": 0.10065551439765841
+ },
+ {
+ "epoch": 21,
+ "acc": 0.3154296875,
+ "h_max_to_h0_ratio": 1704.429458344344,
+ "g_L": 3.0932543193529227e-09,
+ "gamma": 0.10184943513013422
+ },
+ {
+ "epoch": 22,
+ "acc": 0.3095703125,
+ "h_max_to_h0_ratio": 1874.255266801363,
+ "g_L": 2.860225389866855e-09,
+ "gamma": 0.1024534439202398
+ },
+ {
+ "epoch": 23,
+ "acc": 0.30859375,
+ "h_max_to_h0_ratio": 2059.271868946435,
+ "g_L": 2.644968466469777e-09,
+ "gamma": 0.10199526121141389
+ },
+ {
+ "epoch": 24,
+ "acc": 0.30078125,
+ "h_max_to_h0_ratio": 2243.3444089186632,
+ "g_L": 2.431272960734532e-09,
+ "gamma": 0.10456769005395472
+ },
+ {
+ "epoch": 25,
+ "acc": 0.3232421875,
+ "h_max_to_h0_ratio": 2431.7186164167333,
+ "g_L": 2.237900753598865e-09,
+ "gamma": 0.10287670505931601
+ },
+ {
+ "epoch": 26,
+ "acc": 0.3037109375,
+ "h_max_to_h0_ratio": 2638.4802845276367,
+ "g_L": 2.061209425363586e-09,
+ "gamma": 0.10249267728067935
+ },
+ {
+ "epoch": 27,
+ "acc": 0.310546875,
+ "h_max_to_h0_ratio": 2836.521035847856,
+ "g_L": 1.929810311551705e-09,
+ "gamma": 0.10335587273584679
+ },
+ {
+ "epoch": 28,
+ "acc": 0.302734375,
+ "h_max_to_h0_ratio": 3022.302418257499,
+ "g_L": 1.8156832704008252e-09,
+ "gamma": 0.10455695656128228
+ },
+ {
+ "epoch": 29,
+ "acc": 0.326171875,
+ "h_max_to_h0_ratio": 3216.09146149235,
+ "g_L": 1.727246901062074e-09,
+ "gamma": 0.10511547370697372
+ },
+ {
+ "epoch": 30,
+ "acc": 0.3017578125,
+ "h_max_to_h0_ratio": 3426.5687051496343,
+ "g_L": 1.6244732226056158e-09,
+ "gamma": 0.10590779440826736
+ },
+ {
+ "epoch": 31,
+ "acc": 0.3212890625,
+ "h_max_to_h0_ratio": 3616.9947045929007,
+ "g_L": 1.5239296491387222e-09,
+ "gamma": 0.10481705865822732
+ },
+ {
+ "epoch": 32,
+ "acc": 0.30859375,
+ "h_max_to_h0_ratio": 3845.3798365938474,
+ "g_L": 1.4318950469771607e-09,
+ "gamma": 0.10599250381346792
+ },
+ {
+ "epoch": 33,
+ "acc": 0.3115234375,
+ "h_max_to_h0_ratio": 4066.919227344099,
+ "g_L": 1.366150526038723e-09,
+ "gamma": 0.10529429838061333
+ },
+ {
+ "epoch": 34,
+ "acc": 0.30078125,
+ "h_max_to_h0_ratio": 4296.385709704455,
+ "g_L": 1.2914372904404559e-09,
+ "gamma": 0.1058788642694708
+ },
+ {
+ "epoch": 35,
+ "acc": 0.3251953125,
+ "h_max_to_h0_ratio": 4514.973206029281,
+ "g_L": 1.2247586278490985e-09,
+ "gamma": 0.10620562738040462
+ },
+ {
+ "epoch": 36,
+ "acc": 0.2998046875,
+ "h_max_to_h0_ratio": 4727.728399035424,
+ "g_L": 1.1697178781133744e-09,
+ "gamma": 0.10484841075958684
+ },
+ {
+ "epoch": 37,
+ "acc": 0.302734375,
+ "h_max_to_h0_ratio": 4947.933880710521,
+ "g_L": 1.1287816237270931e-09,
+ "gamma": 0.10523941312567331
+ },
+ {
+ "epoch": 38,
+ "acc": 0.3193359375,
+ "h_max_to_h0_ratio": 5187.019100689385,
+ "g_L": 1.0692404739387484e-09,
+ "gamma": 0.10568258634884842
+ },
+ {
+ "epoch": 39,
+ "acc": 0.302734375,
+ "h_max_to_h0_ratio": 5414.762673476968,
+ "g_L": 1.0274008310773297e-09,
+ "gamma": 0.10561428684741259
+ },
+ {
+ "epoch": 40,
+ "acc": 0.318359375,
+ "h_max_to_h0_ratio": 5642.163810290422,
+ "g_L": 9.876408579856388e-10,
+ "gamma": 0.10579964506905526
+ },
+ {
+ "epoch": 41,
+ "acc": 0.314453125,
+ "h_max_to_h0_ratio": 5875.719349740748,
+ "g_L": 9.522146404705722e-10,
+ "gamma": 0.10565257369307801
+ },
+ {
+ "epoch": 42,
+ "acc": 0.3056640625,
+ "h_max_to_h0_ratio": 6091.309905536761,
+ "g_L": 9.196678418810222e-10,
+ "gamma": 0.10566475696396083
+ },
+ {
+ "epoch": 43,
+ "acc": 0.3115234375,
+ "h_max_to_h0_ratio": 6320.578033351301,
+ "g_L": 8.925368222278962e-10,
+ "gamma": 0.10646540904417634
+ },
+ {
+ "epoch": 44,
+ "acc": 0.2939453125,
+ "h_max_to_h0_ratio": 6542.863607531624,
+ "g_L": 8.621173774869817e-10,
+ "gamma": 0.10568622383289039
+ },
+ {
+ "epoch": 45,
+ "acc": 0.3037109375,
+ "h_max_to_h0_ratio": 6759.136131450776,
+ "g_L": 8.303523979513727e-10,
+ "gamma": 0.10558789351489395
+ },
+ {
+ "epoch": 46,
+ "acc": 0.3115234375,
+ "h_max_to_h0_ratio": 6976.021798541258,
+ "g_L": 8.031720843959533e-10,
+ "gamma": 0.10623026502435096
+ },
+ {
+ "epoch": 47,
+ "acc": 0.30078125,
+ "h_max_to_h0_ratio": 7194.050001367361,
+ "g_L": 7.861447048895798e-10,
+ "gamma": 0.1059467513114214
+ },
+ {
+ "epoch": 48,
+ "acc": 0.3037109375,
+ "h_max_to_h0_ratio": 7398.96436944326,
+ "g_L": 7.681388303204528e-10,
+ "gamma": 0.10581977141555399
+ },
+ {
+ "epoch": 49,
+ "acc": 0.3056640625,
+ "h_max_to_h0_ratio": 7614.690714241657,
+ "g_L": 7.444729277494844e-10,
+ "gamma": 0.1066790189652238
+ },
+ {
+ "epoch": 50,
+ "acc": 0.3076171875,
+ "h_max_to_h0_ratio": 7853.160082336059,
+ "g_L": 7.279294389483937e-10,
+ "gamma": 0.10654840966162737
+ },
+ {
+ "epoch": 51,
+ "acc": 0.314453125,
+ "h_max_to_h0_ratio": 8068.496344203871,
+ "g_L": 7.073042707084198e-10,
+ "gamma": 0.10640880587743595
+ },
+ {
+ "epoch": 52,
+ "acc": 0.3125,
+ "h_max_to_h0_ratio": 8279.87833222284,
+ "g_L": 6.860176871015256e-10,
+ "gamma": 0.10629434209840838
+ },
+ {
+ "epoch": 53,
+ "acc": 0.310546875,
+ "h_max_to_h0_ratio": 8468.665150353787,
+ "g_L": 6.785109696316738e-10,
+ "gamma": 0.1070190458704019
+ },
+ {
+ "epoch": 54,
+ "acc": 0.2998046875,
+ "h_max_to_h0_ratio": 8662.894427811645,
+ "g_L": 6.630911930649575e-10,
+ "gamma": 0.10550818023330066
+ },
+ {
+ "epoch": 55,
+ "acc": 0.294921875,
+ "h_max_to_h0_ratio": 8859.945457311618,
+ "g_L": 6.530669338644657e-10,
+ "gamma": 0.10673638083972037
+ },
+ {
+ "epoch": 56,
+ "acc": 0.3076171875,
+ "h_max_to_h0_ratio": 9048.455080491647,
+ "g_L": 6.409432429244077e-10,
+ "gamma": 0.10726616549072787
+ },
+ {
+ "epoch": 57,
+ "acc": 0.3095703125,
+ "h_max_to_h0_ratio": 9225.180580440487,
+ "g_L": 6.240686856173738e-10,
+ "gamma": 0.10715722179156728
+ },
+ {
+ "epoch": 58,
+ "acc": 0.302734375,
+ "h_max_to_h0_ratio": 9389.414491237521,
+ "g_L": 6.178215161689593e-10,
+ "gamma": 0.10657632350921631
+ },
+ {
+ "epoch": 59,
+ "acc": 0.302734375,
+ "h_max_to_h0_ratio": 9560.35046009875,
+ "g_L": 6.10922701316241e-10,
+ "gamma": 0.10671919275773689
+ },
+ {
+ "epoch": 60,
+ "acc": 0.314453125,
+ "h_max_to_h0_ratio": 9743.096548981412,
+ "g_L": 5.951407144877408e-10,
+ "gamma": 0.10711025857017376
+ },
+ {
+ "epoch": 61,
+ "acc": 0.31640625,
+ "h_max_to_h0_ratio": 9900.165995387766,
+ "g_L": 5.870876007563197e-10,
+ "gamma": 0.10673619594308548
+ },
+ {
+ "epoch": 62,
+ "acc": 0.310546875,
+ "h_max_to_h0_ratio": 10050.725507964838,
+ "g_L": 5.793157620281875e-10,
+ "gamma": 0.10659754439257085
+ },
+ {
+ "epoch": 63,
+ "acc": 0.3154296875,
+ "h_max_to_h0_ratio": 10187.967561294332,
+ "g_L": 5.665773961105458e-10,
+ "gamma": 0.10679806087864563
+ },
+ {
+ "epoch": 64,
+ "acc": 0.3115234375,
+ "h_max_to_h0_ratio": 10327.581942142211,
+ "g_L": 5.626447086015673e-10,
+ "gamma": 0.10647483140928671
+ },
+ {
+ "epoch": 65,
+ "acc": 0.3154296875,
+ "h_max_to_h0_ratio": 10477.892487683303,
+ "g_L": 5.571588745922895e-10,
+ "gamma": 0.10677585859230021
+ },
+ {
+ "epoch": 66,
+ "acc": 0.3125,
+ "h_max_to_h0_ratio": 10608.100539466357,
+ "g_L": 5.557289628477236e-10,
+ "gamma": 0.10671760967670707
+ },
+ {
+ "epoch": 67,
+ "acc": 0.3046875,
+ "h_max_to_h0_ratio": 10729.526753376249,
+ "g_L": 5.452004958605983e-10,
+ "gamma": 0.10652847628807649
+ },
+ {
+ "epoch": 68,
+ "acc": 0.298828125,
+ "h_max_to_h0_ratio": 10848.449720265371,
+ "g_L": 5.416116999334974e-10,
+ "gamma": 0.10652959482831648
+ },
+ {
+ "epoch": 69,
+ "acc": 0.310546875,
+ "h_max_to_h0_ratio": 10969.703233760749,
+ "g_L": 5.308011252758149e-10,
+ "gamma": 0.10710431921324925
+ },
+ {
+ "epoch": 70,
+ "acc": 0.3076171875,
+ "h_max_to_h0_ratio": 11070.528274766682,
+ "g_L": 5.31539035009132e-10,
+ "gamma": 0.10700461147644091
+ },
+ {
+ "epoch": 71,
+ "acc": 0.314453125,
+ "h_max_to_h0_ratio": 11175.481523294386,
+ "g_L": 5.263872671079639e-10,
+ "gamma": 0.10688555391971022
+ },
+ {
+ "epoch": 72,
+ "acc": 0.2998046875,
+ "h_max_to_h0_ratio": 11268.134663718218,
+ "g_L": 5.26482579754628e-10,
+ "gamma": 0.10652808679151349
+ },
+ {
+ "epoch": 73,
+ "acc": 0.3017578125,
+ "h_max_to_h0_ratio": 11356.45767865038,
+ "g_L": 5.20502474454787e-10,
+ "gamma": 0.1070192107144976
+ },
+ {
+ "epoch": 74,
+ "acc": 0.3076171875,
+ "h_max_to_h0_ratio": 11442.287414101662,
+ "g_L": 5.161130411934778e-10,
+ "gamma": 0.10658633662387729
+ },
+ {
+ "epoch": 75,
+ "acc": 0.3095703125,
+ "h_max_to_h0_ratio": 11528.342434073731,
+ "g_L": 5.108970468903351e-10,
+ "gamma": 0.10703902837121859
+ },
+ {
+ "epoch": 76,
+ "acc": 0.3193359375,
+ "h_max_to_h0_ratio": 11599.735256407062,
+ "g_L": 5.071925657240683e-10,
+ "gamma": 0.1070477613247931
+ },
+ {
+ "epoch": 77,
+ "acc": 0.3076171875,
+ "h_max_to_h0_ratio": 11664.824418684797,
+ "g_L": 5.053178431246863e-10,
+ "gamma": 0.10688473540358245
+ },
+ {
+ "epoch": 78,
+ "acc": 0.306640625,
+ "h_max_to_h0_ratio": 11731.097001738786,
+ "g_L": 5.034740402365401e-10,
+ "gamma": 0.10701000291737728
+ },
+ {
+ "epoch": 79,
+ "acc": 0.3017578125,
+ "h_max_to_h0_ratio": 11789.44026298909,
+ "g_L": 5.054044960317583e-10,
+ "gamma": 0.10680000087450026
+ },
+ {
+ "epoch": 80,
+ "acc": 0.310546875,
+ "h_max_to_h0_ratio": 11841.717380216707,
+ "g_L": 4.985904467069702e-10,
+ "gamma": 0.10694103027344681
+ },
+ {
+ "epoch": 81,
+ "acc": 0.3076171875,
+ "h_max_to_h0_ratio": 11889.758117980049,
+ "g_L": 4.961450694729308e-10,
+ "gamma": 0.10704115682892734
+ },
+ {
+ "epoch": 82,
+ "acc": 0.3056640625,
+ "h_max_to_h0_ratio": 11934.781622674118,
+ "g_L": 4.923969565417963e-10,
+ "gamma": 0.10696214074414456
+ },
+ {
+ "epoch": 83,
+ "acc": 0.3046875,
+ "h_max_to_h0_ratio": 11969.998645042575,
+ "g_L": 4.939196274200697e-10,
+ "gamma": 0.10690056857129093
+ },
+ {
+ "epoch": 84,
+ "acc": 0.3076171875,
+ "h_max_to_h0_ratio": 12007.062669347924,
+ "g_L": 4.926699603835516e-10,
+ "gamma": 0.10689649073174223
+ },
+ {
+ "epoch": 85,
+ "acc": 0.3056640625,
+ "h_max_to_h0_ratio": 12040.34448562835,
+ "g_L": 4.934415098745148e-10,
+ "gamma": 0.10689723303948995
+ },
+ {
+ "epoch": 86,
+ "acc": 0.314453125,
+ "h_max_to_h0_ratio": 12070.010796509458,
+ "g_L": 4.905649775288623e-10,
+ "gamma": 0.10684622721601045
+ },
+ {
+ "epoch": 87,
+ "acc": 0.30859375,
+ "h_max_to_h0_ratio": 12094.71399956092,
+ "g_L": 4.891231308867816e-10,
+ "gamma": 0.10682923735294025
+ },
+ {
+ "epoch": 88,
+ "acc": 0.3115234375,
+ "h_max_to_h0_ratio": 12115.973412877314,
+ "g_L": 4.884483928435657e-10,
+ "gamma": 0.10694600266288035
+ },
+ {
+ "epoch": 89,
+ "acc": 0.3134765625,
+ "h_max_to_h0_ratio": 12134.21697744658,
+ "g_L": 4.847209300606892e-10,
+ "gamma": 0.10697454003093299
+ },
+ {
+ "epoch": 90,
+ "acc": 0.3095703125,
+ "h_max_to_h0_ratio": 12150.137522496967,
+ "g_L": 4.87353157829773e-10,
+ "gamma": 0.10689280136284651
+ },
+ {
+ "epoch": 91,
+ "acc": 0.306640625,
+ "h_max_to_h0_ratio": 12161.998257390238,
+ "g_L": 4.873002001914983e-10,
+ "gamma": 0.10685028225998394
+ },
+ {
+ "epoch": 92,
+ "acc": 0.30859375,
+ "h_max_to_h0_ratio": 12172.761022699098,
+ "g_L": 4.871424374996991e-10,
+ "gamma": 0.106783474504482
+ },
+ {
+ "epoch": 93,
+ "acc": 0.3095703125,
+ "h_max_to_h0_ratio": 12181.464685973158,
+ "g_L": 4.859731506101639e-10,
+ "gamma": 0.10685011067107553
+ },
+ {
+ "epoch": 94,
+ "acc": 0.3076171875,
+ "h_max_to_h0_ratio": 12188.383502774814,
+ "g_L": 4.849394219519354e-10,
+ "gamma": 0.10693995938345324
+ },
+ {
+ "epoch": 95,
+ "acc": 0.30859375,
+ "h_max_to_h0_ratio": 12193.096252321397,
+ "g_L": 4.868180303319036e-10,
+ "gamma": 0.10689331469620811
+ },
+ {
+ "epoch": 96,
+ "acc": 0.306640625,
+ "h_max_to_h0_ratio": 12195.758566985289,
+ "g_L": 4.867456437906981e-10,
+ "gamma": 0.1068731502891751
+ },
+ {
+ "epoch": 97,
+ "acc": 0.3095703125,
+ "h_max_to_h0_ratio": 12197.445268629526,
+ "g_L": 4.862423241824843e-10,
+ "gamma": 0.10688256371940952
+ },
+ {
+ "epoch": 98,
+ "acc": 0.306640625,
+ "h_max_to_h0_ratio": 12198.844803081969,
+ "g_L": 4.85919415815772e-10,
+ "gamma": 0.10688149025372695
+ },
+ {
+ "epoch": 99,
+ "acc": 0.3076171875,
+ "h_max_to_h0_ratio": 12199.46426639353,
+ "g_L": 4.855379431845108e-10,
+ "gamma": 0.10688879482768243
+ },
+ {
+ "epoch": 100,
+ "acc": 0.3076171875,
+ "h_max_to_h0_ratio": 12199.483908864511,
+ "g_L": 4.855802981929003e-10,
+ "gamma": 0.1068887785077095
+ }
+ ],
+ "first_fire_a_epoch": 4,
+ "first_fire_b_epoch": 4,
+ "final_acc": 0.3076171875
+ },
+ "bp": {
+ "any_fire": false,
+ "final_acc": 0.609375
+ },
+ "thresholds": {
+ "g_norm_floor": 1e-07,
+ "h_norm_explosion_ratio": 50.0
+ }
+} \ No newline at end of file