55# %% [markdown]
66# Implementation of the paper:
77#
8- # - Sussillo, David, and Larry F. Abbott. "Generating coherent patterns of activity from chaotic neural networks." Neuron 63, no. 4 (2009): 544-557.
8+ # - Sussillo, David, and Larry F. Abbott. "Generating coherent patterns
9+ # of activity from chaotic neural networks."
10+ # Neuron 63, no. 4 (2009): 544-557.
911
1012# %%
1113import brainpy as bp
@@ -46,7 +48,7 @@ def __init__(self, num_input, num_hidden, num_output,
4648 self .w_rr = g * bm .random .normal (size = (num_hidden , num_hidden )) / bm .sqrt (num_hidden )
4749 self .w_or = bm .random .normal (size = (num_output , num_hidden ))
4850 w_ro = bm .random .normal (size = (num_hidden , num_output )) / bm .sqrt (num_hidden )
49- self .w_ro = bm .Variable (w_ro )
51+ self .w_ro = bm .Variable (w_ro ) # dynamically change this weight
5052
5153 # variables
5254 self .h = bm .Variable (bm .random .normal (size = num_hidden ) * 0.5 ) # hidden
@@ -62,6 +64,7 @@ def update(self, x):
6264 self .h += self .dt / self .tau * dhdt
6365 self .r .value = bm .tanh (self .h )
6466 self .o .value = bm .dot (self .r , self .w_ro )
67+ return self .r .value , self .o .value
6568
6669 def rls (self , target ):
6770 # update the inverse correlation matrix
@@ -75,17 +78,14 @@ def rls(self, target):
7578 self .w_ro += dw
7679
7780 def simulate (self , xs ):
78- f = bm .make_loop (self .update , dyn_vars = self .vars (), out_vars = [self .r , self .o ])
79- return f (xs )
81+ return bm .for_loop (self .update , dyn_vars = self .vars (), operands = xs )
8082
8183 def train (self , xs , targets ):
82- def _f (x ):
83- input , target = x
84- self .update (input )
84+ def _f (x , target ):
85+ r , o = self .update (x )
8586 self .rls (target )
86-
87- f = bm .make_loop (_f , dyn_vars = self .vars (), out_vars = [self .r , self .o ])
88- return f ([xs , targets ])
87+ return r , o
88+ return bm .for_loop (_f , dyn_vars = self .vars (), operands = [xs , targets ])
8989
9090
9191# %%
0 commit comments