fangwei123456 / spikingjelly

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

voltagescaler 中scale是如何工作的? #462

Open HaoyuYao opened 8 months ago

HaoyuYao commented 8 months ago

如图所示,这是教程在minst任务中的ann-snn转化示例,对于其中的voltagescaler 我有两个疑问: Q1:计算的流程是否如下:假设输入网络的变量为x,我们首先对x进行缩放,即乘以0.240048,然后经过卷积层、IFNode激活、平均池化层得到输出;再对输出进行缩放,即乘以4.165831;在将输出作为下一层的输入时,我们还需将其进行缩放,即乘以0.307458,然后经过卷积层、IFNode激活、平均池化层得到输出.....以此类推。 Q2:如果上述的计算流程是正确的,在经过最后一个卷积层、IFNode激活、平均池化层之后(也就是即将输入到Flatten层中),我们对Flatten层的输入进行了缩放,即乘以16.451399。但是按照教程所提供的归一化理论,缩放值应是输入的最大值/输出的最大值,而在Flatten后,我们并没有除以输出的最大值,所以想问这里乘以16.451399是不是错误的?是否应该改为乘以1.0,即不进行缩放,将最后一层卷积的输出直接作为Flatten层的输入?

1

Steven0007 commented 6 months ago

好响应该是先经过network0,再经过snn tailor.0.0,然后snn tailor.0.1,snn tailor.0.2,然后network3,所以应该是先卷积,再缩放,IF激活,再缩放,池化。我看print tabular这样显示。老铁也在搞转换吗?可以加好友交流不?

Steven0007 commented 6 months ago

老铁知道怎么查看转换后的中间层的输出吗?还有转换后的权重怎么看?

Lyu6PosHao commented 6 months ago

其实就是,把原来的ANN的激活函数(比如ReLU),替换为snn tailor。 然后snn tailor是这样工作的:缩放——IFNode激活——缩放。 所以转换完的SNN,相较于ANN,计算流程除了上述snn tailor处的不同,其他没有任何区别。 @Steven0007 @HaoyuYao