def test_spike_integrator(self):
        n1 = nef.ScalarNode()
        n1.configure(neurons=30, t_ref=0.002, t_rc=0.02)
        n1.configure_spikes(pstc=0.02, dt=0.001)
        n2 = nef.ScalarNode()

        n0 = nef.ScalarNode()
        n0.connect(n1, weight=0.02 * 3.1415 * 2)

        n1.connect(n1)
        n1.connect(n2)

        t = numpy.arange(1000) * n1.dt
        input = numpy.cos(3.1415 * t * 2)
        vv = []
        for i in xrange(1000):
            n0.set(input[i])
            n1.tick()
            vv.append(n2.value())
            #if i%50==0: print i,n1.value(),n2.value()

        self.assertTrue(vv[250] > 0.8)
        self.assertTrue(abs(vv[500]) < 0.2)
        self.assertTrue(vv[750] < -0.8)
        self.assertTrue(abs(vv[999]) < 0.2)

        import pylab
        pylab.plot(t, vv)
        pylab.plot(t, input)
        pylab.show()
Esempio n. 2
0
    def test_linear_weights(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)

        for w in [-1, -10, 0, 0.5, 0.2]:
            n1 = nef.ScalarNode(noise=0)
            n2 = nef.ScalarNode(noise=0)
            n1.connect(n2, weight=w)
            n1.set(0.3)
            n1.tick()
            n1.tick()
            self.assertEqual(n2.value(), 0.3 * w)
            n1.set(-0.7)
            n1.tick()
            n1.tick()
            self.assertEqual(n2.value(), -0.7 * w)
Esempio n. 3
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)
Esempio n. 4
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)
Esempio n. 5
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])
Esempio n. 6
0
 def test_linear_weights_n(self):
     n1 = nef.ScalarNode()
     n1.configure(neurons=200, activation_noise=0.01)
     n2 = nef.ScalarNode()
     n1.configure(neurons=200, activation_noise=0.01)
     n1.connect(n2)
     n1.set(0.3)
     n1.tick()
     n1.tick()
     self.assertAlmostEqual(n2.value(), 0.3, 1)
     n1.set(-0.7)
     n1.tick()
     n1.tick()
     self.assertAlmostEqual(n2.value(), -0.7, 1)
Esempio n. 7
0
    def test_many_connections1(self):
        out = nef.ScalarNode(noise=0)
        N = 10
        n = [nef.ScalarNode(noise=0) for i in range(N)]
        for i in range(N):
            n[i].configure(neurons=150, activation_noise=0.01)
            if i + 1 < N:
                n[i].connect(n[i + 1])
            n[i].connect(out)
        n[0].set(1)

        out.tick()
        for i in range(N):
            out.tick()
            self.assertAlmostEqual(out.value(), i + 1, 0)
        out.tick()
        self.assertAlmostEqual(out.value(), N, 0)
Esempio n. 8
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)
Esempio n. 9
0
    def _test_spike_connect_d_s_d(self):
        a=nef.ScalarNode(noise=0)
        b=nef.ScalarNode()
        c=nef.ScalarNode(noise=0)
        
        b.configure(neurons=30,apply_noise=False)
        b.configure_spikes(pstc=0.03)
        
        a.set(-0.3)
        a.connect(b)
        b.connect(c)

        N=2000
        for i in range(N):
            b.tick()
            if i%100==99: print (i+1),c.value()
        self.assertAlmostEqual(a.value(),c.value(),1)
        self.assertAlmostEqual(a.value(),c.value(),1)
Esempio n. 10
0
    def test_accuracy(self):
        n = nef.ScalarNode(noise=0)
        n.configure(neurons=150, activation_noise=0.01, apply_noise=False)

        vals = numpy.arange(30) / 15.0 - 1
        for v in vals:
            n.set(v)
            n.tick()
            #print v,n.value()
            self.assertAlmostEqual(n.value(), v, 1)
Esempio n. 11
0
    def test_many_connections2(self):
        out = nef.ScalarNode(noise=0)
        out.configure(neurons=150, activation_noise=0.1, apply_noise=False)
        N = 10
        n = [nef.ScalarNode(noise=0) for i in range(N)]
        for i in range(N):
            n[i].configure(neurons=150,
                           activation_noise=0.1,
                           apply_noise=False)
            if i + 1 < N:
                n[i].connect(n[i + 1])
            n[i].connect(out, weight=1.0 / N)
        n[0].set(1)

        out.tick()
        for i in range(N):
            out.tick()
            self.assertAlmostEqual(out.value() * N, i + 1, 0)
        out.tick()
        self.assertAlmostEqual(out.value() * N, N, 0)
Esempio n. 12
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)
Esempio n. 13
0
 def _test_spike_rate(self):
     n=nef.ScalarNode()
     n.configure(neurons=1,t_ref=0.002,t_rc=0.02)
     n.alpha[:]=3.34179049952
     n.Jbias[:]=1.46335060944
     n.basis[:]=1
     n.configure_spikes()
     
     n.set(1)
     total=0
     for i in range(10000):
         n.tick()
         if n._output[0]>=0:
             total+=1 
     self.assertEqual(40,total)
Esempio n. 14
0
from ccm.lib import nef
import numpy

# Adjust these values to change the matrix dimensions
#  Matrix A is D1xD2
#  Matrix B is D2xD3
#  result is D1xD3

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