--- license: mit tags: - pytorch - safetensors - threshold-logic - neuromorphic --- # threshold-exactly2outof4 Exactly 2 of 4 inputs high. ## Function exactly2outof4(a, b, c, d) = 1 if (a + b + c + d) == 2, else 0 ## Truth Table | a | b | c | d | sum | out | |---|---|---|---|-----|-----| | 0 | 0 | 0 | 0 | 0 | 0 | | 0 | 0 | 0 | 1 | 1 | 0 | | 0 | 0 | 1 | 1 | 2 | 1 | | 0 | 1 | 0 | 1 | 2 | 1 | | 1 | 0 | 0 | 1 | 2 | 1 | | 0 | 1 | 1 | 0 | 2 | 1 | | 1 | 0 | 1 | 0 | 2 | 1 | | 1 | 1 | 0 | 0 | 2 | 1 | | 0 | 1 | 1 | 1 | 3 | 0 | | 1 | 1 | 1 | 1 | 4 | 0 | ## Architecture ``` Layer 1: N1: [1,1,1,1] b=-2 (fires when sum >= 2) N2: [-1,-1,-1,-1] b=2 (fires when sum <= 2) Layer 2: AND: [1,1] b=-2 (fires when both N1 and N2 fire) ``` ## Parameters | | | |---|---| | Inputs | 4 | | Outputs | 1 | | Neurons | 3 | | Layers | 2 | | Parameters | 13 | | Magnitude | 16 | ## Usage ```python from safetensors.torch import load_file import torch w = load_file('model.safetensors') def exactly2of4(a, b, c, d): inp = torch.tensor([float(a), float(b), float(c), float(d)]) l1 = (inp @ w['layer1.weight'].T + w['layer1.bias'] >= 0).float() out = (l1 @ w['layer2.weight'].T + w['layer2.bias'] >= 0).float() return int(out.item()) print(exactly2of4(0, 0, 1, 1)) # 1 print(exactly2of4(0, 1, 1, 1)) # 0 ``` ## License MIT