summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--experiments/analyze_rain_ep_s1.py108
-rw-r--r--results/ep_bias/s1/layer-clean-r0p01-e3-s1988.json74
-rw-r--r--results/ep_bias/s1/layer-constant-r0p01-e3-s1988.json106
-rw-r--r--results/ep_bias/s1/layer-constant-r0p1-e3-s1988.json106
-rw-r--r--results/ep_bias/s1/layer-constant-r4-e3-s1988.json70
-rw-r--r--results/ep_bias/s1/layer-innovation-r0p01-e3-s1988.json106
-rw-r--r--results/ep_bias/s1/layer-innovation-r0p1-e3-s1988.json106
-rw-r--r--results/ep_bias/s1/layer-innovation-r4-e3-s1988.json70
-rw-r--r--results/ep_bias/s1/layer-noise-r0p01-e3-s1988.json106
-rw-r--r--results/ep_bias/s1/layer-oracle-r0p01-e3-s1988.json106
-rw-r--r--results/ep_bias/s1/layer-raw-r0p01-e3-s1988.json106
-rw-r--r--results/ep_bias/s1_summary.json130
12 files changed, 1194 insertions, 0 deletions
diff --git a/experiments/analyze_rain_ep_s1.py b/experiments/analyze_rain_ep_s1.py
new file mode 100644
index 0000000..72ac2f0
--- /dev/null
+++ b/experiments/analyze_rain_ep_s1.py
@@ -0,0 +1,108 @@
+#!/usr/bin/env python3
+"""Audit the Rain neuron-state development screen without promoting it."""
+
+from __future__ import annotations
+
+import json
+import math
+from pathlib import Path
+
+
+ROOT = Path(__file__).resolve().parents[1]
+RESULT_ROOT = ROOT / "results" / "ep_bias" / "s1"
+R001 = {
+ name: f"layer-{file_name}-r0p01-e3-s1988.json"
+ for name, file_name in {
+ "clean": "clean",
+ "raw": "raw",
+ "same_rms_noise": "noise",
+ "constant": "constant",
+ "innovation": "innovation",
+ "oracle": "oracle",
+ }.items()
+}
+
+
+def read(path: Path) -> dict:
+ with path.open(encoding="utf-8") as handle:
+ return json.load(handle)
+
+
+def finite(record: dict) -> bool:
+ return all(
+ metric.get("finite", all(math.isfinite(float(metric[key])) for key in (
+ "train_cost", "test_cost", "train_accuracy", "test_accuracy")))
+ for metric in record["metrics"]
+ )
+
+
+def main() -> None:
+ records = {
+ name: read(RESULT_ROOT / file_name)
+ for name, file_name in R001.items()
+ }
+ rows = {
+ name: {
+ "final_test_accuracy": record["final"]["test_accuracy"],
+ "all_finite": finite(record),
+ "wall_seconds": record["final"]["wall_seconds"],
+ "neutral_observations": record["final"].get(
+ "corrector", {}).get("neutral_observations", 0),
+ "final_corrector": record["final"].get("corrector", {}),
+ }
+ for name, record in records.items()
+ }
+ clean = rows["clean"]["final_test_accuracy"]
+ raw = rows["raw"]["final_test_accuracy"]
+ innovation = rows["innovation"]["final_test_accuracy"]
+ constant = rows["constant"]["final_test_accuracy"]
+ boundary = {}
+ for ratio_name in ("r4", "r0p1"):
+ boundary[ratio_name] = {}
+ for mode in ("innovation", "constant"):
+ record = read(
+ RESULT_ROOT / f"layer-{mode}-{ratio_name}-e3-s1988.json")
+ boundary[ratio_name][mode] = {
+ "epochs_completed": len(record["metrics"]),
+ "all_finite": finite(record),
+ "final_test_accuracy": record["final"]["test_accuracy"],
+ }
+ report = {
+ "stage": "rain_ep_layer_state_s1",
+ "status": "positive_single_seed_development_not_confirmation",
+ "ratio": 0.01,
+ "rows": rows,
+ "paired_development_effects": {
+ "innovation_minus_raw_accuracy_points": 100.0 * (
+ innovation - raw),
+ "innovation_minus_constant_accuracy_points": 100.0 * (
+ innovation - constant),
+ "clean_minus_innovation_accuracy_points": 100.0 * (
+ clean - innovation),
+ "raw_loss_recovered_fraction": (
+ innovation - raw) / (clean - raw),
+ "innovation_wall_over_raw_ratio": (
+ rows["innovation"]["wall_seconds"] / rows["raw"]["wall_seconds"]),
+ },
+ "matched_predictor_protocol": {
+ "innovation_neutral_observations": rows[
+ "innovation"]["neutral_observations"],
+ "constant_neutral_observations": rows[
+ "constant"]["neutral_observations"],
+ "extra_equilibrium_phases": 0,
+ "source": "existing first EP phase of the first training minibatch",
+ "predictor_updates_after_first_minibatch": 0,
+ },
+ "stronger_ratio_boundary": boundary,
+ "test_policy": (
+ "development test subset observed each epoch; ratio chosen here; "
+ "all accuracy claims require a new frozen confirmation"),
+ }
+ output = RESULT_ROOT.parent / "s1_summary.json"
+ output.write_text(
+ json.dumps(report, indent=2, sort_keys=True, allow_nan=False) + "\n")
+ print(json.dumps(report, indent=2, sort_keys=True, allow_nan=False))
+
+
+if __name__ == "__main__":
+ main()
diff --git a/results/ep_bias/s1/layer-clean-r0p01-e3-s1988.json b/results/ep_bias/s1/layer-clean-r0p01-e3-s1988.json
new file mode 100644
index 0000000..67ec941
--- /dev/null
+++ b/results/ep_bias/s1/layer-clean-r0p01-e3-s1988.json
@@ -0,0 +1,74 @@
+{
+ "schema": "rain_ep_structured_bias_screen_v1",
+ "author": {
+ "repository": "https://github.com/rain-neuromorphics/energy-based-learning",
+ "revision": "6b253fd8a5d267535f58ab79992256ef10031ceb"
+ },
+ "protocol": {
+ "dataset": "FashionMNIST",
+ "network": "author ConvHopfieldEnergy28 32-64-10",
+ "algorithm": "positive equilibrium propagation",
+ "adapter": "layer",
+ "mode": "clean",
+ "bias_ratio": 0.01,
+ "predictor_rate": 0.2,
+ "neutral_cadence": 1,
+ "layer_calibration_steps": 1,
+ "calibration_batches": 0,
+ "calibration_observations": 0,
+ "calibration_seconds": 7.152557373046875e-07,
+ "epochs": 3,
+ "train_limit": 10000,
+ "test_limit": 2000,
+ "batch_size": 128,
+ "training_iterations": 12,
+ "inference_iterations": 30,
+ "seed": 1988,
+ "device": "cuda",
+ "determinism": "author_default",
+ "autodiff_used_for_learning": false
+ },
+ "metrics": [
+ {
+ "epoch": 1,
+ "train_accuracy": 0.5563,
+ "train_cost": 0.3355503449678421,
+ "test_accuracy": 0.722,
+ "test_cost": 0.24162537765502928,
+ "finite": true,
+ "corrector": {},
+ "wall_seconds": 11.857985019683838
+ },
+ {
+ "epoch": 2,
+ "train_accuracy": 0.7459,
+ "train_cost": 0.2172047360420227,
+ "test_accuracy": 0.754,
+ "test_cost": 0.20888809299468994,
+ "finite": true,
+ "corrector": {},
+ "wall_seconds": 22.17092728614807
+ },
+ {
+ "epoch": 3,
+ "train_accuracy": 0.7808,
+ "train_cost": 0.1935648787498474,
+ "test_accuracy": 0.7805,
+ "test_cost": 0.20253189277648925,
+ "finite": true,
+ "corrector": {},
+ "wall_seconds": 32.770522356033325
+ }
+ ],
+ "epochs_completed": 3,
+ "final": {
+ "epoch": 3,
+ "train_accuracy": 0.7808,
+ "train_cost": 0.1935648787498474,
+ "test_accuracy": 0.7805,
+ "test_cost": 0.20253189277648925,
+ "finite": true,
+ "corrector": {},
+ "wall_seconds": 32.770522356033325
+ }
+}
diff --git a/results/ep_bias/s1/layer-constant-r0p01-e3-s1988.json b/results/ep_bias/s1/layer-constant-r0p01-e3-s1988.json
new file mode 100644
index 0000000..64b32b8
--- /dev/null
+++ b/results/ep_bias/s1/layer-constant-r0p01-e3-s1988.json
@@ -0,0 +1,106 @@
+{
+ "schema": "rain_ep_structured_bias_screen_v1",
+ "author": {
+ "repository": "https://github.com/rain-neuromorphics/energy-based-learning",
+ "revision": "6b253fd8a5d267535f58ab79992256ef10031ceb"
+ },
+ "protocol": {
+ "dataset": "FashionMNIST",
+ "network": "author ConvHopfieldEnergy28 32-64-10",
+ "algorithm": "positive equilibrium propagation",
+ "adapter": "layer",
+ "mode": "constant",
+ "bias_ratio": 0.01,
+ "predictor_rate": 0.2,
+ "neutral_cadence": 1,
+ "layer_calibration_steps": 1,
+ "calibration_batches": 0,
+ "calibration_observations": 0,
+ "calibration_seconds": 4.76837158203125e-07,
+ "epochs": 3,
+ "train_limit": 10000,
+ "test_limit": 2000,
+ "batch_size": 128,
+ "training_iterations": 12,
+ "inference_iterations": 30,
+ "seed": 1988,
+ "device": "cuda",
+ "determinism": "author_default",
+ "autodiff_used_for_learning": false
+ },
+ "metrics": [
+ {
+ "epoch": 1,
+ "train_accuracy": 0.5418,
+ "train_cost": 0.3456231504678726,
+ "test_accuracy": 0.7,
+ "test_cost": 0.27050736045837404,
+ "finite": true,
+ "corrector": {
+ "step": 78,
+ "clean_state_difference_rms": 0.00220518357969036,
+ "bias_state_difference_rms": 8.139695991989966e-05,
+ "residual_state_difference_rms": 8.847031581067554e-05,
+ "bias_to_clean_state_difference_rms": 0.03691164793242701,
+ "residual_to_clean_state_difference_rms": 0.04011925203211339,
+ "neutral_observations": 128
+ },
+ "wall_seconds": 11.041993141174316
+ },
+ {
+ "epoch": 2,
+ "train_accuracy": 0.7203,
+ "train_cost": 0.24094166955947877,
+ "test_accuracy": 0.7095,
+ "test_cost": 0.24668947982788086,
+ "finite": true,
+ "corrector": {
+ "step": 157,
+ "clean_state_difference_rms": 0.0024822016295386524,
+ "bias_state_difference_rms": 8.225247019481232e-05,
+ "residual_state_difference_rms": 8.839977621608799e-05,
+ "bias_to_clean_state_difference_rms": 0.03313690121543428,
+ "residual_to_clean_state_difference_rms": 0.03561345507315543,
+ "neutral_observations": 128
+ },
+ "wall_seconds": 21.79225206375122
+ },
+ {
+ "epoch": 3,
+ "train_accuracy": 0.7258,
+ "train_cost": 0.23920346755981445,
+ "test_accuracy": 0.6295,
+ "test_cost": 0.30114346027374267,
+ "finite": true,
+ "corrector": {
+ "step": 236,
+ "clean_state_difference_rms": 0.002437890268465924,
+ "bias_state_difference_rms": 7.489153969713887e-05,
+ "residual_state_difference_rms": 7.972976077708221e-05,
+ "bias_to_clean_state_difference_rms": 0.03071981568073833,
+ "residual_to_clean_state_difference_rms": 0.03270440913948652,
+ "neutral_observations": 128
+ },
+ "wall_seconds": 32.627506256103516
+ }
+ ],
+ "epochs_completed": 3,
+ "final": {
+ "epoch": 3,
+ "train_accuracy": 0.7258,
+ "train_cost": 0.23920346755981445,
+ "test_accuracy": 0.6295,
+ "test_cost": 0.30114346027374267,
+ "finite": true,
+ "corrector": {
+ "step": 236,
+ "clean_state_difference_rms": 0.002437890268465924,
+ "bias_state_difference_rms": 7.489153969713887e-05,
+ "residual_state_difference_rms": 7.972976077708221e-05,
+ "bias_to_clean_state_difference_rms": 0.03071981568073833,
+ "residual_to_clean_state_difference_rms": 0.03270440913948652,
+ "neutral_observations": 128
+ },
+ "wall_seconds": 32.627506256103516
+ }
+}
diff --git a/results/ep_bias/s1/layer-constant-r0p1-e3-s1988.json b/results/ep_bias/s1/layer-constant-r0p1-e3-s1988.json
new file mode 100644
index 0000000..dad16f5
--- /dev/null
+++ b/results/ep_bias/s1/layer-constant-r0p1-e3-s1988.json
@@ -0,0 +1,106 @@
+{
+ "schema": "rain_ep_structured_bias_screen_v1",
+ "author": {
+ "repository": "https://github.com/rain-neuromorphics/energy-based-learning",
+ "revision": "6b253fd8a5d267535f58ab79992256ef10031ceb"
+ },
+ "protocol": {
+ "dataset": "FashionMNIST",
+ "network": "author ConvHopfieldEnergy28 32-64-10",
+ "algorithm": "positive equilibrium propagation",
+ "adapter": "layer",
+ "mode": "constant",
+ "bias_ratio": 0.1,
+ "predictor_rate": 0.2,
+ "neutral_cadence": 1,
+ "layer_calibration_steps": 1,
+ "calibration_batches": 0,
+ "calibration_observations": 0,
+ "calibration_seconds": 4.76837158203125e-07,
+ "epochs": 3,
+ "train_limit": 10000,
+ "test_limit": 2000,
+ "batch_size": 128,
+ "training_iterations": 12,
+ "inference_iterations": 30,
+ "seed": 1988,
+ "device": "cuda",
+ "determinism": "author_default",
+ "autodiff_used_for_learning": false
+ },
+ "metrics": [
+ {
+ "epoch": 1,
+ "train_accuracy": 0.1101,
+ "train_cost": 0.5406586401939392,
+ "test_accuracy": 0.0985,
+ "test_cost": 0.5743606986999512,
+ "finite": true,
+ "corrector": {
+ "step": 78,
+ "clean_state_difference_rms": 0.0026653360674050563,
+ "bias_state_difference_rms": 0.0008354981837576119,
+ "residual_state_difference_rms": 0.0009511466295866758,
+ "bias_to_clean_state_difference_rms": 0.3134682316331855,
+ "residual_to_clean_state_difference_rms": 0.356858049241311,
+ "neutral_observations": 128
+ },
+ "wall_seconds": 11.139351844787598
+ },
+ {
+ "epoch": 2,
+ "train_accuracy": 0.101,
+ "train_cost": 0.5405060306549072,
+ "test_accuracy": 0.0985,
+ "test_cost": 0.5631736030578613,
+ "finite": true,
+ "corrector": {
+ "step": 157,
+ "clean_state_difference_rms": 0.002972019905486441,
+ "bias_state_difference_rms": 0.0009809527816267104,
+ "residual_state_difference_rms": 0.0010539141121602908,
+ "bias_to_clean_state_difference_rms": 0.3300626553058548,
+ "residual_to_clean_state_difference_rms": 0.3546120637397928,
+ "neutral_observations": 128
+ },
+ "wall_seconds": 21.776801109313965
+ },
+ {
+ "epoch": 3,
+ "train_accuracy": 0.1015,
+ "train_cost": 0.5353086183547974,
+ "test_accuracy": 0.0985,
+ "test_cost": 0.5520355472564697,
+ "finite": true,
+ "corrector": {
+ "step": 236,
+ "clean_state_difference_rms": 0.002808309689352526,
+ "bias_state_difference_rms": 0.0009608045527965721,
+ "residual_state_difference_rms": 0.0010381629161631783,
+ "bias_to_clean_state_difference_rms": 0.3421291307149575,
+ "residual_to_clean_state_difference_rms": 0.36967536739245216,
+ "neutral_observations": 128
+ },
+ "wall_seconds": 32.33472681045532
+ }
+ ],
+ "epochs_completed": 3,
+ "final": {
+ "epoch": 3,
+ "train_accuracy": 0.1015,
+ "train_cost": 0.5353086183547974,
+ "test_accuracy": 0.0985,
+ "test_cost": 0.5520355472564697,
+ "finite": true,
+ "corrector": {
+ "step": 236,
+ "clean_state_difference_rms": 0.002808309689352526,
+ "bias_state_difference_rms": 0.0009608045527965721,
+ "residual_state_difference_rms": 0.0010381629161631783,
+ "bias_to_clean_state_difference_rms": 0.3421291307149575,
+ "residual_to_clean_state_difference_rms": 0.36967536739245216,
+ "neutral_observations": 128
+ },
+ "wall_seconds": 32.33472681045532
+ }
+}
diff --git a/results/ep_bias/s1/layer-constant-r4-e3-s1988.json b/results/ep_bias/s1/layer-constant-r4-e3-s1988.json
new file mode 100644
index 0000000..1d6f9e8
--- /dev/null
+++ b/results/ep_bias/s1/layer-constant-r4-e3-s1988.json
@@ -0,0 +1,70 @@
+{
+ "schema": "rain_ep_structured_bias_screen_v1",
+ "author": {
+ "repository": "https://github.com/rain-neuromorphics/energy-based-learning",
+ "revision": "6b253fd8a5d267535f58ab79992256ef10031ceb"
+ },
+ "protocol": {
+ "dataset": "FashionMNIST",
+ "network": "author ConvHopfieldEnergy28 32-64-10",
+ "algorithm": "positive equilibrium propagation",
+ "adapter": "layer",
+ "mode": "constant",
+ "bias_ratio": 4.0,
+ "predictor_rate": 0.2,
+ "neutral_cadence": 1,
+ "layer_calibration_steps": 1,
+ "calibration_batches": 0,
+ "calibration_observations": 0,
+ "calibration_seconds": 7.152557373046875e-07,
+ "epochs": 3,
+ "train_limit": 10000,
+ "test_limit": 2000,
+ "batch_size": 128,
+ "training_iterations": 12,
+ "inference_iterations": 30,
+ "seed": 1988,
+ "device": "cuda",
+ "determinism": "author_default",
+ "autodiff_used_for_learning": false
+ },
+ "metrics": [
+ {
+ "epoch": 1,
+ "train_accuracy": 0.1008,
+ "train_cost": NaN,
+ "test_accuracy": 0.1,
+ "test_cost": NaN,
+ "finite": false,
+ "corrector": {
+ "step": 78,
+ "clean_state_difference_rms": NaN,
+ "bias_state_difference_rms": NaN,
+ "residual_state_difference_rms": NaN,
+ "bias_to_clean_state_difference_rms": NaN,
+ "residual_to_clean_state_difference_rms": NaN,
+ "neutral_observations": 128
+ },
+ "wall_seconds": 10.736939430236816
+ }
+ ],
+ "epochs_completed": 1,
+ "final": {
+ "epoch": 1,
+ "train_accuracy": 0.1008,
+ "train_cost": NaN,
+ "test_accuracy": 0.1,
+ "test_cost": NaN,
+ "finite": false,
+ "corrector": {
+ "step": 78,
+ "clean_state_difference_rms": NaN,
+ "bias_state_difference_rms": NaN,
+ "residual_state_difference_rms": NaN,
+ "bias_to_clean_state_difference_rms": NaN,
+ "residual_to_clean_state_difference_rms": NaN,
+ "neutral_observations": 128
+ },
+ "wall_seconds": 10.736939430236816
+ }
+}
diff --git a/results/ep_bias/s1/layer-innovation-r0p01-e3-s1988.json b/results/ep_bias/s1/layer-innovation-r0p01-e3-s1988.json
new file mode 100644
index 0000000..3524c78
--- /dev/null
+++ b/results/ep_bias/s1/layer-innovation-r0p01-e3-s1988.json
@@ -0,0 +1,106 @@
+{
+ "schema": "rain_ep_structured_bias_screen_v1",
+ "author": {
+ "repository": "https://github.com/rain-neuromorphics/energy-based-learning",
+ "revision": "6b253fd8a5d267535f58ab79992256ef10031ceb"
+ },
+ "protocol": {
+ "dataset": "FashionMNIST",
+ "network": "author ConvHopfieldEnergy28 32-64-10",
+ "algorithm": "positive equilibrium propagation",
+ "adapter": "layer",
+ "mode": "innovation",
+ "bias_ratio": 0.01,
+ "predictor_rate": 0.2,
+ "neutral_cadence": 1,
+ "layer_calibration_steps": 1,
+ "calibration_batches": 0,
+ "calibration_observations": 0,
+ "calibration_seconds": 4.76837158203125e-07,
+ "epochs": 3,
+ "train_limit": 10000,
+ "test_limit": 2000,
+ "batch_size": 128,
+ "training_iterations": 12,
+ "inference_iterations": 30,
+ "seed": 1988,
+ "device": "cuda",
+ "determinism": "author_default",
+ "autodiff_used_for_learning": false
+ },
+ "metrics": [
+ {
+ "epoch": 1,
+ "train_accuracy": 0.5515,
+ "train_cost": 0.33758451879024504,
+ "test_accuracy": 0.704,
+ "test_cost": 0.2543400869369507,
+ "finite": true,
+ "corrector": {
+ "step": 78,
+ "clean_state_difference_rms": 0.002253664403472046,
+ "bias_state_difference_rms": 7.671039553526337e-05,
+ "residual_state_difference_rms": 3.3360335305939616e-05,
+ "bias_to_clean_state_difference_rms": 0.03403807391068591,
+ "residual_to_clean_state_difference_rms": 0.014802707650058249,
+ "neutral_observations": 128
+ },
+ "wall_seconds": 10.874735593795776
+ },
+ {
+ "epoch": 2,
+ "train_accuracy": 0.7401,
+ "train_cost": 0.22319662566184997,
+ "test_accuracy": 0.742,
+ "test_cost": 0.22525169372558593,
+ "finite": true,
+ "corrector": {
+ "step": 157,
+ "clean_state_difference_rms": 0.0027403383876202624,
+ "bias_state_difference_rms": 8.059984748706333e-05,
+ "residual_state_difference_rms": 3.9134135693138524e-05,
+ "bias_to_clean_state_difference_rms": 0.029412370330314228,
+ "residual_to_clean_state_difference_rms": 0.014280767612471029,
+ "neutral_observations": 128
+ },
+ "wall_seconds": 21.705955266952515
+ },
+ {
+ "epoch": 3,
+ "train_accuracy": 0.7681,
+ "train_cost": 0.20243184833526612,
+ "test_accuracy": 0.771,
+ "test_cost": 0.2131208267211914,
+ "finite": true,
+ "corrector": {
+ "step": 236,
+ "clean_state_difference_rms": 0.002674682890509977,
+ "bias_state_difference_rms": 7.2471939856954e-05,
+ "residual_state_difference_rms": 3.644143814163778e-05,
+ "bias_to_clean_state_difference_rms": 0.027095526020707417,
+ "residual_to_clean_state_difference_rms": 0.013624582663961916,
+ "neutral_observations": 128
+ },
+ "wall_seconds": 32.43295383453369
+ }
+ ],
+ "epochs_completed": 3,
+ "final": {
+ "epoch": 3,
+ "train_accuracy": 0.7681,
+ "train_cost": 0.20243184833526612,
+ "test_accuracy": 0.771,
+ "test_cost": 0.2131208267211914,
+ "finite": true,
+ "corrector": {
+ "step": 236,
+ "clean_state_difference_rms": 0.002674682890509977,
+ "bias_state_difference_rms": 7.2471939856954e-05,
+ "residual_state_difference_rms": 3.644143814163778e-05,
+ "bias_to_clean_state_difference_rms": 0.027095526020707417,
+ "residual_to_clean_state_difference_rms": 0.013624582663961916,
+ "neutral_observations": 128
+ },
+ "wall_seconds": 32.43295383453369
+ }
+}
diff --git a/results/ep_bias/s1/layer-innovation-r0p1-e3-s1988.json b/results/ep_bias/s1/layer-innovation-r0p1-e3-s1988.json
new file mode 100644
index 0000000..42ce90d
--- /dev/null
+++ b/results/ep_bias/s1/layer-innovation-r0p1-e3-s1988.json
@@ -0,0 +1,106 @@
+{
+ "schema": "rain_ep_structured_bias_screen_v1",
+ "author": {
+ "repository": "https://github.com/rain-neuromorphics/energy-based-learning",
+ "revision": "6b253fd8a5d267535f58ab79992256ef10031ceb"
+ },
+ "protocol": {
+ "dataset": "FashionMNIST",
+ "network": "author ConvHopfieldEnergy28 32-64-10",
+ "algorithm": "positive equilibrium propagation",
+ "adapter": "layer",
+ "mode": "innovation",
+ "bias_ratio": 0.1,
+ "predictor_rate": 0.2,
+ "neutral_cadence": 1,
+ "layer_calibration_steps": 1,
+ "calibration_batches": 0,
+ "calibration_observations": 0,
+ "calibration_seconds": 4.76837158203125e-07,
+ "epochs": 3,
+ "train_limit": 10000,
+ "test_limit": 2000,
+ "batch_size": 128,
+ "training_iterations": 12,
+ "inference_iterations": 30,
+ "seed": 1988,
+ "device": "cuda",
+ "determinism": "author_default",
+ "autodiff_used_for_learning": false
+ },
+ "metrics": [
+ {
+ "epoch": 1,
+ "train_accuracy": 0.1979,
+ "train_cost": 0.45902365708351134,
+ "test_accuracy": 0.0985,
+ "test_cost": 0.5191218128204346,
+ "finite": true,
+ "corrector": {
+ "step": 78,
+ "clean_state_difference_rms": 0.002542973014572624,
+ "bias_state_difference_rms": 0.0007720098656723152,
+ "residual_state_difference_rms": 0.0004373133388463855,
+ "bias_to_clean_state_difference_rms": 0.3035855517334542,
+ "residual_to_clean_state_difference_rms": 0.17196931950922847,
+ "neutral_observations": 128
+ },
+ "wall_seconds": 11.243505001068115
+ },
+ {
+ "epoch": 2,
+ "train_accuracy": 0.101,
+ "train_cost": 0.4809356739997864,
+ "test_accuracy": 0.1095,
+ "test_cost": 0.4851682243347168,
+ "finite": true,
+ "corrector": {
+ "step": 157,
+ "clean_state_difference_rms": 0.002750568816169295,
+ "bias_state_difference_rms": 0.0009181426910610319,
+ "residual_state_difference_rms": 0.00046971680438366,
+ "bias_to_clean_state_difference_rms": 0.33380102532381833,
+ "residual_to_clean_state_difference_rms": 0.17077078807205867,
+ "neutral_observations": 128
+ },
+ "wall_seconds": 21.95301079750061
+ },
+ {
+ "epoch": 3,
+ "train_accuracy": 0.1005,
+ "train_cost": 0.4802371117115021,
+ "test_accuracy": 0.0975,
+ "test_cost": 0.4777885150909424,
+ "finite": true,
+ "corrector": {
+ "step": 236,
+ "clean_state_difference_rms": 0.0026081446242749253,
+ "bias_state_difference_rms": 0.000761796334269707,
+ "residual_state_difference_rms": 0.00038068797845026796,
+ "bias_to_clean_state_difference_rms": 0.29208362418993133,
+ "residual_to_clean_state_difference_rms": 0.14596122274319842,
+ "neutral_observations": 128
+ },
+ "wall_seconds": 32.59378981590271
+ }
+ ],
+ "epochs_completed": 3,
+ "final": {
+ "epoch": 3,
+ "train_accuracy": 0.1005,
+ "train_cost": 0.4802371117115021,
+ "test_accuracy": 0.0975,
+ "test_cost": 0.4777885150909424,
+ "finite": true,
+ "corrector": {
+ "step": 236,
+ "clean_state_difference_rms": 0.0026081446242749253,
+ "bias_state_difference_rms": 0.000761796334269707,
+ "residual_state_difference_rms": 0.00038068797845026796,
+ "bias_to_clean_state_difference_rms": 0.29208362418993133,
+ "residual_to_clean_state_difference_rms": 0.14596122274319842,
+ "neutral_observations": 128
+ },
+ "wall_seconds": 32.59378981590271
+ }
+}
diff --git a/results/ep_bias/s1/layer-innovation-r4-e3-s1988.json b/results/ep_bias/s1/layer-innovation-r4-e3-s1988.json
new file mode 100644
index 0000000..414df7d
--- /dev/null
+++ b/results/ep_bias/s1/layer-innovation-r4-e3-s1988.json
@@ -0,0 +1,70 @@
+{
+ "schema": "rain_ep_structured_bias_screen_v1",
+ "author": {
+ "repository": "https://github.com/rain-neuromorphics/energy-based-learning",
+ "revision": "6b253fd8a5d267535f58ab79992256ef10031ceb"
+ },
+ "protocol": {
+ "dataset": "FashionMNIST",
+ "network": "author ConvHopfieldEnergy28 32-64-10",
+ "algorithm": "positive equilibrium propagation",
+ "adapter": "layer",
+ "mode": "innovation",
+ "bias_ratio": 4.0,
+ "predictor_rate": 0.2,
+ "neutral_cadence": 1,
+ "layer_calibration_steps": 1,
+ "calibration_batches": 0,
+ "calibration_observations": 0,
+ "calibration_seconds": 4.76837158203125e-07,
+ "epochs": 3,
+ "train_limit": 10000,
+ "test_limit": 2000,
+ "batch_size": 128,
+ "training_iterations": 12,
+ "inference_iterations": 30,
+ "seed": 1988,
+ "device": "cuda",
+ "determinism": "author_default",
+ "autodiff_used_for_learning": false
+ },
+ "metrics": [
+ {
+ "epoch": 1,
+ "train_accuracy": 0.1004,
+ "train_cost": NaN,
+ "test_accuracy": 0.1,
+ "test_cost": NaN,
+ "finite": false,
+ "corrector": {
+ "step": 78,
+ "clean_state_difference_rms": NaN,
+ "bias_state_difference_rms": NaN,
+ "residual_state_difference_rms": NaN,
+ "bias_to_clean_state_difference_rms": NaN,
+ "residual_to_clean_state_difference_rms": NaN,
+ "neutral_observations": 128
+ },
+ "wall_seconds": 10.930340766906738
+ }
+ ],
+ "epochs_completed": 1,
+ "final": {
+ "epoch": 1,
+ "train_accuracy": 0.1004,
+ "train_cost": NaN,
+ "test_accuracy": 0.1,
+ "test_cost": NaN,
+ "finite": false,
+ "corrector": {
+ "step": 78,
+ "clean_state_difference_rms": NaN,
+ "bias_state_difference_rms": NaN,
+ "residual_state_difference_rms": NaN,
+ "bias_to_clean_state_difference_rms": NaN,
+ "residual_to_clean_state_difference_rms": NaN,
+ "neutral_observations": 128
+ },
+ "wall_seconds": 10.930340766906738
+ }
+}
diff --git a/results/ep_bias/s1/layer-noise-r0p01-e3-s1988.json b/results/ep_bias/s1/layer-noise-r0p01-e3-s1988.json
new file mode 100644
index 0000000..319055d
--- /dev/null
+++ b/results/ep_bias/s1/layer-noise-r0p01-e3-s1988.json
@@ -0,0 +1,106 @@
+{
+ "schema": "rain_ep_structured_bias_screen_v1",
+ "author": {
+ "repository": "https://github.com/rain-neuromorphics/energy-based-learning",
+ "revision": "6b253fd8a5d267535f58ab79992256ef10031ceb"
+ },
+ "protocol": {
+ "dataset": "FashionMNIST",
+ "network": "author ConvHopfieldEnergy28 32-64-10",
+ "algorithm": "positive equilibrium propagation",
+ "adapter": "layer",
+ "mode": "same_rms_noise",
+ "bias_ratio": 0.01,
+ "predictor_rate": 0.2,
+ "neutral_cadence": 1,
+ "layer_calibration_steps": 1,
+ "calibration_batches": 0,
+ "calibration_observations": 0,
+ "calibration_seconds": 4.76837158203125e-07,
+ "epochs": 3,
+ "train_limit": 10000,
+ "test_limit": 2000,
+ "batch_size": 128,
+ "training_iterations": 12,
+ "inference_iterations": 30,
+ "seed": 1988,
+ "device": "cuda",
+ "determinism": "author_default",
+ "autodiff_used_for_learning": false
+ },
+ "metrics": [
+ {
+ "epoch": 1,
+ "train_accuracy": 0.5577,
+ "train_cost": 0.33517942011356355,
+ "test_accuracy": 0.725,
+ "test_cost": 0.2407160577774048,
+ "finite": true,
+ "corrector": {
+ "step": 78,
+ "clean_state_difference_rms": 0.002284858699245255,
+ "bias_state_difference_rms": 7.888106416418362e-05,
+ "residual_state_difference_rms": 7.92408299173491e-05,
+ "bias_to_clean_state_difference_rms": 0.034523388334797234,
+ "residual_to_clean_state_difference_rms": 0.0346808447907629,
+ "neutral_observations": 0
+ },
+ "wall_seconds": 10.741658210754395
+ },
+ {
+ "epoch": 2,
+ "train_accuracy": 0.7468,
+ "train_cost": 0.21608753056526184,
+ "test_accuracy": 0.757,
+ "test_cost": 0.207110125541687,
+ "finite": true,
+ "corrector": {
+ "step": 157,
+ "clean_state_difference_rms": 0.0029362952271972005,
+ "bias_state_difference_rms": 8.082260576450551e-05,
+ "residual_state_difference_rms": 8.414020609417264e-05,
+ "bias_to_clean_state_difference_rms": 0.027525367686427635,
+ "residual_to_clean_state_difference_rms": 0.02865522693863706,
+ "neutral_observations": 0
+ },
+ "wall_seconds": 21.249800205230713
+ },
+ {
+ "epoch": 3,
+ "train_accuracy": 0.7821,
+ "train_cost": 0.19308365321159363,
+ "test_accuracy": 0.7765,
+ "test_cost": 0.20104266738891602,
+ "finite": true,
+ "corrector": {
+ "step": 236,
+ "clean_state_difference_rms": 0.0028531605170621257,
+ "bias_state_difference_rms": 7.650330356103333e-05,
+ "residual_state_difference_rms": 7.797371328954984e-05,
+ "bias_to_clean_state_difference_rms": 0.026813529453929254,
+ "residual_to_clean_state_difference_rms": 0.027328891179890114,
+ "neutral_observations": 0
+ },
+ "wall_seconds": 31.844523668289185
+ }
+ ],
+ "epochs_completed": 3,
+ "final": {
+ "epoch": 3,
+ "train_accuracy": 0.7821,
+ "train_cost": 0.19308365321159363,
+ "test_accuracy": 0.7765,
+ "test_cost": 0.20104266738891602,
+ "finite": true,
+ "corrector": {
+ "step": 236,
+ "clean_state_difference_rms": 0.0028531605170621257,
+ "bias_state_difference_rms": 7.650330356103333e-05,
+ "residual_state_difference_rms": 7.797371328954984e-05,
+ "bias_to_clean_state_difference_rms": 0.026813529453929254,
+ "residual_to_clean_state_difference_rms": 0.027328891179890114,
+ "neutral_observations": 0
+ },
+ "wall_seconds": 31.844523668289185
+ }
+}
diff --git a/results/ep_bias/s1/layer-oracle-r0p01-e3-s1988.json b/results/ep_bias/s1/layer-oracle-r0p01-e3-s1988.json
new file mode 100644
index 0000000..d001b19
--- /dev/null
+++ b/results/ep_bias/s1/layer-oracle-r0p01-e3-s1988.json
@@ -0,0 +1,106 @@
+{
+ "schema": "rain_ep_structured_bias_screen_v1",
+ "author": {
+ "repository": "https://github.com/rain-neuromorphics/energy-based-learning",
+ "revision": "6b253fd8a5d267535f58ab79992256ef10031ceb"
+ },
+ "protocol": {
+ "dataset": "FashionMNIST",
+ "network": "author ConvHopfieldEnergy28 32-64-10",
+ "algorithm": "positive equilibrium propagation",
+ "adapter": "layer",
+ "mode": "oracle",
+ "bias_ratio": 0.01,
+ "predictor_rate": 0.2,
+ "neutral_cadence": 1,
+ "layer_calibration_steps": 1,
+ "calibration_batches": 0,
+ "calibration_observations": 0,
+ "calibration_seconds": 9.5367431640625e-07,
+ "epochs": 3,
+ "train_limit": 10000,
+ "test_limit": 2000,
+ "batch_size": 128,
+ "training_iterations": 12,
+ "inference_iterations": 30,
+ "seed": 1988,
+ "device": "cuda",
+ "determinism": "author_default",
+ "autodiff_used_for_learning": false
+ },
+ "metrics": [
+ {
+ "epoch": 1,
+ "train_accuracy": 0.5584,
+ "train_cost": 0.3354787145137787,
+ "test_accuracy": 0.723,
+ "test_cost": 0.2427797203063965,
+ "finite": true,
+ "corrector": {
+ "step": 78,
+ "clean_state_difference_rms": 0.0022691467986172575,
+ "bias_state_difference_rms": 7.881086208457053e-05,
+ "residual_state_difference_rms": 0.0,
+ "bias_to_clean_state_difference_rms": 0.03473149561438477,
+ "residual_to_clean_state_difference_rms": 0.0,
+ "neutral_observations": 0
+ },
+ "wall_seconds": 11.318737745285034
+ },
+ {
+ "epoch": 2,
+ "train_accuracy": 0.7453,
+ "train_cost": 0.21748591256141664,
+ "test_accuracy": 0.7545,
+ "test_cost": 0.21152253246307373,
+ "finite": true,
+ "corrector": {
+ "step": 157,
+ "clean_state_difference_rms": 0.002886418573836258,
+ "bias_state_difference_rms": 8.131759496456635e-05,
+ "residual_state_difference_rms": 0.0,
+ "bias_to_clean_state_difference_rms": 0.028172488807293606,
+ "residual_to_clean_state_difference_rms": 0.0,
+ "neutral_observations": 0
+ },
+ "wall_seconds": 22.1633780002594
+ },
+ {
+ "epoch": 3,
+ "train_accuracy": 0.7806,
+ "train_cost": 0.19335412440299987,
+ "test_accuracy": 0.781,
+ "test_cost": 0.20642725276947022,
+ "finite": true,
+ "corrector": {
+ "step": 236,
+ "clean_state_difference_rms": 0.0031325675330604514,
+ "bias_state_difference_rms": 7.640068624454531e-05,
+ "residual_state_difference_rms": 0.0,
+ "bias_to_clean_state_difference_rms": 0.024389158553879114,
+ "residual_to_clean_state_difference_rms": 0.0,
+ "neutral_observations": 0
+ },
+ "wall_seconds": 33.032013177871704
+ }
+ ],
+ "epochs_completed": 3,
+ "final": {
+ "epoch": 3,
+ "train_accuracy": 0.7806,
+ "train_cost": 0.19335412440299987,
+ "test_accuracy": 0.781,
+ "test_cost": 0.20642725276947022,
+ "finite": true,
+ "corrector": {
+ "step": 236,
+ "clean_state_difference_rms": 0.0031325675330604514,
+ "bias_state_difference_rms": 7.640068624454531e-05,
+ "residual_state_difference_rms": 0.0,
+ "bias_to_clean_state_difference_rms": 0.024389158553879114,
+ "residual_to_clean_state_difference_rms": 0.0,
+ "neutral_observations": 0
+ },
+ "wall_seconds": 33.032013177871704
+ }
+}
diff --git a/results/ep_bias/s1/layer-raw-r0p01-e3-s1988.json b/results/ep_bias/s1/layer-raw-r0p01-e3-s1988.json
new file mode 100644
index 0000000..1378182
--- /dev/null
+++ b/results/ep_bias/s1/layer-raw-r0p01-e3-s1988.json
@@ -0,0 +1,106 @@
+{
+ "schema": "rain_ep_structured_bias_screen_v1",
+ "author": {
+ "repository": "https://github.com/rain-neuromorphics/energy-based-learning",
+ "revision": "6b253fd8a5d267535f58ab79992256ef10031ceb"
+ },
+ "protocol": {
+ "dataset": "FashionMNIST",
+ "network": "author ConvHopfieldEnergy28 32-64-10",
+ "algorithm": "positive equilibrium propagation",
+ "adapter": "layer",
+ "mode": "raw",
+ "bias_ratio": 0.01,
+ "predictor_rate": 0.2,
+ "neutral_cadence": 1,
+ "layer_calibration_steps": 1,
+ "calibration_batches": 0,
+ "calibration_observations": 0,
+ "calibration_seconds": 4.76837158203125e-07,
+ "epochs": 3,
+ "train_limit": 10000,
+ "test_limit": 2000,
+ "batch_size": 128,
+ "training_iterations": 12,
+ "inference_iterations": 30,
+ "seed": 1988,
+ "device": "cuda",
+ "determinism": "author_default",
+ "autodiff_used_for_learning": false
+ },
+ "metrics": [
+ {
+ "epoch": 1,
+ "train_accuracy": 0.528,
+ "train_cost": 0.3528723662376404,
+ "test_accuracy": 0.6075,
+ "test_cost": 0.3228737697601318,
+ "finite": true,
+ "corrector": {
+ "step": 78,
+ "clean_state_difference_rms": 0.002115219847803807,
+ "bias_state_difference_rms": 7.767001341564045e-05,
+ "residual_state_difference_rms": 7.767001289677622e-05,
+ "bias_to_clean_state_difference_rms": 0.0367195937085612,
+ "residual_to_clean_state_difference_rms": 0.03671959346326082,
+ "neutral_observations": 0
+ },
+ "wall_seconds": 10.98665165901184
+ },
+ {
+ "epoch": 2,
+ "train_accuracy": 0.5871,
+ "train_cost": 0.33089104804992675,
+ "test_accuracy": 0.2775,
+ "test_cost": 0.6092092704772949,
+ "finite": true,
+ "corrector": {
+ "step": 157,
+ "clean_state_difference_rms": 0.0026018320295759056,
+ "bias_state_difference_rms": 8.50572839998886e-05,
+ "residual_state_difference_rms": 8.505727594527833e-05,
+ "bias_to_clean_state_difference_rms": 0.032691304831754565,
+ "residual_to_clean_state_difference_rms": 0.032691301736008885,
+ "neutral_observations": 0
+ },
+ "wall_seconds": 21.641644954681396
+ },
+ {
+ "epoch": 3,
+ "train_accuracy": 0.469,
+ "train_cost": 0.3959053112506866,
+ "test_accuracy": 0.493,
+ "test_cost": 0.44283706092834474,
+ "finite": true,
+ "corrector": {
+ "step": 236,
+ "clean_state_difference_rms": 0.0024997862085207757,
+ "bias_state_difference_rms": 6.673162402742633e-05,
+ "residual_state_difference_rms": 6.673162402742633e-05,
+ "bias_to_clean_state_difference_rms": 0.026694932470610805,
+ "residual_to_clean_state_difference_rms": 0.026694932470610805,
+ "neutral_observations": 0
+ },
+ "wall_seconds": 32.270538091659546
+ }
+ ],
+ "epochs_completed": 3,
+ "final": {
+ "epoch": 3,
+ "train_accuracy": 0.469,
+ "train_cost": 0.3959053112506866,
+ "test_accuracy": 0.493,
+ "test_cost": 0.44283706092834474,
+ "finite": true,
+ "corrector": {
+ "step": 236,
+ "clean_state_difference_rms": 0.0024997862085207757,
+ "bias_state_difference_rms": 6.673162402742633e-05,
+ "residual_state_difference_rms": 6.673162402742633e-05,
+ "bias_to_clean_state_difference_rms": 0.026694932470610805,
+ "residual_to_clean_state_difference_rms": 0.026694932470610805,
+ "neutral_observations": 0
+ },
+ "wall_seconds": 32.270538091659546
+ }
+}
diff --git a/results/ep_bias/s1_summary.json b/results/ep_bias/s1_summary.json
new file mode 100644
index 0000000..dc43021
--- /dev/null
+++ b/results/ep_bias/s1_summary.json
@@ -0,0 +1,130 @@
+{
+ "matched_predictor_protocol": {
+ "constant_neutral_observations": 128,
+ "extra_equilibrium_phases": 0,
+ "innovation_neutral_observations": 128,
+ "predictor_updates_after_first_minibatch": 0,
+ "source": "existing first EP phase of the first training minibatch"
+ },
+ "paired_development_effects": {
+ "clean_minus_innovation_accuracy_points": 0.9499999999999953,
+ "innovation_minus_constant_accuracy_points": 14.150000000000007,
+ "innovation_minus_raw_accuracy_points": 27.800000000000004,
+ "innovation_wall_over_raw_ratio": 1.0050329418868948,
+ "raw_loss_recovered_fraction": 0.9669565217391306
+ },
+ "ratio": 0.01,
+ "rows": {
+ "clean": {
+ "all_finite": true,
+ "final_corrector": {},
+ "final_test_accuracy": 0.7805,
+ "neutral_observations": 0,
+ "wall_seconds": 32.770522356033325
+ },
+ "constant": {
+ "all_finite": true,
+ "final_corrector": {
+ "bias_state_difference_rms": 7.489153969713887e-05,
+ "bias_to_clean_state_difference_rms": 0.03071981568073833,
+ "clean_state_difference_rms": 0.002437890268465924,
+ "neutral_observations": 128,
+ "residual_state_difference_rms": 7.972976077708221e-05,
+ "residual_to_clean_state_difference_rms": 0.03270440913948652,
+ "step": 236
+ },
+ "final_test_accuracy": 0.6295,
+ "neutral_observations": 128,
+ "wall_seconds": 32.627506256103516
+ },
+ "innovation": {
+ "all_finite": true,
+ "final_corrector": {
+ "bias_state_difference_rms": 7.2471939856954e-05,
+ "bias_to_clean_state_difference_rms": 0.027095526020707417,
+ "clean_state_difference_rms": 0.002674682890509977,
+ "neutral_observations": 128,
+ "residual_state_difference_rms": 3.644143814163778e-05,
+ "residual_to_clean_state_difference_rms": 0.013624582663961916,
+ "step": 236
+ },
+ "final_test_accuracy": 0.771,
+ "neutral_observations": 128,
+ "wall_seconds": 32.43295383453369
+ },
+ "oracle": {
+ "all_finite": true,
+ "final_corrector": {
+ "bias_state_difference_rms": 7.640068624454531e-05,
+ "bias_to_clean_state_difference_rms": 0.024389158553879114,
+ "clean_state_difference_rms": 0.0031325675330604514,
+ "neutral_observations": 0,
+ "residual_state_difference_rms": 0.0,
+ "residual_to_clean_state_difference_rms": 0.0,
+ "step": 236
+ },
+ "final_test_accuracy": 0.781,
+ "neutral_observations": 0,
+ "wall_seconds": 33.032013177871704
+ },
+ "raw": {
+ "all_finite": true,
+ "final_corrector": {
+ "bias_state_difference_rms": 6.673162402742633e-05,
+ "bias_to_clean_state_difference_rms": 0.026694932470610805,
+ "clean_state_difference_rms": 0.0024997862085207757,
+ "neutral_observations": 0,
+ "residual_state_difference_rms": 6.673162402742633e-05,
+ "residual_to_clean_state_difference_rms": 0.026694932470610805,
+ "step": 236
+ },
+ "final_test_accuracy": 0.493,
+ "neutral_observations": 0,
+ "wall_seconds": 32.270538091659546
+ },
+ "same_rms_noise": {
+ "all_finite": true,
+ "final_corrector": {
+ "bias_state_difference_rms": 7.650330356103333e-05,
+ "bias_to_clean_state_difference_rms": 0.026813529453929254,
+ "clean_state_difference_rms": 0.0028531605170621257,
+ "neutral_observations": 0,
+ "residual_state_difference_rms": 7.797371328954984e-05,
+ "residual_to_clean_state_difference_rms": 0.027328891179890114,
+ "step": 236
+ },
+ "final_test_accuracy": 0.7765,
+ "neutral_observations": 0,
+ "wall_seconds": 31.844523668289185
+ }
+ },
+ "stage": "rain_ep_layer_state_s1",
+ "status": "positive_single_seed_development_not_confirmation",
+ "stronger_ratio_boundary": {
+ "r0p1": {
+ "constant": {
+ "all_finite": true,
+ "epochs_completed": 3,
+ "final_test_accuracy": 0.0985
+ },
+ "innovation": {
+ "all_finite": true,
+ "epochs_completed": 3,
+ "final_test_accuracy": 0.0975
+ }
+ },
+ "r4": {
+ "constant": {
+ "all_finite": false,
+ "epochs_completed": 1,
+ "final_test_accuracy": 0.1
+ },
+ "innovation": {
+ "all_finite": false,
+ "epochs_completed": 1,
+ "final_test_accuracy": 0.1
+ }
+ }
+ },
+ "test_policy": "development test subset observed each epoch; ratio chosen here; all accuracy claims require a new frozen confirmation"
+}