I was wondering if there is a way to generate spikes without using current as input.
In this scenario, I would like to give only the time of spiking to each neuron in an ensemble, and it should spike at that time.
I would not work with the spiking rate or input currents and just give the spike timings as an array, and the neuron should produce spikes at that time instants. Is it possible to implement this with nengo?
In Nengo, the behaviour of the neurons are dependent on the current input to the neuron. If you want to “reproduce” spikes, I think your best bet will be to use a nengo.Node to output spikes, instead of trying to force the neurons in an ensemble to generate spikes.
To get a node to produce spikes, you just need to define a node function that produces a 1/dt value whenever you want a spike to be produced.
Here is some code that would produce spikes in a node:
def spike_func(t, spikes=spikes, dt=dt):
# Compute index for spikes array
ind = int(t / dt) % spikes.shape[1]
# Note that spikes have an amplitude of 1/dt
return spikes[:, ind] * (1 / dt)
with nengo.Network() as model:
# Use a node to output spikes
spike_node = nengo.Node(spike_func)
And here is a full test script demonstrating the Nengo node spike generation function: test_node_spike.py (1.5 KB)
Ah! I see. If you look at this forum post, in my example.py file, there is example of how to connect the output of a nengo.Node to drive an ensemble to spike at a certain time. However, this approach still is essentially providing an input current to the neurons to drive them to spike. There is currently no way to do otherwise (i.e., making a neuron spike without changing the input current to the neuron) in Nengo.