{
  "noiseLevels": [
    0.0,
    0.1,
    0.2,
    0.3,
    0.4,
    0.5
  ],
  "shifts": [
    0,
    1,
    2,
    3,
    4
  ],
  "epochs": 4,
  "trainSize": 60000,
  "testSize": 10000,
  "models": [
    {
      "id": "gpu_mlp",
      "accuracy": 0.9698,
      "sizeKB": 919,
      "onnxAgreement": 100,
      "params": 235146,
      "history": [
        {
          "epoch": 1,
          "trainLoss": 0.3599,
          "testAccuracy": 0.9485
        },
        {
          "epoch": 2,
          "trainLoss": 0.1428,
          "testAccuracy": 0.9645
        },
        {
          "epoch": 3,
          "trainLoss": 0.0986,
          "testAccuracy": 0.9686
        },
        {
          "epoch": 4,
          "trainLoss": 0.0808,
          "testAccuracy": 0.9698
        }
      ],
      "ops": {
        "multiplies": 234752,
        "bitOps": 0,
        "lookups": 0,
        "events": 0,
        "note": "Dense multiply-accumulates (MACs)"
      },
      "confusion": [
        [
          967,
          0,
          1,
          3,
          1,
          3,
          2,
          2,
          1,
          0
        ],
        [
          0,
          1121,
          2,
          1,
          0,
          1,
          5,
          1,
          4,
          0
        ],
        [
          5,
          2,
          1002,
          5,
          3,
          0,
          2,
          8,
          5,
          0
        ],
        [
          1,
          0,
          4,
          987,
          0,
          2,
          0,
          8,
          5,
          3
        ],
        [
          1,
          0,
          5,
          0,
          955,
          1,
          5,
          1,
          2,
          12
        ],
        [
          3,
          1,
          0,
          11,
          1,
          854,
          9,
          0,
          7,
          6
        ],
        [
          8,
          3,
          0,
          0,
          4,
          7,
          931,
          0,
          5,
          0
        ],
        [
          0,
          8,
          10,
          5,
          0,
          1,
          0,
          992,
          2,
          10
        ],
        [
          4,
          1,
          3,
          10,
          3,
          5,
          5,
          5,
          934,
          4
        ],
        [
          5,
          4,
          1,
          8,
          18,
          3,
          0,
          7,
          8,
          955
        ]
      ],
      "robustness": {
        "noise": [
          0.9698,
          0.9555,
          0.8316,
          0.5883,
          0.4244,
          0.3055
        ],
        "shift": [
          0.9698,
          0.8648,
          0.4569,
          0.1779,
          0.0547
        ]
      },
      "statLabel": "Multiplications per digit",
      "statValue": "234,752"
    },
    {
      "id": "ca_grid",
      "accuracy": 0.9154,
      "sizeKB": 45,
      "onnxAgreement": 100,
      "params": 7744,
      "history": [
        {
          "epoch": 1,
          "trainLoss": 1.3934,
          "testAccuracy": 0.7803
        },
        {
          "epoch": 2,
          "trainLoss": 0.6418,
          "testAccuracy": 0.8686
        },
        {
          "epoch": 3,
          "trainLoss": 0.4563,
          "testAccuracy": 0.9044
        },
        {
          "epoch": 4,
          "trainLoss": 0.4013,
          "testAccuracy": 0.9154
        }
      ],
      "ops": {
        "multiplies": 60211200,
        "perCell": 76800,
        "bitOps": 0,
        "lookups": 0,
        "events": 0,
        "note": "MACs, all local: each cell reads only its 8 neighbors"
      },
      "confusion": [
        [
          902,
          4,
          18,
          0,
          5,
          16,
          18,
          1,
          8,
          8
        ],
        [
          2,
          1103,
          6,
          0,
          4,
          2,
          12,
          3,
          3,
          0
        ],
        [
          5,
          0,
          926,
          25,
          0,
          29,
          2,
          16,
          25,
          4
        ],
        [
          0,
          0,
          14,
          948,
          0,
          30,
          0,
          8,
          6,
          4
        ],
        [
          0,
          9,
          2,
          0,
          945,
          0,
          8,
          4,
          0,
          14
        ],
        [
          2,
          0,
          8,
          18,
          2,
          801,
          3,
          3,
          52,
          3
        ],
        [
          26,
          7,
          3,
          0,
          14,
          9,
          888,
          0,
          11,
          0
        ],
        [
          2,
          10,
          40,
          9,
          7,
          5,
          0,
          917,
          1,
          37
        ],
        [
          48,
          1,
          10,
          16,
          15,
          22,
          3,
          10,
          819,
          30
        ],
        [
          18,
          10,
          2,
          9,
          9,
          9,
          2,
          29,
          16,
          905
        ]
      ],
      "robustness": {
        "noise": [
          0.9154,
          0.3193,
          0.1021,
          0.1166,
          0.1094,
          0.1025
        ],
        "shift": [
          0.9154,
          0.8932,
          0.7934,
          0.6335,
          0.5203
        ]
      },
      "statLabel": "Multiplications per cell (all local)",
      "statValue": "76,800"
    },
    {
      "id": "binary_net",
      "accuracy": 0.9263,
      "sizeKB": 2631,
      "onnxAgreement": 100,
      "params": 672808,
      "history": [
        {
          "epoch": 1,
          "trainLoss": 0.6492,
          "testAccuracy": 0.9005
        },
        {
          "epoch": 2,
          "trainLoss": 0.4454,
          "testAccuracy": 0.9118
        },
        {
          "epoch": 3,
          "trainLoss": 0.3812,
          "testAccuracy": 0.9206
        },
        {
          "epoch": 4,
          "trainLoss": 0.3483,
          "testAccuracy": 0.9263
        }
      ],
      "ops": {
        "multiplies": 0,
        "bitOps": 668672,
        "lookups": 0,
        "events": 0,
        "weightBits": 668672,
        "note": "XNOR + popcount; BatchNorm folds into thresholds"
      },
      "confusion": [
        [
          957,
          0,
          2,
          2,
          1,
          7,
          6,
          2,
          2,
          1
        ],
        [
          0,
          1120,
          2,
          2,
          0,
          2,
          4,
          0,
          5,
          0
        ],
        [
          13,
          2,
          942,
          10,
          12,
          0,
          10,
          15,
          25,
          3
        ],
        [
          3,
          2,
          19,
          913,
          2,
          31,
          3,
          11,
          15,
          11
        ],
        [
          2,
          2,
          5,
          1,
          922,
          2,
          8,
          5,
          8,
          27
        ],
        [
          6,
          3,
          3,
          41,
          8,
          774,
          15,
          8,
          28,
          6
        ],
        [
          11,
          3,
          2,
          1,
          7,
          14,
          916,
          0,
          4,
          0
        ],
        [
          2,
          15,
          16,
          5,
          7,
          1,
          0,
          954,
          6,
          22
        ],
        [
          6,
          12,
          8,
          16,
          12,
          27,
          8,
          16,
          865,
          4
        ],
        [
          10,
          4,
          0,
          14,
          40,
          7,
          1,
          26,
          7,
          900
        ]
      ],
      "robustness": {
        "noise": [
          0.9263,
          0.9228,
          0.9161,
          0.78,
          0.5358,
          0.3887
        ],
        "shift": [
          0.9263,
          0.7498,
          0.3385,
          0.1078,
          0.0529
        ]
      },
      "statLabel": "Bit operations per digit",
      "statValue": "668,672",
      "weightKB": 81.6
    },
    {
      "id": "lookup_protos",
      "accuracy": 0.9455,
      "sizeKB": 1839,
      "onnxAgreement": 100,
      "params": 235200,
      "history": [],
      "ops": {
        "multiplies": 0,
        "bitOps": 0,
        "lookups": 1,
        "events": 0,
        "comparisons": 300,
        "note": "One nearest-match search over 300 stored digits"
      },
      "confusion": [
        [
          956,
          1,
          7,
          1,
          0,
          6,
          7,
          1,
          0,
          1
        ],
        [
          0,
          1126,
          2,
          0,
          1,
          0,
          5,
          0,
          0,
          1
        ],
        [
          8,
          4,
          976,
          8,
          3,
          1,
          2,
          7,
          21,
          2
        ],
        [
          0,
          3,
          4,
          945,
          2,
          20,
          0,
          12,
          19,
          5
        ],
        [
          1,
          8,
          4,
          1,
          902,
          0,
          8,
          7,
          2,
          49
        ],
        [
          3,
          3,
          0,
          22,
          2,
          838,
          8,
          2,
          9,
          5
        ],
        [
          8,
          3,
          2,
          0,
          4,
          4,
          932,
          1,
          3,
          1
        ],
        [
          1,
          17,
          10,
          2,
          5,
          1,
          0,
          956,
          3,
          33
        ],
        [
          6,
          1,
          3,
          24,
          4,
          23,
          3,
          6,
          902,
          2
        ],
        [
          6,
          4,
          3,
          11,
          25,
          7,
          1,
          23,
          7,
          922
        ]
      ],
      "robustness": {
        "noise": [
          0.9455,
          0.9449,
          0.9442,
          0.9386,
          0.9218,
          0.8778
        ],
        "shift": [
          0.9455,
          0.7564,
          0.3842,
          0.1889,
          0.0911
        ]
      },
      "statLabel": "Stored examples compared per digit",
      "statValue": "300"
    },
    {
      "id": "spiking_net",
      "accuracy": 0.9804,
      "sizeKB": 821,
      "onnxAgreement": 100,
      "params": 203530,
      "history": [
        {
          "epoch": 1,
          "trainLoss": 0.2201,
          "testAccuracy": 0.9612
        },
        {
          "epoch": 2,
          "trainLoss": 0.0781,
          "testAccuracy": 0.9758
        },
        {
          "epoch": 3,
          "trainLoss": 0.0407,
          "testAccuracy": 0.9778
        },
        {
          "epoch": 4,
          "trainLoss": 0.0256,
          "testAccuracy": 0.9804
        }
      ],
      "ops": {
        "multiplies": 200704,
        "bitOps": 0,
        "lookups": 0,
        "events": 4865,
        "hiddenSpikes": 485.0,
        "outputSpikes": 14.8,
        "steps": 12,
        "note": "Input layer is computed once; after that, work happens only when a neuron spikes"
      },
      "confusion": [
        [
          973,
          0,
          0,
          2,
          1,
          0,
          1,
          1,
          2,
          0
        ],
        [
          0,
          1123,
          3,
          1,
          0,
          1,
          2,
          1,
          4,
          0
        ],
        [
          4,
          1,
          1008,
          3,
          2,
          0,
          2,
          5,
          6,
          1
        ],
        [
          0,
          0,
          7,
          992,
          0,
          4,
          0,
          3,
          3,
          1
        ],
        [
          1,
          0,
          4,
          1,
          961,
          0,
          3,
          3,
          0,
          9
        ],
        [
          2,
          0,
          0,
          7,
          1,
          872,
          3,
          1,
          3,
          3
        ],
        [
          5,
          3,
          3,
          1,
          4,
          4,
          937,
          0,
          1,
          0
        ],
        [
          0,
          1,
          8,
          2,
          0,
          0,
          0,
          1008,
          2,
          7
        ],
        [
          4,
          0,
          4,
          7,
          3,
          2,
          1,
          2,
          948,
          3
        ],
        [
          2,
          2,
          0,
          5,
          7,
          2,
          0,
          6,
          3,
          982
        ]
      ],
      "robustness": {
        "noise": [
          0.9804,
          0.9706,
          0.854,
          0.6932,
          0.5899,
          0.5053
        ],
        "shift": [
          0.9804,
          0.9037,
          0.5513,
          0.2079,
          0.0741
        ]
      },
      "statLabel": "Average spikes per digit (energy is spent only on these)",
      "statValue": "500"
    }
  ]
}