当前位置: 首页 > 工具软件 > SpikingJelly > 使用案例 >

spikingjelly中的ANN2SNN程序20201221是好使的

许正平
2023-12-01

spikingjelly的最新版本,我当时使用的是20210330,中间存在onnx的包调用错误,难以解决。

通过调试20201221,发现这个版本的是好使的,但是也有一些是需要调试的。
1.首先应该训练出一个ANN模型出来,此时main函数中应该不填入任何信息,即

if __name__ == '__main__':
    main()
    # main('./log-cnn_mnist1622169436.7251258')

2.当训练出ANN模型后,会自动生成一个文件夹

./log-cnn_mnist1622169436.7251258

这个文件夹中存有大量的ANN和SNN模型
3.

 utils.pytorch_ann2snn(model_name=model_name,
                              norm_tensor=norm_tensor,
                              test_data_loader=test_data_loader,
                              device=device,
                              T=T,
                              log_dir=log_dir,
                              config=config
                              )

这里面有好几个坑:
3.1
原来的代码中,第二个参数写的不是norm_tensor,好像是test_tensor,这个容易发现,按着ctrl 点击pytorch_ann2snn就能很快找到错误。
3.2
utils.py 里面有大量的function
其中有一个pytorch_ann2snn,这个function里面有一行是使用val_ann的
正确代码如下:

ann_acc = val_ann(net=parsed_ann, loss_function=nn.CrossEntropyLoss(),device=device, data_loader=test_data_loader)

原来的代码中,好像是少了一个loss_function的参数
3.3
还是val_ann的问题,但是我忘记了。。。。

反正最后是成功了
控制台输出代码如下:

All the temp files are saved to  ./log-cnn_mnist1622169436.7251258
ann2snn config:
	 {'simulation': {'reset_to_zero': False, 'encoder': {'possion': False}, 'avg_pool': {'has_neuron': True}, 'max_pool': {'if_spatial_avg': False, 'if_wta': False, 'momentum': None}}, 'parser': {'robust_norm': True}}
Directly load model cnn_mnist.pkl
Using 120 pictures as norm set
Load best model for Model:cnn_mnist...
ANN Validating Accuracy:0.986
Save model to: ./log-cnn_mnist1622169436.7251258\parsed_cnn_mnist.pkl
Using robust normalization...
normalize with bias...
Print Parsed ANN model Structure:
Pytorch_Parser(
  (network): Sequential(
    (0): Conv2d(1, 32, kernel_size=(3, 3), stride=(1, 1))
    (1): ReLU()
    (2): AvgPool2d(kernel_size=2, stride=2, padding=0)
    (3): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1))
    (4): ReLU()
    (5): AvgPool2d(kernel_size=2, stride=2, padding=0)
    (6): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1))
    (7): ReLU()
    (8): AvgPool2d(kernel_size=2, stride=2, padding=0)
    (9): Flatten(start_dim=1, end_dim=-1)
    (10): Linear(in_features=32, out_features=10, bias=True)
    (11): ReLU()
  )
)
Save model to: ./log-cnn_mnist1622169436.7251258\normalized_cnn_mnist.pkl
Print Simulated SNN model Structure:
PyTorch_Converter(
  (network): Sequential(
    (0): Conv2d(1, 32, kernel_size=(3, 3), stride=(1, 1))
    (1): IFNode(
      v_threshold=1.0, v_reset=None, detach_reset=False
      (surrogate_function): Sigmoid(alpha=1.0, spiking=True)
    )
    (2): AvgPool2d(kernel_size=2, stride=2, padding=0)
    (3): IFNode(
      v_threshold=1.0, v_reset=None, detach_reset=False
      (surrogate_function): Sigmoid(alpha=1.0, spiking=True)
    )
    (4): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1))
    (5): IFNode(
      v_threshold=1.0, v_reset=None, detach_reset=False
      (surrogate_function): Sigmoid(alpha=1.0, spiking=True)
    )
    (6): AvgPool2d(kernel_size=2, stride=2, padding=0)
    (7): IFNode(
      v_threshold=1.0, v_reset=None, detach_reset=False
      (surrogate_function): Sigmoid(alpha=1.0, spiking=True)
    )
    (8): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1))
    (9): IFNode(
      v_threshold=1.0, v_reset=None, detach_reset=False
      (surrogate_function): Sigmoid(alpha=1.0, spiking=True)
    )
    (10): AvgPool2d(kernel_size=2, stride=2, padding=0)
    (11): IFNode(
      v_threshold=1.0, v_reset=None, detach_reset=False
      (surrogate_function): Sigmoid(alpha=1.0, spiking=True)
    )
    (12): Flatten(start_dim=1, end_dim=-1)
    (13): Linear(in_features=32, out_features=10, bias=True)
    (14): IFNode(
      v_threshold=1.0, v_reset=None, detach_reset=False
      (surrogate_function): Sigmoid(alpha=1.0, spiking=True)
    )
  )
)
100%|██████████| 100/100 [00:00<00:00, 285.67it/s]
[SNN Simulating... 1.00%] Acc:0.990
100%|██████████| 100/100 [00:00<00:00, 374.17it/s]
[SNN Simulating... 2.00%] Acc:0.995
 78%|███████▊  | 78/100 [00:00<00:00, 383.98it/s][SNN Simulating... 3.00%] Acc:0.990
100%|██████████| 100/100 [00:00<00:00, 383.84it/s]
100%|██████████| 100/100 [00:00<00:00, 387.40it/s]
[SNN Simulating... 4.00%] Acc:0.993
100%|██████████| 100/100 [00:00<00:00, 380.71it/s]
[SNN Simulating... 5.00%] Acc:0.992
 77%|███████▋  | 77/100 [00:00<00:00, 386.11it/s][SNN Simulating... 6.00%] Acc:0.992
100%|██████████| 100/100 [00:00<00:00, 382.31it/s]
 77%|███████▋  | 77/100 [00:00<00:00, 379.92it/s][SNN Simulating... 7.00%] Acc:0.991
100%|██████████| 100/100 [00:00<00:00, 382.12it/s]
100%|██████████| 100/100 [00:00<00:00, 380.98it/s]
[SNN Simulating... 8.00%] Acc:0.990
100%|██████████| 100/100 [00:00<00:00, 383.18it/s]
[SNN Simulating... 9.00%] Acc:0.991
100%|██████████| 100/100 [00:00<00:00, 380.64it/s]
[SNN Simulating... 10.00%] Acc:0.991
 78%|███████▊  | 78/100 [00:00<00:00, 382.40it/s][SNN Simulating... 11.00%] Acc:0.989
100%|██████████| 100/100 [00:00<00:00, 382.72it/s]
100%|██████████| 100/100 [00:00<00:00, 387.78it/s]
[SNN Simulating... 12.00%] Acc:0.988
 77%|███████▋  | 77/100 [00:00<00:00, 380.84it/s][SNN Simulating... 13.00%] Acc:0.989
100%|██████████| 100/100 [00:00<00:00, 382.14it/s]
 77%|███████▋  | 77/100 [00:00<00:00, 379.64it/s][SNN Simulating... 14.00%] Acc:0.989
100%|██████████| 100/100 [00:00<00:00, 380.64it/s]
 78%|███████▊  | 78/100 [00:00<00:00, 386.31it/s][SNN Simulating... 15.00%] Acc:0.990
100%|██████████| 100/100 [00:00<00:00, 384.24it/s]
100%|██████████| 100/100 [00:00<00:00, 382.49it/s]
[SNN Simulating... 16.00%] Acc:0.989
100%|██████████| 100/100 [00:00<00:00, 383.12it/s]
[SNN Simulating... 17.00%] Acc:0.989
100%|██████████| 100/100 [00:00<00:00, 381.43it/s]
[SNN Simulating... 18.00%] Acc:0.989
100%|██████████| 100/100 [00:00<00:00, 384.29it/s]
[SNN Simulating... 19.00%] Acc:0.989
100%|██████████| 100/100 [00:00<00:00, 383.13it/s]
[SNN Simulating... 20.00%] Acc:0.989
 77%|███████▋  | 77/100 [00:00<00:00, 383.32it/s][SNN Simulating... 21.00%] Acc:0.988
100%|██████████| 100/100 [00:00<00:00, 383.44it/s]
100%|██████████| 100/100 [00:00<00:00, 384.28it/s]
[SNN Simulating... 22.00%] Acc:0.988
 78%|███████▊  | 78/100 [00:00<00:00, 382.79it/s][SNN Simulating... 23.00%] Acc:0.988
100%|██████████| 100/100 [00:00<00:00, 382.40it/s]
100%|██████████| 100/100 [00:00<00:00, 377.74it/s]
[SNN Simulating... 24.00%] Acc:0.988
 78%|███████▊  | 78/100 [00:00<00:00, 382.20it/s][SNN Simulating... 25.00%] Acc:0.987
100%|██████████| 100/100 [00:00<00:00, 383.59it/s]
100%|██████████| 100/100 [00:00<00:00, 385.62it/s]
[SNN Simulating... 26.00%] Acc:0.987
 78%|███████▊  | 78/100 [00:00<00:00, 383.72it/s][SNN Simulating... 27.00%] Acc:0.987
100%|██████████| 100/100 [00:00<00:00, 384.30it/s]
 77%|███████▋  | 77/100 [00:00<00:00, 378.39it/s][SNN Simulating... 28.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 383.11it/s]
 77%|███████▋  | 77/100 [00:00<00:00, 380.10it/s][SNN Simulating... 29.00%] Acc:0.987
100%|██████████| 100/100 [00:00<00:00, 382.31it/s]
 78%|███████▊  | 78/100 [00:00<00:00, 385.14it/s][SNN Simulating... 30.00%] Acc:0.987
100%|██████████| 100/100 [00:00<00:00, 384.02it/s]
 78%|███████▊  | 78/100 [00:00<00:00, 380.23it/s][SNN Simulating... 31.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 381.53it/s]
100%|██████████| 100/100 [00:00<00:00, 384.25it/s]
[SNN Simulating... 32.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 386.27it/s]
[SNN Simulating... 33.00%] Acc:0.986
 78%|███████▊  | 78/100 [00:00<00:00, 381.66it/s][SNN Simulating... 34.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 381.08it/s]
 78%|███████▊  | 78/100 [00:00<00:00, 386.44it/s][SNN Simulating... 35.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 383.48it/s]
100%|██████████| 100/100 [00:00<00:00, 384.00it/s]
[SNN Simulating... 36.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 385.31it/s]
[SNN Simulating... 37.00%] Acc:0.985
 78%|███████▊  | 78/100 [00:00<00:00, 383.32it/s][SNN Simulating... 38.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 382.76it/s]
100%|██████████| 100/100 [00:00<00:00, 382.12it/s]
[SNN Simulating... 39.00%] Acc:0.986
 77%|███████▋  | 77/100 [00:00<00:00, 379.25it/s][SNN Simulating... 40.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 380.26it/s]
100%|██████████| 100/100 [00:00<00:00, 381.43it/s]
[SNN Simulating... 41.00%] Acc:0.985
 78%|███████▊  | 78/100 [00:00<00:00, 385.23it/s][SNN Simulating... 42.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 385.14it/s]
100%|██████████| 100/100 [00:00<00:00, 382.23it/s]
[SNN Simulating... 43.00%] Acc:0.985
 78%|███████▊  | 78/100 [00:00<00:00, 381.57it/s][SNN Simulating... 44.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 381.63it/s]
 80%|████████  | 80/100 [00:00<00:00, 382.68it/s][SNN Simulating... 45.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 382.89it/s]
100%|██████████| 100/100 [00:00<00:00, 381.87it/s]
[SNN Simulating... 46.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 382.94it/s]
[SNN Simulating... 47.00%] Acc:0.986
 78%|███████▊  | 78/100 [00:00<00:00, 381.88it/s][SNN Simulating... 48.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 381.80it/s]
 78%|███████▊  | 78/100 [00:00<00:00, 380.89it/s][SNN Simulating... 49.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 381.39it/s]
100%|██████████| 100/100 [00:00<00:00, 385.67it/s]
[SNN Simulating... 50.00%] Acc:0.987
 77%|███████▋  | 77/100 [00:00<00:00, 380.18it/s][SNN Simulating... 51.00%] Acc:0.987
100%|██████████| 100/100 [00:00<00:00, 380.93it/s]
 78%|███████▊  | 78/100 [00:00<00:00, 384.34it/s][SNN Simulating... 52.00%] Acc:0.987
100%|██████████| 100/100 [00:00<00:00, 384.01it/s]
100%|██████████| 100/100 [00:00<00:00, 381.28it/s]
[SNN Simulating... 53.00%] Acc:0.987
 78%|███████▊  | 78/100 [00:00<00:00, 382.42it/s][SNN Simulating... 54.00%] Acc:0.987
100%|██████████| 100/100 [00:00<00:00, 383.27it/s]
100%|██████████| 100/100 [00:00<00:00, 380.66it/s]
[SNN Simulating... 55.00%] Acc:0.987
 77%|███████▋  | 77/100 [00:00<00:00, 383.32it/s][SNN Simulating... 56.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 381.38it/s]
100%|██████████| 100/100 [00:00<00:00, 384.44it/s]
[SNN Simulating... 57.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 380.93it/s]
[SNN Simulating... 58.00%] Acc:0.987
 77%|███████▋  | 77/100 [00:00<00:00, 383.83it/s][SNN Simulating... 59.00%] Acc:0.987
100%|██████████| 100/100 [00:00<00:00, 382.44it/s]
 77%|███████▋  | 77/100 [00:00<00:00, 379.82it/s][SNN Simulating... 60.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 380.56it/s]
 77%|███████▋  | 77/100 [00:00<00:00, 381.51it/s][SNN Simulating... 61.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 378.22it/s]
100%|██████████| 100/100 [00:00<00:00, 378.32it/s]
[SNN Simulating... 62.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 381.82it/s]
[SNN Simulating... 63.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 380.16it/s]
[SNN Simulating... 64.00%] Acc:0.986
 77%|███████▋  | 77/100 [00:00<00:00, 379.44it/s][SNN Simulating... 65.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 381.32it/s]
100%|██████████| 100/100 [00:00<00:00, 380.55it/s]
[SNN Simulating... 66.00%] Acc:0.986
100%|██████████| 100/100 [00:00<00:00, 377.32it/s]
[SNN Simulating... 67.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 380.96it/s]
[SNN Simulating... 68.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 380.04it/s]
[SNN Simulating... 69.00%] Acc:0.985
 78%|███████▊  | 78/100 [00:00<00:00, 380.84it/s][SNN Simulating... 70.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 381.85it/s]
100%|██████████| 100/100 [00:00<00:00, 381.54it/s]
[SNN Simulating... 71.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 383.40it/s]
[SNN Simulating... 72.00%] Acc:0.985
 78%|███████▊  | 78/100 [00:00<00:00, 382.86it/s][SNN Simulating... 73.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 382.38it/s]
 77%|███████▋  | 77/100 [00:00<00:00, 381.36it/s][SNN Simulating... 74.00%] Acc:0.984
100%|██████████| 100/100 [00:00<00:00, 382.45it/s]
 77%|███████▋  | 77/100 [00:00<00:00, 380.61it/s][SNN Simulating... 75.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 381.50it/s]
100%|██████████| 100/100 [00:00<00:00, 384.54it/s]
[SNN Simulating... 76.00%] Acc:0.985
 76%|███████▌  | 76/100 [00:00<00:00, 375.56it/s][SNN Simulating... 77.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 377.99it/s]
100%|██████████| 100/100 [00:00<00:00, 384.83it/s]
[SNN Simulating... 78.00%] Acc:0.985
 72%|███████▏  | 72/100 [00:00<00:00, 346.83it/s][SNN Simulating... 79.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 363.56it/s]
 77%|███████▋  | 77/100 [00:00<00:00, 380.04it/s][SNN Simulating... 80.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 380.84it/s]
100%|██████████| 100/100 [00:00<00:00, 382.03it/s]
[SNN Simulating... 81.00%] Acc:0.985
 77%|███████▋  | 77/100 [00:00<00:00, 379.45it/s][SNN Simulating... 82.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 380.99it/s]
100%|██████████| 100/100 [00:00<00:00, 381.97it/s]
[SNN Simulating... 83.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 382.07it/s]
[SNN Simulating... 84.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 382.60it/s]
[SNN Simulating... 85.00%] Acc:0.985
 83%|████████▎ | 83/100 [00:00<00:00, 380.87it/s][SNN Simulating... 86.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 380.21it/s]
 78%|███████▊  | 78/100 [00:00<00:00, 380.85it/s][SNN Simulating... 87.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 378.54it/s]
 76%|███████▌  | 76/100 [00:00<00:00, 373.97it/s][SNN Simulating... 88.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 375.22it/s]
100%|██████████| 100/100 [00:00<00:00, 382.67it/s]
[SNN Simulating... 89.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 384.07it/s]
[SNN Simulating... 90.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 385.50it/s]
[SNN Simulating... 91.00%] Acc:0.985
 78%|███████▊  | 78/100 [00:00<00:00, 384.77it/s][SNN Simulating... 92.00%] Acc:0.984
100%|██████████| 100/100 [00:00<00:00, 382.92it/s]
 77%|███████▋  | 77/100 [00:00<00:00, 381.75it/s][SNN Simulating... 93.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 381.70it/s]
100%|██████████| 100/100 [00:00<00:00, 381.89it/s]
[SNN Simulating... 94.00%] Acc:0.985
 78%|███████▊  | 78/100 [00:00<00:00, 382.47it/s][SNN Simulating... 95.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 381.82it/s]
100%|██████████| 100/100 [00:00<00:00, 382.68it/s]
[SNN Simulating... 96.00%] Acc:0.985
 78%|███████▊  | 78/100 [00:00<00:00, 383.37it/s][SNN Simulating... 97.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 383.90it/s]
100%|██████████| 100/100 [00:00<00:00, 381.86it/s]
[SNN Simulating... 98.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 378.68it/s]
[SNN Simulating... 99.00%] Acc:0.985
100%|██████████| 100/100 [00:00<00:00, 383.33it/s]
[SNN Simulating... 100.00%] Acc:0.985
SNN Simulating Accuracy:0.985
Summary:	ANN Accuracy:98.6100%  	SNN Accuracy:98.5000% [Decreased 0.1100%]
 类似资料: