Skip to content

Instantly share code, notes, and snippets.

@Seanny123
Created May 6, 2016 23:02
Show Gist options
  • Save Seanny123/95770adce9a60bf02514a64877e338d3 to your computer and use it in GitHub Desktop.
Save Seanny123/95770adce9a60bf02514a64877e338d3 to your computer and use it in GitHub Desktop.
Terry's alternate reservoir computing implementation
class AltEcho(Network, Reservoir):
n_neurons = IntParam('n_neurons', default=None, low=1)
dimensions = IntParam('dimensions', default=None, low=1)
dt = NumberParam('dt', low=0, low_open=True)
recurrent_synapse = SynapseParam('recurrent_synapse')
gain = NumberParam('gain', low=0, low_open=True)
neuron_type = NeuronTypeParam('neuron_type')
def __init__(self, n_neurons, dimensions, recurrent_synapse=0.005,
readout_synapse=None, radii=1.0, gain=1.25, rng=None,
neuron_type=Tanh(), ens_seed=None,
label=None, seed=None, add_to_container=None, **ens_kwargs):
Network.__init__(self, label, seed, add_to_container)
self.n_neurons = n_neurons
self.dimensions = dimensions
self.recurrent_synapse = recurrent_synapse
self.radii = radii # TODO: make array or scalar parameter?
self.gain = gain
self.rng = np.random if rng is None else rng
self.neuron_type = neuron_type
self.W_in = (
self.rng.rand(self.n_neurons, self.dimensions) - 0.5) / self.radii
self.W_bias = self.rng.rand(self.n_neurons, 1) - 0.5
# got the following two lines from Terry
self.W = rng.uniform(-0.5, 0.5, size=(n_neurons, n_neurons))
self.W *= 1.0 / np.max(np.abs(np.linalg.eigvals(self.W)**2))
with self:
self.ensemble = nengo.Ensemble(
self.n_neurons, 1, neuron_type=self.neuron_type, seed=ens_seed,
**ens_kwargs)
self.input = nengo.Node(size_in=self.dimensions)
pool = self.ensemble.neurons
nengo.Connection(
self.input, pool, transform=self.W_in, synapse=None)
nengo.Connection( # note the bias will be active during training
nengo.Node(output=1, label="bias"), pool,
transform=self.W_bias, synapse=None)
nengo.Connection(
self.ensemble.neurons, pool, transform=self.W,
synapse=self.recurrent_synapse)
Reservoir.__init__(
self, self.input, pool, readout_synapse=readout_synapse,
network=self)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment