This looks like expected behaviour to me. By ‘exploding’ do you mean those two time-steps where it outputs 2 spikes rather than 1 spike during those time-steps? Assuming you are using a
1ms, given a Poisson distribution with a rate of 50 Hz, this is roughly what one would expect. Specifically, across 2,000 time-steps you would expect ~95 of those steps to contain one spike, ~2 of those steps to contain two spikes, and overall 40x as many steps will contain one spike versus two spikes. (*)
This may be confusing as you are basing the Poisson neuron on the response curve of a
LIFRate neuron with a refractory period of 2 ms.
LIFRate(tau_ref=0.002) cannot spike more than once in a single millisecond, but when you convert it to Poisson you lose the dynamics of that refractory since a Poisson process does not have a refractory period. Nevertheless, you keep the same response curve, and all this means is that occasionally the neuron spikes more than once in a one millisecond window.
(*) See code checking this mathematically, below:
def pdf(lmbda, k):
"""Probability density function for a Poisson distribution."""
return lmbda ** k * np.exp(-lmbda) / scipy.special.factorial(k)
dt = 0.001
rate = 50
one_spike = pdf(rate * dt, k=1)
two_spike = pdf(rate * dt, k=2)
n_steps = 2000
print(one_spike * n_steps)
print(two_spike * n_steps)
print(one_spike / two_spike)