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()
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)
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)
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)
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])
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)
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)
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)
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)
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)
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)
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)
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)
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