Brian架构中的神经元和突触都可以自己来连接,动态方程可以自己定义,在很多细节上和传统的神经网络框架的构建方式都不一样。对于突触的理解加深了很多,传统神经网络中突触就用权重来代替,但是在脉冲神经网络中,这个突触和动态过程直接相关,突触前和突触后的概念经常出现。在学习过程中,发现做连接有几个参数不是很好理解。
>>> group1 = NeuronGroup(3, '')
>>> group2 = NeuronGroup(3, '')
>>> syn = Synapses(group1, group2)
>>> syn.connect(i=[0, 0, 1, 2], j=[1, 2, 2, 2])
>>> print(syn.N_outgoing_pre) # for each presynaptic neuron
[2 1 1]
>>> print(syn.N_outgoing[:]) # same numbers, but indexed by synapse
[2 2 1 1]
>>> print(syn.N_incoming_post)
[0 1 3]
>>> print(syn.N_incoming[:])
[1 3 3 3]
简单画了一下上面代码对应的网络结构:
N_outgoing_pre:就是前面这层的神经元连接的输出突触的个数:分别是2,1,1
N_incoming_post:和上面思想一样,就是数的是第二层的三个神经元分别连接的突触数目
N_outgoing:这里不是从神经元的角度出发,而是从突触的角度出发,突触的数目总共有4个,分别是红字标出来的0,1,2,3,这样一来:和突触0连接的第一个神经元连接的突触数目是2,和突触1连接的第一个神经元连接的突触数目是2.。。。同理后面就是1,1.
这里需要特别理解的就是outgoing,这里还是从神经元的角度出发的突触数目,所以说得是第一层,不是第二层。紧紧是从突触的角度来统计。
虽然英文注释也是这个意思,但是我还是经过思考才得出结论,也的确是自己没有理解到位,所以就记录一下,我觉得以后想不起来的可能性很大。