threshold-mux8

8:1 multiplexer. Selects one of 8 data inputs based on 3-bit select signal.

Function

MUX8(d0-d7, s2,s1,s0) = d[s] where s = 4s2 + 2s1 + s0

Architecture

d0 d1 d2 d3 d4 d5 d6 d7   s2 s1 s0
 |  |  |  |  |  |  |  |    |  |  |
 +--+--+--+--+--+--+--+----+--+--+
 |                              |
 v                              v
[N0] d0 AND (s=000)  ----+
[N1] d1 AND (s=001)  ----|
[N2] d2 AND (s=010)  ----|
[N3] d3 AND (s=011)  ----+---> [OR] ---> output
[N4] d4 AND (s=100)  ----|
[N5] d5 AND (s=101)  ----|
[N6] d6 AND (s=110)  ----|
[N7] d7 AND (s=111)  ----+

Parameters

Inputs 11 (8 data + 3 select)
Outputs 1
Neurons 9
Layers 2
Parameters 105
Magnitude 61

Layer 1 Weights

Each neuron Ni fires when di=1 AND s=i:

Neuron Data weights Select weights (s2,s1,s0) Bias
N0 d0=1 [-1,-1,-1] -1
N1 d1=1 [-1,-1,+1] -2
N2 d2=1 [-1,+1,-1] -2
N3 d3=1 [-1,+1,+1] -3
N4 d4=1 [+1,-1,-1] -2
N5 d5=1 [+1,-1,+1] -3
N6 d6=1 [+1,+1,-1] -3
N7 d7=1 [+1,+1,+1] -4

Layer 2

OR gate: weights [1,1,1,1,1,1,1,1], bias -1

Usage

from safetensors.torch import load_file
import torch

w = load_file('model.safetensors')

def mux8(d0, d1, d2, d3, d4, d5, d6, d7, s2, s1, s0):
    inp = torch.tensor([float(d0), float(d1), float(d2), float(d3),
                        float(d4), float(d5), float(d6), float(d7),
                        float(s2), float(s1), float(s0)])
    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())

# Select d5 (s=101)
print(mux8(0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1))  # 1

License

MIT

Downloads last month
7
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Collection including phanerozoic/threshold-mux8