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
Пример #3
0
 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
Пример #4
0
 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.
Пример #5
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