Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
 def getValue(self):
     return MU.clone(self.matrix)
Exemplo n.º 4
0
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
Exemplo n.º 5
0
 def getValue(self):
     return MU.clone(self.matrix)
Exemplo n.º 6
0
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