fangwei123456 / spikingjelly

SpikingJelly is an open-source deep learning framework for Spiking Neural Network (SNN) based on PyTorch.
https://spikingjelly.readthedocs.io
Other
1.22k stars 233 forks source link

神经元模型是在激活什么呢?神经元权重值体现在哪里? #534

Open Xi-W opened 2 months ago

Xi-W commented 2 months ago

在spikformer中 `class MLP(nn.Module): def init(self, in_features, hidden_features=None, out_features=None, drop=0.): super().init() out_features = out_features or in_features #out_features=in_features hidden_features = hidden_features or in_features #hidden_features=in_features self.fc1_linear = nn.Linear(in_features, hidden_features) # 全连接[batch_size, in_features]张量-》[batch_size, out_features]的输出张量 self.fc1_bn = nn.BatchNorm1d(hidden_features) #归一化 self.fc1_lif = MultiStepLIFNode(tau=2.0, detach_reset=True) #激活

    self.fc2_linear = nn.Linear(hidden_features, out_features)  #再重复一边 
    self.fc2_bn = nn.BatchNorm1d(out_features)
    self.fc2_lif = MultiStepLIFNode(tau=2.0, detach_reset=True)

    self.c_hidden = hidden_features 
    self.c_output = out_features`

(mlp): MLP( (fc1_linear): Linear(in_features=256, out_features=256, bias=True) (fc1_bn): BatchNorm1d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) (fc1_lif): MultiStepLIFNode( v_threshold=1.0, v_reset=0.0, detach_reset=True, tau=2.0, backend=torch (surrogate_function): Sigmoid(alpha=4.0, spiking=True) ) (fc2_linear): Linear(in_features=256, out_features=256, bias=True) (fc2_bn): BatchNorm1d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) (fc2_lif): MultiStepLIFNode( v_threshold=1.0, v_reset=0.0, detach_reset=True, tau=2.0, backend=torch (surrogate_function): Sigmoid(alpha=4.0, spiking=True) ) 我发现每一次使用lif模型的流程都一样,先用Linear或者Conv2d,然后都需要bn批归一化,然后使用lif。 问题如下,一、lif之前的bn是为了必须保证进入lif的值在0~1之间吗?出来加速收敛,还有其他原因吗? 二、lif的权重参数是什么呢?是通过Conv2d或者Linear来表现lif的参数吗? image

Xi-W commented 2 months ago

一般神经元训练会把 累加权重w 作为训练的过程值,我向知道这个值是什么体现出来的,感谢回复

Met4physics commented 2 months ago
  1. 你想说的参数不在神经元内,普通LIF神经元也没有可学习的参数,只有超参数。
  2. SNN中的参数W与ANN中在的地方一样,ANN在哪SNN就在哪,比如Conv2d,Linear