예제 #1
0
    def test_connection(self):
        n1=nef.ScalarNode(noise=0)
        n2=nef.ScalarNode(noise=0)
        n1.connect(n2)
        n1.set(0.3)
        n1.tick()
        n1.tick()
        self.assertEqual(n2.value(),0.3)
        n1.set(-0.7)
        n1.tick()
        n1.tick()
        self.assertEqual(n2.value(),-0.7)

        n1=nef.VectorNode(2,noise=0)
        n2=nef.VectorNode(2,noise=0)
        n1.connect(n2,weight=0.1)
        n1.set([0.3,-0.7])
        n1.tick()
        n1.tick()
        self.assertAlmostEqual(n2.value()[0],0.03)
        self.assertAlmostEqual(n2.value()[1],-0.07)

        n1=nef.VectorNode(2,noise=0)
        n2=nef.VectorNode(2,noise=0)
        n1.connect(n2,weight=numpy.array([[0,1],[1,0]]))
        n1.set([0.3,-0.7])
        n1.tick()
        n1.tick()
        self.assertEqual(n2.value()[0],-0.7)
        self.assertEqual(n2.value()[1],0.3)
예제 #2
0
    def test_connection(self):
        modes = ['direct', 'rate']
        for m1 in modes:
            for m2 in modes:
                #print m1,m2
                n1 = nef.ScalarNode()
                if m1 == 'rate':
                    n1.configure(neurons=150, activation_noise=0.01)
                n2 = nef.ScalarNode()
                if m2 == 'rate':
                    n2.configure(neurons=150, activation_noise=0.01)
                n1.connect(n2)
                n1.set(0.3)
                n1.tick()
                n1.tick()
                #print 0.3,n2.value()
                self.assertAlmostEqual(n2.value(), 0.3, 1)
                n1.set(-0.7)
                n2.tick()
                n2.tick()
                #print -0.7,n2.value()
                self.assertAlmostEqual(n2.value(), -0.7, 1)

                n1 = nef.VectorNode(2, noise=0)
                if m1 == 'rate':
                    n1.configure(neurons=300,
                                 activation_noise=0.01,
                                 basis_style='Aligned')
                n2 = nef.VectorNode(2, noise=0, min=-0.5, max=0.5)
                if m2 == 'rate':
                    n2.configure(neurons=300,
                                 activation_noise=0.01,
                                 basis_style='Aligned')
                n1.connect(n2, weight=0.5)
                n1.set([0.3, -0.7])
                n2.tick()
                n2.tick()
                #print [0.15,-0.35],n2.value()
                self.assertAlmostEqual(n2.value()[0], 0.15, 2)
                self.assertAlmostEqual(n2.value()[1], -0.35, 2)

                n1 = nef.VectorNode(2, noise=0)
                if m1 == 'rate':
                    n1.configure(neurons=300,
                                 activation_noise=0.01,
                                 basis_style='Aligned')
                n2 = nef.VectorNode(2, noise=0)
                if m2 == 'rate':
                    n2.configure(neurons=300,
                                 activation_noise=0.01,
                                 basis_style='Aligned')
                n1.connect(n2, weight=numpy.array([[0, 1], [1, 0]]))
                n1.set([0.3, -0.7])
                n1.tick()
                n1.tick()
                #print [-0.7,0.3],n2.value()
                self.assertAlmostEqual(n2.value()[0], -0.7, 1)
                self.assertAlmostEqual(n2.value()[1], 0.3, 1)
예제 #3
0
    def test_aligned(self):
        n = nef.VectorNode(10)
        n.configure(neurons=20, basis_style='Aligned')
        for b in n.basis:
            self.assertEqual(numpy.abs(b).max(), 1)
            self.assertAlmostEqual(numpy.linalg.norm(b), 1, 5)

        n = nef.VectorNode(10)
        n.configure(neurons=20, basis_style='Sphere')
        for b in n.basis:
            self.assertNotEqual(numpy.abs(b).max(), 1)
            self.assertAlmostEqual(numpy.linalg.norm(b), 1, 5)
예제 #4
0
 def _test_spike_connect_s_d(self):
     n=nef.VectorNode(2)
     n.configure(neurons=20,apply_noise=False)
     n.configure_spikes(pstc=0.06)
     n2=nef.VectorNode(2)
     n.set([-0.9,0.2])
     n.connect(n2)
     
     N=2000
     v=0
     for i in range(N):
         n.tick()
         v+=n.value()
         #if i%100==99: print (i+1),v/(i+1),n2.value()
     self.assertAlmostEqual(v[0]/N,n2.value()[0],1)
     self.assertAlmostEqual(v[1]/N,n2.value()[1],1)
예제 #5
0
 def _test_spike_represent(self):
     n=nef.VectorNode(2)
     n.configure(neurons=20,apply_noise=False)
     n.configure_spikes()
     n2=nef.VectorNode(2)
     n2.configure(neurons=20,apply_noise=False)
     n.set([-0.1,0.8])
     n2.set([-0.1,0.8])
     
     v=0
     for i in range(1000):
         n.tick()
         n2.tick()
         v+=n.value()
         #if i%100==99: print (i+1),v/(i+1),n2.value()
     self.assertAlmostEqual(v[0]/1000,n2.value()[0],1)
     self.assertAlmostEqual(v[1]/1000,n2.value()[1],1)
예제 #6
0
    def test_highdim(self):
        D = 50
        N = 100
        n1 = nef.VectorNode(D)
        n1.configure(neurons=N, code='n1', use_hd=True, apply_noise=False)

        n2 = nef.VectorNode(D)
        n2.configure(neurons=N, code='n2', use_hd=False, apply_noise=False)

        for x in [[0, 0, 0], [0, 0, 1], [0.5, 0.5, 0.5]]:
            if len(x) < D:
                x.extend([0.0] * (D - len(x)))
            print(x)
            n1.set(x)
            n1.tick()
            print((1, n1.value()))

            n2.set(x)
            n2.tick()
            print((2, n2.value()))
예제 #7
0
 def test_collection(self):
     n=nef.CollectionNode(nef.ScalarNode(),nef.VectorNode(3),nef.ScalarNode(),noise=0)
     v1=[0.3,[0.2,0.1,-0.5],-1.0]
     n.set(v1)
     n.tick()
     v2=n.value()
     self.assertEqual(v1[0],v2[0])
     self.assertEqual(v1[1][0],v2[1][0])
     self.assertEqual(v1[1][1],v2[1][1])
     self.assertEqual(v1[1][2],v2[1][2])
     self.assertEqual(v1[2],v2[2])
예제 #8
0
    def test_representation(self):
        n1 = nef.ScalarNode()
        n1.configure(neurons=150, activation_noise=0.01)
        n1.set(0.3)
        n1.tick()
        self.assertAlmostEqual(n1.value(), 0.3, 2)

        n2 = nef.VectorNode(2)
        n2.configure(neurons=200, activation_noise=0)
        n2.set([0.3, -0.5])
        n2.tick()
        self.assertAlmostEqual(n2.value()[0], 0.3, 1)
        self.assertAlmostEqual(n2.value()[1], -0.5, 1)
예제 #9
0
    def test_add(self):
        samples = None
        a = nef.ScalarNode()
        b = nef.ScalarNode()
        c = nef.ScalarNode()
        a.configure(neurons=150,
                    activation_noise=0.1,
                    apply_noise=False,
                    sample_count=samples)
        b.configure(neurons=150,
                    activation_noise=0.1,
                    apply_noise=False,
                    sample_count=samples)
        c.configure(neurons=150,
                    activation_noise=0.1,
                    apply_noise=False,
                    sample_count=samples)

        a.connect(c)
        b.connect(c)

        ab = nef.VectorNode(2)
        a.connect(ab, weight=numpy.array([1, 0]))
        b.connect(ab, weight=numpy.array([0, 1]))
        ab.configure(neurons=300,
                     activation_noise=0.1,
                     apply_noise=False,
                     sample_count=samples)

        c2 = nef.ScalarNode()
        c2.configure(neurons=150,
                     activation_noise=0.1,
                     apply_noise=False,
                     sample_count=samples)
        ab.connect(c2, func=lambda x: x[0] + x[1])

        n = [-0.4, -0.3, -0.1, 0, 0.1, 0.3, 0.4]
        for x in n:
            for y in n:
                a.set(x)
                b.set(y)
                c.tick()
                c.tick()
                c.tick()
                self.assertAlmostEqual(x + y, c.value(), 1)
                self.assertAlmostEqual(x + y, c2.value(), 1)
예제 #10
0
D1 = 5
D2 = 5
D3 = 5
pstc = 0.01
dt = 0.001

A = [nef.ScalarNode() for i in range(D1 * D2)]
B = [nef.ScalarNode() for i in range(D2 * D3)]
for n in A + B:
    n.configure(neurons=50)
    n.configure_spikes(pstc=pstc, dt=dt)

# the C matrix holds the intermediate product calculations
#  need to compute D1*D2*D3 products to multiply 2 matrices together

C = [nef.VectorNode(2) for i in range(D1 * D2 * D3)]
for n in C:
    n.configure(neurons=200)
    n.configure_spikes(pstc=pstc, dt=dt)

# determine the transformation matrices to get the correct pairwise
#  products computed.  This looks a bit like black magic but if
#  you manually try multiplying two matrices together, you can see
#  the underlying pattern.  Basically, we need to build up D1*D2*D3
#  pairs of numbers in C to compute the product of.  If i,j,k are the
#  indexes into the D1*D2*D3 products, we want to compute the product
#  of element (i,j) in A with the element (j,k) in B.  The index in
#  A of (i,j) is j+i*D2 and the index in B of (j,k) is k+j*D3.
for i in range(D1):
    for j in range(D2):
        for k in range(D3):