def make(net,name='System',neurons=100,A=[[0]],tau_feedback=0.1): A=numeric.array(A) assert len(A.shape)==2 assert A.shape[0]==A.shape[1] dimensions=A.shape[0] state=net.make(name,neurons,dimensions) Ap=A*tau_feedback+numeric.identity(dimensions) net.connect(state,state,transform=Ap,pstc=tau_feedback) if net.network.getMetaData("linear") == None: net.network.setMetaData("linear", HashMap()) linears = net.network.getMetaData("linear") linear=HashMap(4) linear.put("name", name) linear.put("neurons", neurons) linear.put("A", MU.clone(A)) linear.put("tau_feedback", tau_feedback) linears.put(name, linear) if net.network.getMetaData("templates") == None: net.network.setMetaData("templates", ArrayList()) templates = net.network.getMetaData("templates") templates.add(name) if net.network.getMetaData("templateProjections") == None: net.network.setMetaData("templateProjections", HashMap()) templateproj = net.network.getMetaData("templateProjections") templateproj.put(name, name)
def make(net, name='System', neurons=100, A=[[0]], tau_feedback=0.1): A = numeric.array(A) assert len(A.shape) == 2 assert A.shape[0] == A.shape[1] dimensions = A.shape[0] state = net.make(name, neurons, dimensions) Ap = A * tau_feedback + numeric.identity(dimensions) net.connect(state, state, transform=Ap, pstc=tau_feedback) if net.network.getMetaData("linear") == None: net.network.setMetaData("linear", HashMap()) linears = net.network.getMetaData("linear") linear = HashMap(4) linear.put("name", name) linear.put("neurons", neurons) linear.put("A", MU.clone(A)) linear.put("tau_feedback", tau_feedback) linears.put(name, linear) if net.network.getMetaData("templates") == None: net.network.setMetaData("templates", ArrayList()) templates = net.network.getMetaData("templates") templates.add(name) if net.network.getMetaData("templateProjections") == None: net.network.setMetaData("templateProjections", HashMap()) templateproj = net.network.getMetaData("templateProjections") templateproj.put(name, name)
def getValue(self): return MU.clone(self.matrix)
def make_convolution( self, name, A, B, C, N_per_D, quick=False, encoders=[[1, 1], [1, -1], [-1, 1], [-1, -1]], radius=3, pstc_out=0.01, pstc_in=0.01, pstc_gate=0.01, invert_first=False, invert_second=False, mode="default", output_scale=1, ): if isinstance(A, str): A = self.network.getNode(A) if isinstance(B, str): B = self.network.getNode(B) if isinstance(C, str): C = self.network.getNode(C) dimensions = C.dimension if (B is not None and B.dimension != dimensions) or (A is not None and A.dimension != dimensions): raise Exception("Dimensions not the same for convolution (%d,%d->%d)" % (A.dimension, B.dimension, C.dimension)) if mode == "direct": D = DirectConvolution(name, dimensions, invert_first, invert_second) self.add(D) D.getTermination("A").setTau(pstc_in) D.getTermination("B").setTau(pstc_in) D.getTermination("gate").setTau(pstc_gate) if A is not None: self.connect(A, D.getTermination("A")) if B is not None: self.connect(B, D.getTermination("B")) self.connect(D.getOrigin("C"), C, pstc=pstc_out, weight=output_scale) else: D = make_array(self, name, N_per_D, dimensions, quick=quick, encoders=encoders, radius=radius) A2 = input_transform(dimensions, True, invert_first) B2 = input_transform(dimensions, False, invert_second) D.addDecodedTermination("A", A2, pstc_in, False) D.addDecodedTermination("B", B2, pstc_in, False) if A is not None: self.connect(A, D.getTermination("A")) if B is not None: self.connect(B, D.getTermination("B")) ifftm2 = output_transform(dimensions) self.connect(D, C, func=product, transform=ifftm2 * output_scale, pstc=pstc_out) if self.network.getMetaData("convolution") == None: self.network.setMetaData("convolution", HashMap()) bindings = self.network.getMetaData("convolution") binding = HashMap(15) binding.put("name", name) if A is not None: binding.put("A", A.getName()) else: binding.put("A", None) if B is not None: binding.put("B", B.getName()) else: binding.put("B", None) binding.put("C", C.getName()) binding.put("N_per_D", N_per_D) binding.put("quick", quick) binding.put("encoders", MU.clone(encoders)) binding.put("radius", radius) binding.put("pstc_out", pstc_out) binding.put("pstc_in", pstc_in) binding.put("pstc_gate", pstc_gate) binding.put("invert_first", invert_first) binding.put("invert_second", invert_second) binding.put("mode", mode) binding.put("output_scale", output_scale) bindings.put(name, binding) if self.network.getMetaData("templates") == None: self.network.setMetaData("templates", ArrayList()) templates = self.network.getMetaData("templates") templates.add(name) if self.network.getMetaData("templateProjections") == None: self.network.setMetaData("templateProjections", HashMap()) templateproj = self.network.getMetaData("templateProjections") if A is not None: templateproj.put(name, A.getName()) if B is not None: templateproj.put(name, B.getName()) templateproj.put(name, C.getName()) return D
def getValue(self): return MU.clone(self.matrix)
def make_convolution(self, name, A, B, C, N_per_D, quick=False, encoders=[[1, 1], [1, -1], [-1, 1], [-1, -1]], radius=3, pstc_out=0.01, pstc_in=0.01, pstc_gate=0.01, invert_first=False, invert_second=False, mode='default', output_scale=1): if isinstance(A, str): A = self.network.getNode(A) if isinstance(B, str): B = self.network.getNode(B) if isinstance(C, str): C = self.network.getNode(C) dimensions = C.dimension if (B is not None and B.dimension != dimensions) or (A is not None and A.dimension != dimensions): raise Exception('Dimensions not the same for convolution (%d,%d->%d)' % (A.dimension, B.dimension, C.dimension)) if mode == 'direct': D = DirectConvolution(name, dimensions, invert_first, invert_second) self.add(D) D.getTermination('A').setTau(pstc_in) D.getTermination('B').setTau(pstc_in) D.getTermination('gate').setTau(pstc_gate) if A is not None: self.connect(A, D.getTermination('A')) if B is not None: self.connect(B, D.getTermination('B')) self.connect(D.getOrigin('C'), C, pstc=pstc_out, weight=output_scale) else: D = make_array(self, name, N_per_D, dimensions, quick=quick, encoders=encoders, radius=radius) A2 = input_transform(dimensions, True, invert_first) B2 = input_transform(dimensions, False, invert_second) D.addDecodedTermination('A', A2, pstc_in, False) D.addDecodedTermination('B', B2, pstc_in, False) if A is not None: self.connect(A, D.getTermination('A')) if B is not None: self.connect(B, D.getTermination('B')) ifftm2 = output_transform(dimensions) self.connect(D, C, func=product, transform=ifftm2 * output_scale, pstc=pstc_out) if self.network.getMetaData("convolution") == None: self.network.setMetaData("convolution", HashMap()) bindings = self.network.getMetaData("convolution") binding = HashMap(15) binding.put("name", name) if A is not None: binding.put("A", A.getName()) else: binding.put("A", None) if B is not None: binding.put("B", B.getName()) else: binding.put("B", None) binding.put("C", C.getName()) binding.put("N_per_D", N_per_D) binding.put("quick", quick) binding.put("encoders", MU.clone(encoders)) binding.put("radius", radius) binding.put("pstc_out", pstc_out) binding.put("pstc_in", pstc_in) binding.put("pstc_gate", pstc_gate) binding.put("invert_first", invert_first) binding.put("invert_second", invert_second) binding.put("mode", mode) binding.put("output_scale", output_scale) bindings.put(name, binding) if self.network.getMetaData("templates") == None: self.network.setMetaData("templates", ArrayList()) templates = self.network.getMetaData("templates") templates.add(name) if self.network.getMetaData("templateProjections") == None: self.network.setMetaData("templateProjections", HashMap()) templateproj = self.network.getMetaData("templateProjections") if A is not None: templateproj.put(name, A.getName()) if B is not None: templateproj.put(name, B.getName()) templateproj.put(name, C.getName()) return D