系列文章目录
文章目录
添加网络元件(Adding Network Components)
BindsNET支持三类网络组件:
- 神经元层(nodes)
- 神经元之间的连接(bindsnet.network.topology)
- 用于记录状态变量演变的监视器(bindsnet.network.monitors)。
Note:
在网络中的Components的名称是任意的,并且仅需要是其成分组内唯一的即可(layers,connections和monitors),依据这种唯一性来进行寻址。Bindsnet鼓励用户使用最适合自己的命名方式来开发自己的命名约定。
1. Creating and adding layers
要创建一层或一群节点,以“leaky integrate-and-fire, LIF”神经元为例:
代码示例:
from bindsnet.network.nodes import LIFNodes
# Create a layer of 100 LIF neurons with shape (10, 10).
layer = LIFNodes(n=100, shape=(10, 10))
每个bindsnet.network.nodes对象都有很多关键字参数,但是n(层中的节点数)或者shape(层的形状,可以从中计算出节点数)中的一个是必须存在的。
某些节点对象的其他参数包括:
thresh——给定该层的电压阈值的标量或张量
rest——给定该层的静止电压的标量或张量
traces——是否跟踪该层中每个神经元的“峰值轨迹”
tc_decay——给定该层神经元电压衰减的时间常数标量或张量)
要将层添加到网络,请使用add_layer函数,并为其指定名称(字符串),通过以下方式进行调用:
network.add_layer( layer=layer, name="LIF population")
这样的层保存在dictionary属性中, network.layers,并且可以由用户访问。例如,network.layers[‘LIF population’]
其他层的类型包括:
bindsnet.network.nodes.Input——针对用户指定的输入脉冲 。
bindsnet.network.nodes.McCullochPitts——McCulloch-Pitts神经元模型。
bindsnet.network.nodes.AdaptiveLIFNodes——具有自适应阈值的LIF神经元。
bindsnet.network.nodes.IzhikevichNodes——Izhikevich神经元模型。
可以将任意数量的层添加到网络。
可以通过子类bindsnet.network.nodes.Nodes(具有神经逻辑仿真通用逻辑的抽象类)来实现自定义节点对象。
函数 forward(self, x: torch.Tensor)是计算输入数据对神经元种群的影响,例如,电压变化,脉冲出现等。
函数 reset_state_variables(self)是将神经元状态变量重置为默认值。
函数_compute_decays(self)、forward(self, x: torch.Tensor)、reset_state_variables(self)是必须实现的,因为它们作为抽象函数包含在bindsnet.network.nodes.Nodes内。
2. Creating and adding connections
可以在不同的神经元种群之间添加连接(connections),也可以在一个种群回到自身之间添加一个连接(即循环连接 recurrent connection)。
如果要创建一个全连接 all-to-all:
代码示例:
from bindsnet.network.nodes import Input, LIFNodes
from bindsnet