def update(self, x): # update the hidden and output state dhdt = -self.h + bm.dot(x, self.w_ir) dhdt += bm.dot(self.r, self.w_rr) dhdt += bm.dot(self.o, self.w_or) self.h += self.dt / self.tau * dhdt self.r.value = bm.tanh(self.h) self.o.value = bm.dot(self.r, self.w_ro)
def rls(self, target): # update the inverse correlation matrix k = bm.expand_dims(bm.dot(self.P, self.r), axis=1) # (num_hidden, 1) hPh = bm.dot(self.r.T, k) # (1,) c = 1.0 / (1.0 + hPh) # (1,) self.P -= bm.dot(k * c, k.T) # (num_hidden, num_hidden) # update the output weights e = bm.atleast_2d(self.o - target) # (1, num_output) dw = bm.dot(-c * k, e) # (num_hidden, num_output) self.w_ro += dw
def derivative(self, u, t, Iext): r1 = bm.square(u) r2 = 1.0 + self.k * bm.sum(r1) r = r1 / r2 Irec = bm.dot(self.conn_mat, r) du = (-u + Irec + Iext) / self.tau return du
def update(self, _t, _dt): r1 = bm.square(self.u) r2 = 1.0 + self.k * bm.sum(r1) self.r.value = r1 / r2 Irec = bm.dot(self.conn_mat, self.r) self.u.value = self.u + (-self.u + Irec + self.input) / self.tau * _dt self.input[:] = 0.
def update(self, _t, _dt): self.pre_spike.push(self.pre.spike) pre_spike = self.pre_spike.pull() self.s.value, self.x.value = self.integral(self.s, self.x, _t) self.x += pre_spike.reshape((-1, 1)) g_inf = 1 / (1 + self.cc_Mg * bm.exp(-0.062 * self.post.V) / 3.57) Iext = bm.dot(self.pre_one, self.s) * (self.post.V - self.E) * g_inf self.post.input += Iext * self.g_max
def __init__(self, num_input, num_hidden, num_output, tau=1.0, dt=0.1, g=1.8, alpha=1.0, **kwargs): super(EchoStateNet, self).__init__(**kwargs) # parameters self.num_input = num_input self.num_hidden = num_hidden self.num_output = num_output self.tau = tau self.dt = dt self.g = g self.alpha = alpha # weights self.w_ir = bm.random.normal(size=(num_input, num_hidden)) / bm.sqrt(num_input) self.w_rr = g * bm.random.normal( size=(num_hidden, num_hidden)) / bm.sqrt(num_hidden) self.w_or = bm.random.normal(size=(num_output, num_hidden)) w_ro = bm.random.normal(size=(num_hidden, num_output)) / bm.sqrt(num_hidden) self.w_ro = bm.Variable(w_ro) # variables self.h = bm.Variable(bm.random.normal(size=num_hidden) * 0.5) # hidden self.r = bm.Variable(bm.tanh(self.h)) # firing rate self.o = bm.Variable(bm.dot(self.r, w_ro)) # output unit self.P = bm.Variable(bm.eye(num_hidden) * self.alpha) # inverse correlation matrix