- NengoLoihi
- Examples
- Communication channel
- Integrator
- Multidimensional integrator
- Simple oscillator
- Nonlinear oscillator
- Neuron to neuron connections
- PES learning
- Keyword spotting
- MNIST convolutional network
- CIFAR-10 convolutional network
- Converting a Keras model to an SNN on Loihi
- Nonlinear adaptive control
- Legendre Memory Units on Loihi
- DVS from file
- Requirements
- License
- Examples
- How to Build a Brain
- NengoCore
- Ablating neurons
- Deep learning
Integrator¶
This demo implements a one-dimensional neural integrator.
This example utilizes a recurrent network. It shows how neurons can be used to implement stable dynamics. Such dynamics are important for memory, noise cleanup, statistical inference, and many other dynamic transformations.
[1]:
import matplotlib.pyplot as plt
%matplotlib inline
import nengo
from nengo.processes import Piecewise
import nengo_loihi
nengo_loihi.set_defaults()
Creating the network in Nengo¶
Our model consists of one recurrently connected ensemble, and an input node. The input node will provide a piecewise step function as input so that we can see the effects of recurrence.
[2]:
with nengo.Network(label="Integrator") as model:
ens = nengo.Ensemble(n_neurons=120, dimensions=1)
stim = nengo.Node(Piecewise({0: 0, 0.2: 1, 1: 0, 2: -2, 3: 0, 4: 1, 5: 0}))
# Connect the population to itself
tau = 0.1
nengo.Connection(ens, ens, transform=[[1]], synapse=tau)
nengo.Connection(stim, ens, transform=[[tau]], synapse=tau)
# Collect data for plotting
stim_probe = nengo.Probe(stim)
ens_probe = nengo.Probe(ens, synapse=0.01)
Running the network in Nengo¶
We can use Nengo to see the desired model output.
[3]:
with nengo.Simulator(model) as sim:
sim.run(6)
t = sim.trange()
0%
0%
[4]:
def plot_decoded(t, data):
plt.figure()
plt.plot(t, data[stim_probe], label="Input")
plt.plot(t, data[ens_probe], "k", label="Integrator output")
plt.legend()
plot_decoded(t, sim.data)
Running the network with NengoLoihi¶
[5]:
with nengo_loihi.Simulator(model) as sim:
sim.run(6)
t = sim.trange()
/home/tbekolay/Code/nengo-loihi/nengo_loihi/builder/discretize.py:481: UserWarning: Lost 2 extra bits in weight rounding
warnings.warn("Lost %d extra bits in weight rounding" % (-s2,))
[6]:
plot_decoded(t, sim.data)
The network integrates its input, but without input decays quicker than the Nengo model. Likely the same workarounds discussed in the communication channel example will be useful here.