Hi,
I’ve been trying to run a network using Nengo Loihi and have had a hard time conceptualizing where the various restrictions have come from, specifically the IN_AXONS_MAX and MAX_SYNAPSE_BITS. So, a couple questions based on the below code:
-
I would think that given an input size and a number of neurons, the number of input axons would be n_reservoir_neurons + input_size. However, it seems that in Nengo Loihi, the calculation is (2*input_size + n_reservoir_neurons), which causes a 1000 neuron, 1600 input size to crash with:
nengo.exceptions.BuildError: Input axons (4200) exceeded max (4096).
Where do the extra axons come from? -
The total number of synapses also doesn’t make sense to me. The below network seems like maximum number of synapses should be n_reservoir_neurons2 , which should be well below the ~1 million total number of synapses for a Loihi core. However for a 200 input, 200 neuron network, the program crashes with:
nengo.exceptions.BuildError: Total synapse bits (1881600) exceeded max (1048576)
Why does this break the synapses limit?
Help appreciated! Right now it seems like I have to shrink each ensemble to minuscule sizes to make networks run.
neuron_type= nengo.LIF()
gain = nengo.dists.Uniform(.05, .05)
bias = nengo.dists.Uniform(0, 0)
n_reservoir_neurons = 1000
input_size = 1600
im1 = np.random.rand(input_size)
U = np.random.rand(n_reservoir_neurons, input_size)
J = np.random.rand(n_reservoir_neurons, n_reservoir_neurons)
with nengo.Network() as model:
# link the input
f_in = nengo.Node(im1, size_out=input_size)
# create reservoir neurons
A = nengo.Ensemble(n_neurons=n_reservoir_neurons, dimensions=1, neuron_type=neuron_type, gain=gain, bias=bias)
# feedforward input connections
nengo.Connection(f_in, A.neurons, synapse=None, transform=U)
# recurrent fast connections
nengo.Connection(A.neurons, A.neurons, transform=J, synapse=.005)
with nengo_loihi.Simulator(model,progress_bar=False, target='sim', dt=.001) as sim:
sim.run(1)