fangwei123456 / spikingjelly

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

关于复现sew_resnet #160

Closed lovingpolar closed 2 years ago

lovingpolar commented 2 years ago

你好,我在用spikingjelly0.0.0.0.4复现sew_resnet的结果与论文相近,但是我用最新版本spikingjelly的网络模型和神经元训练时,imagenet训练速度那个网络精度下降;而dvs的模型不收敛,不知道需要注意什么地方?

fangwei123456 commented 2 years ago

新版框架和老版相比应该没有原理上的区别,参考这个教程,检查一下API的用法是否正确: https://spikingjelly.readthedocs.io/zh_CN/latest/clock_driven/16_train_large_scale_snn.html

另外,推荐使用最新版(直接从GitHub下载源代码安装而不是pypi安装)训练

lovingpolar commented 2 years ago

感谢,仔细看了一下,发现新版本的surrogate_function默认是sigmoid,换成atan后目前训练静态的模型准确度就上来了

fangwei123456 commented 2 years ago

根据原文的推导,梯度累乘后很容易出现梯度衰减和梯度爆炸。atan替代函数默认alpha=2使得其最大值为1,而sigmoid替代函数默认alpha=1使其最大值不是1,所以容易不收敛。现在已经把sigmoid的alpha默认值设置为4。你也可以试一下alpha=4的sigmoid,应该可以收敛了。

iminfine commented 2 years ago

你好,我在用spikingjelly0.0.0.0.4复现sew_resnet的结果与论文相近,但是我用最新版本spikingjelly的网络模型和神经元训练时,imagenet训练速度那个网络精度下降;而dvs的模型不收敛,不知道需要注意什么地方?

请问你用多久完成sew_resnet在imagenet上的训练?