sinabs 3.1.1.dev1__tar.gz → 3.1.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/PKG-INFO +2 -2
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/README.md +1 -1
- sinabs-3.1.3/docs/_static/visualize_spike_count/spike_count.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/about/release_notes.md +18 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/conf.py +0 -1
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/layers/utils.py +7 -1
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/getting_started/iaf_neuron_model.ipynb +0 -1
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/faqs/available_network_arch.md +80 -67
- sinabs-3.1.3/docs/speck/faqs/imgs/complex-network.png +0 -0
- sinabs-3.1.3/docs/speck/faqs/imgs/network-with-residual-connection.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/notebooks/leak_neuron.ipynb +3 -3
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/notebooks/nmnist_quick_start.ipynb +142 -50
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/notebooks/play_with_speck_dvs.ipynb +28 -18
- sinabs-3.1.3/docs/speck/notebooks/power_monitoring.ipynb +703 -0
- sinabs-3.1.3/docs/speck/notebooks/using_readout_layer.ipynb +1023 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/notebooks/visualize_speck_dvs_input.ipynb +45 -17
- sinabs-3.1.3/docs/speck/notebooks/visualize_spike_count.ipynb +588 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/tutorials/nmnist.ipynb +0 -1
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/chips/dynapcnn.py +2 -2
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/dynapcnn_visualizer.py +9 -5
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/io.py +4 -1
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/nir_graph_extractor.py +4 -3
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/pool2d.py +1 -1
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/nir.py +4 -3
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs.egg-info/PKG-INFO +2 -2
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs.egg-info/SOURCES.txt +5 -2
- sinabs-3.1.3/sinabs.egg-info/pbr.json +1 -0
- {sinabs-3.1.1.dev1/tests/test_dynapcnn → sinabs-3.1.3/tests}/hw_utils.py +7 -4
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_device_movement.py +1 -1
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_discover_device.py +1 -1
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_large_net.py +1 -1
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_neuron_leak.py +1 -6
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_single_neuron_hardware.py +1 -2
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_visualizer.py +27 -25
- sinabs-3.1.3/tests/test_dynapcnnnetwork/__init__.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnnnetwork/conftest_dynapcnnnetwork.py +15 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnnnetwork/model_dummy_1.py +13 -14
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnnnetwork/model_dummy_2.py +20 -21
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnnnetwork/model_dummy_4.py +6 -4
- sinabs-3.1.3/tests/test_dynapcnnnetwork/model_dummy_5.py +199 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnnnetwork/test_dynapcnnnetwork.py +24 -1
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_nir.py +15 -0
- sinabs-3.1.1.dev1/docs/_static/visualize_spike_count/spike_count.png +0 -0
- sinabs-3.1.1.dev1/docs/speck/faqs/imgs/two-independent-networks.png +0 -0
- sinabs-3.1.1.dev1/docs/speck/notebooks/power_monitoring.ipynb +0 -755
- sinabs-3.1.1.dev1/docs/speck/notebooks/using_readout_layer.ipynb +0 -1090
- sinabs-3.1.1.dev1/docs/speck/notebooks/visualize_spike_count.ipynb +0 -719
- sinabs-3.1.1.dev1/sinabs.egg-info/pbr.json +0 -1
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/.coveragerc +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/.github/workflows/ci-pipeline.yml +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/.pre-commit-config.yaml +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/.readthedocs.yaml +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/AUTHORS +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/CITATION.cff +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/LICENSE +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/codecov.yml +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/Makefile +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/Overview/dataflow_layers.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/Overview/event_preprocessing_pipeline.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/Overview/memory_constraints.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/Overview/sinabs-dynapcnn-role.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/Overview/speck_dynapcnn.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/Overview/speck_top_level.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/devkits_images/dynapcnn_devkit.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/devkits_images/speck_devkit.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/devkits_images/speck_module.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/devkits_images/speck_module_devkit.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/nmnist_quick_start/dvs_input_flow.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/nmnist_quick_start/dynapcnn_visualizer.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/nmnist_quick_start/spike_input_flow.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/power_monitoring/dynamic_power_samna_graph.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/power_monitoring/idle_power_samna_graph.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/power_monitoring/power_plot.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/sinabs-logo-lowercase-whitebg.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/sinabs-logo-lowercase.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/tips_for_training/exceeding_bandwidth.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/using_readout_layer/handcraft_weights.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/using_readout_layer/neuron_id_mismatch.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/using_readout_layer/readout_layer.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/using_readout_layer/samna_graph.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/visualize_speck_dvs/samna_graph.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/visualize_spike_count/samna_graph.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_templates/class_activation.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_templates/class_layer.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/about/about.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/about/contributing.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/about/differences.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/about/info.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/api/activation.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/api/api.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/api/from_torch.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/api/hooks.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/api/layers.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/api/network.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/api/nir.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/api/synopcounter.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/api/utils.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/contact.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/README.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/layers/README.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/layers/plot_alif.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/layers/plot_exp_leaky.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/layers/plot_iaf.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/layers/plot_lif.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/spike_fns/README.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/spike_fns/plot_maxspike.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/spike_fns/plot_multispike.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/spike_fns/plot_singlespike.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/surrogate_grad_fns/README.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/surrogate_grad_fns/plot_gaussian.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/surrogate_grad_fns/plot_heaviside.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/surrogate_grad_fns/plot_multigaussian.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/surrogate_grad_fns/plot_periodicexponential.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/surrogate_grad_fns/plot_singleexponential.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/getting_started/fundamentals.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/getting_started/getting_started.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/getting_started/install.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/getting_started/python_pyenv_pipenv.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/getting_started/quickstart.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/how_tos/activations.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/how_tos/custom_hooks.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/how_tos/how_tos.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/how_tos/synops_loss_ann.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/how_tos/synops_loss_snn.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/index.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/make.bat +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/plugins/plugins.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/requirements.txt +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/advanced_concepts.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/chip_factory.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/config_builder.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/crop2d.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/discretize.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/dvs_layer.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/dynapcnn.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/dynapcnn_layer.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/dynapcnn_network.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/dynapcnn_visualizer.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/exceptions.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/flipdims.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/io.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/mapping.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/specksim.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/utils.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/dangers.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/faqs/add_new_device.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/faqs/available_algorithmic_operation.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/faqs/chip_errata.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/faqs/device_management.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/faqs/imgs/network-with-merge-and-split.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/faqs/imgs/two-networks-merging-output.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/faqs/index.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/faqs/output_monitoring.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/faqs/save_hardware_config_as_binary.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/faqs/tips_for_training.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/index.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/overview.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/specksim.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/the_basics.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/tutorials.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/visualizer.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/tutorials/LeNet_5_EngChinese.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/tutorials/bptt.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/tutorials/nir_to_speck.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/tutorials/scnn_mnist.nir +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/tutorials/tutorials.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/tutorials/weight_scaling.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/tutorials/weight_transfer_mnist.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/dynapcnn_network/snn_DVSLayer_given.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/dynapcnn_network/snn_DVSLayer_given_followed_by_pool.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/dynapcnn_network/snn_deployment.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/dynapcnn_network/snn_need_create_DVSLayer.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/dynapcnn_network/snn_no_DVSLayer.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/dynapcnn_network/snn_with_batchnorm.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/dynapcnn_network/snn_with_multiple_batchnorm.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/mnist/dynapcnn_network.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/mnist/mnist_params.pt +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/mnist/specksim_network.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/visualizer/dvs_gesture_params.pt +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/visualizer/gesture_viz.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/visualizer/icons/01_armroll.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/visualizer/icons/02_handclap.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/visualizer/icons/03_lefthandclockwise.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/visualizer/icons/04_lefthandcounterclockwise.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/visualizer/icons/05_lefthandwave.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/visualizer/icons/06_righthandwave.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/visualizer/icons/07_righthandclockwise.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/visualizer/icons/08_righthandcounterclockwise.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/visualizer/icons/09_airdrums.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/visualizer/icons/10_airguitar.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/visualizer/icons/11_other.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/jupyterlab-requirements.txt +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/pull_request_template.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/requirements.txt +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/setup.cfg +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/setup.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/__init__.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/activation/__init__.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/activation/quantize.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/activation/reset_mechanism.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/activation/spike_generation.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/activation/surrogate_gradient_fn.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/__init__.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/__init__.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/chip_factory.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/chips/__init__.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/chips/speck2e.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/chips/speck2f.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/config_builder.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/connectivity_specs.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/crop2d.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/discretize.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/dvs_layer.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/dynapcnn_layer.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/dynapcnn_layer_utils.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/dynapcnn_network.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/dynapcnnnetwork_module.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/exceptions.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/flipdims.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/mapping.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/sinabs_edges_handler.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/specksim.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/utils.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/weight_rescaling_methods.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/cnnutils.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/conversion.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/from_torch.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/hooks.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/__init__.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/alif.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/channel_shift.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/crop2d.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/exp_leak.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/functional/__init__.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/functional/alif.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/functional/lif.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/iaf.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/lif.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/merge.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/neuromorphic_relu.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/quantize.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/reshape.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/stateful_layer.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/to_spike.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/network.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/synopcounter.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/utils.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/validate_memory_speck.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs.egg-info/dependency_links.txt +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs.egg-info/not-zip-safe +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs.egg-info/requires.txt +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs.egg-info/top_level.txt +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/__init__.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/inputs_and_results/hooks/conv_input.pth +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/inputs_and_results/hooks/conv_layer_synops.pth +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/inputs_and_results/hooks/firing_rates.pth +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/inputs_and_results/hooks/firing_rates_per_neuron.pth +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/inputs_and_results/hooks/input_diffs.pth +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/inputs_and_results/hooks/model_synops.pth +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/mnist_params.pt +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/models/README.txt +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/models/synop_hook_model.pth +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/requirements.txt +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_activations.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_batch_mismatch.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_batch_size_update.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_conversion.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_copy.py +0 -0
- {sinabs-3.1.1.dev1/tests/test_dynapcnnlayer → sinabs-3.1.3/tests/test_dynapcnn}/__init__.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/custom_jit_filters.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_auto_mapping.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_compatible_layer_build.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_config_making.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_device_name_mapping.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_discretized.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_doorbell.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_dvs_input.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_dvs_layer.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_event_conversion.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_individual_cases.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_learning.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_monitoring.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_speck2e.py +0 -0
- {sinabs-3.1.1.dev1/tests/test_dynapcnnnetwork → sinabs-3.1.3/tests/test_dynapcnnlayer}/__init__.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnnlayer/conftest_dynapcnnlayer.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnnlayer/model_dummy_1.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnnlayer/model_dummy_2.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnnlayer/model_dummy_3.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnnlayer/model_dummy_4.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnnlayer/test_dynapcnnlayer.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnnnetwork/model_dummy_3.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnnnetwork/model_dummy_seq.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnnnetwork/test_failcases.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_from_model.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_graph_extractor/conftest_graph_extractor.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_graph_extractor/model_dummy_1.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_graph_extractor/model_dummy_2.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_graph_extractor/model_dummy_3.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_graph_extractor/model_dummy_4.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_graph_extractor/test_graph_extractor.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_hooks.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_layers/test_alif.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_layers/test_channelshift.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_layers/test_crop2d.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_layers/test_exp_leak.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_layers/test_iaf.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_layers/test_img2spk.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_layers/test_lif.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_layers/test_maxpooling.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_layers/test_merge.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_layers/test_neuromorphic_relu.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_layers/test_reshaping.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_layers/test_sig2spk.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_layers/test_stateful_layer.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_network_class.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_normalize_weights.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_onnx.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_quantize.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_specksim/test_specksim_bindings.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_specksim/test_specksim_conversion.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_specksim/test_specksim_network.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_surrogate_gradients.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_synops_counter.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_utils.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/weights/README.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sinabs
|
|
3
|
-
Version: 3.1.
|
|
3
|
+
Version: 3.1.3
|
|
4
4
|
Summary: SynSense Spiking Neural Network simulator for deep neural networks (DNNs).
|
|
5
5
|
Author: SynSense (formerly AiCTX)
|
|
6
6
|
Author-email: support@synsense.ai
|
|
@@ -87,7 +87,7 @@ Sinabs is published under Apache v2.0. See the LICENSE file for details.
|
|
|
87
87
|
|
|
88
88
|
Contributing to Sinabs
|
|
89
89
|
------------------------
|
|
90
|
-
Checkout the [contributing](https://sinabs.readthedocs.io/
|
|
90
|
+
Checkout the [contributing](https://sinabs.readthedocs.io/develop/about/contributing.html) page for more info.
|
|
91
91
|
|
|
92
92
|
|
|
93
93
|
Citation
|
|
@@ -49,7 +49,7 @@ Sinabs is published under Apache v2.0. See the LICENSE file for details.
|
|
|
49
49
|
|
|
50
50
|
Contributing to Sinabs
|
|
51
51
|
------------------------
|
|
52
|
-
Checkout the [contributing](https://sinabs.readthedocs.io/
|
|
52
|
+
Checkout the [contributing](https://sinabs.readthedocs.io/develop/about/contributing.html) page for more info.
|
|
53
53
|
|
|
54
54
|
|
|
55
55
|
Citation
|
|
Binary file
|
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Release notes
|
|
2
2
|
|
|
3
|
+
## v3.1.3 (04/02/2026)
|
|
4
|
+
|
|
5
|
+
* Add tests for mapping non-sequential networks
|
|
6
|
+
* Fix networks used for tests, they didnt meet the hardware constraints
|
|
7
|
+
* Update documentation with the non-sequential networks types that have a test
|
|
8
|
+
|
|
9
|
+
## v3.1.2 (12/12/2025)
|
|
10
|
+
|
|
11
|
+
* Update use of visualizer in Sinabs tutorials, previous tutorials were using a deprecated visualizer version.
|
|
12
|
+
* Fix issue with `chip_layers_ordering` in the visualizer. `chip_layers_ordering` was deprecated in Sinabs 3.1.0 and `layer2core_map` needs to be used instead.
|
|
13
|
+
|
|
14
|
+
## v3.1.1 (27/11/2025)
|
|
15
|
+
|
|
16
|
+
* Fix NIR export of Conv1d layer which expected an input_shape parameter.
|
|
17
|
+
* Fix broken link on documentation.
|
|
18
|
+
* Fix missing plots on `Neuron Models` gallery.
|
|
19
|
+
* Fix `open_device` function that would thrown an error if an unsupported SynSense device was connected to the computer.
|
|
20
|
+
|
|
3
21
|
## v3.1.0 (31/10/2025)
|
|
4
22
|
|
|
5
23
|
* Add mapping of non-sequential networks:
|
|
@@ -1,8 +1,14 @@
|
|
|
1
|
+
"""
|
|
2
|
+
==============================
|
|
3
|
+
Utility Function
|
|
4
|
+
==============================
|
|
5
|
+
Utility function for plots in the documentation.
|
|
6
|
+
"""
|
|
7
|
+
|
|
1
8
|
import matplotlib.pyplot as plt
|
|
2
9
|
import torch
|
|
3
10
|
|
|
4
11
|
import sinabs
|
|
5
|
-
import sinabs.layers as sl
|
|
6
12
|
|
|
7
13
|
|
|
8
14
|
def plot_evolution(neuron_model: sinabs.layers, input: torch.Tensor):
|
|
@@ -39,28 +39,31 @@ dynapcnn.to(devcie="your device", chip_layers_ordering=[2, 5, 7, 1])
|
|
|
39
39
|
|
|
40
40
|
## What network structure can I define?
|
|
41
41
|
|
|
42
|
-
`Sinabs` can parse a `torch.nn.Sequential` like architecture, so it is recommended to
|
|
43
|
-
use a `Sequential` like network.
|
|
42
|
+
`Sinabs` can parse a `torch.nn.Sequential` like architecture, so it is recommended to use a `Sequential` like network.
|
|
44
43
|
|
|
45
44
|
As of `v3.1.0`, we released a network graph extraction feature that helps users deploy their networks with more complex architectures into the devkit.
|
|
46
45
|
Our `Speck` chip, in fact, supports branched architectures. With the graph extraction feature, we support a range of network structures, as shown below:
|
|
47
46
|
|
|
47
|
+
A network with a merge and a split:
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-

|
|
49
|
+

|
|
52
50
|
|
|
53
51
|
Two networks with merging outputs:
|
|
54
52
|
|
|
55
53
|

|
|
56
54
|
|
|
57
|
-
A network with
|
|
55
|
+
A network with residual connections:
|
|
58
56
|
|
|
59
|
-

|
|
58
|
+
|
|
59
|
+
A more complex network:
|
|
60
60
|
|
|
61
|
+

|
|
61
62
|
|
|
62
63
|
Note: with the graph extracture feature it is possible to implement recurrent neural networks. However, this is not recommended or supported as it can result in deadlock on the chip.
|
|
63
64
|
|
|
65
|
+
Note2: the use of two parallel network although supported by our chip was not fully considered in our sinabs implementation.
|
|
66
|
+
|
|
64
67
|
## How to make use of the graph extraction feature?
|
|
65
68
|
|
|
66
69
|
For general architectures, users need to define their classes, by defining at least the `__init__` method with all the layers, as well as an appropriate `forward` method.
|
|
@@ -68,64 +71,70 @@ For general architectures, users need to define their classes, by defining at le
|
|
|
68
71
|
Here is an example to define a network with a merge and a split:
|
|
69
72
|
|
|
70
73
|
```python
|
|
74
|
+
import torch
|
|
71
75
|
import torch.nn as nn
|
|
72
76
|
|
|
73
77
|
from sinabs.activation.surrogate_gradient_fn import PeriodicExponential
|
|
74
78
|
from sinabs.layers import IAFSqueeze, Merge, SumPool2d
|
|
75
79
|
|
|
80
|
+
|
|
76
81
|
class SNN(nn.Module):
|
|
77
82
|
def __init__(self, batch_size) -> None:
|
|
78
83
|
super().__init__()
|
|
79
|
-
|
|
80
|
-
self.
|
|
81
|
-
self.
|
|
84
|
+
# -- graph node A --
|
|
85
|
+
self.conv_A = nn.Conv2d(2, 4, 2, 1, bias=False)
|
|
86
|
+
self.iaf_A = IAFSqueeze(
|
|
82
87
|
batch_size=batch_size,
|
|
83
88
|
min_v_mem=-1.0,
|
|
84
89
|
spike_threshold=1.0,
|
|
85
90
|
surrogate_grad_fn=PeriodicExponential(),
|
|
86
91
|
)
|
|
87
|
-
|
|
88
|
-
self.
|
|
89
|
-
self.
|
|
92
|
+
# -- graph node B --
|
|
93
|
+
self.conv_B = nn.Conv2d(4, 4, 2, 1, bias=False)
|
|
94
|
+
self.iaf2_B = IAFSqueeze(
|
|
90
95
|
batch_size=batch_size,
|
|
91
96
|
min_v_mem=-1.0,
|
|
92
97
|
spike_threshold=1.0,
|
|
93
98
|
surrogate_grad_fn=PeriodicExponential(),
|
|
94
99
|
)
|
|
95
|
-
self.
|
|
96
|
-
|
|
97
|
-
self.
|
|
98
|
-
self.
|
|
100
|
+
self.pool_B = SumPool2d(2, 2)
|
|
101
|
+
# -- graph node C --
|
|
102
|
+
self.conv_C = nn.Conv2d(4, 4, 2, 1, bias=False)
|
|
103
|
+
self.iaf_C = IAFSqueeze(
|
|
99
104
|
batch_size=batch_size,
|
|
100
105
|
min_v_mem=-1.0,
|
|
101
106
|
spike_threshold=1.0,
|
|
102
107
|
surrogate_grad_fn=PeriodicExponential(),
|
|
103
108
|
)
|
|
104
|
-
self.
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
self.
|
|
108
|
-
self.iaf4 = IAFSqueeze(
|
|
109
|
+
self.pool_C = SumPool2d(2, 2)
|
|
110
|
+
# -- graph node D --
|
|
111
|
+
self.conv_D = nn.Conv2d(4, 4, 2, 1, bias=False)
|
|
112
|
+
self.iaf_D = IAFSqueeze(
|
|
109
113
|
batch_size=batch_size,
|
|
110
114
|
min_v_mem=-1.0,
|
|
111
115
|
spike_threshold=1.0,
|
|
112
116
|
surrogate_grad_fn=PeriodicExponential(),
|
|
113
117
|
)
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
self.
|
|
117
|
-
self.flat2 = nn.Flatten()
|
|
118
|
-
|
|
119
|
-
self.conv5 = nn.Conv2d(1, 1, 2, 1, bias=False)
|
|
120
|
-
self.iaf5 = IAFSqueeze(
|
|
118
|
+
# -- graph node E --
|
|
119
|
+
self.conv_E = nn.Conv2d(4, 4, 2, 1, bias=False)
|
|
120
|
+
self.iaf3_E = IAFSqueeze(
|
|
121
121
|
batch_size=batch_size,
|
|
122
122
|
min_v_mem=-1.0,
|
|
123
123
|
spike_threshold=1.0,
|
|
124
124
|
surrogate_grad_fn=PeriodicExponential(),
|
|
125
125
|
)
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
self.
|
|
126
|
+
self.pool_E = SumPool2d(2, 2)
|
|
127
|
+
# -- graph node F --
|
|
128
|
+
self.conv_F = nn.Conv2d(4, 4, 2, 1, bias=False)
|
|
129
|
+
self.iaf_F = IAFSqueeze(
|
|
130
|
+
batch_size=batch_size,
|
|
131
|
+
min_v_mem=-1.0,
|
|
132
|
+
spike_threshold=1.0,
|
|
133
|
+
surrogate_grad_fn=PeriodicExponential(),
|
|
134
|
+
)
|
|
135
|
+
# -- graph node G --
|
|
136
|
+
self.fc3 = nn.Linear(144, 10, bias=False)
|
|
137
|
+
self.iaf3_fc = IAFSqueeze(
|
|
129
138
|
batch_size=batch_size,
|
|
130
139
|
min_v_mem=-1.0,
|
|
131
140
|
spike_threshold=1.0,
|
|
@@ -134,43 +143,47 @@ class SNN(nn.Module):
|
|
|
134
143
|
|
|
135
144
|
# -- merges --
|
|
136
145
|
self.merge1 = Merge()
|
|
137
|
-
|
|
146
|
+
|
|
147
|
+
# -- falts --
|
|
148
|
+
self.flat_D = nn.Flatten()
|
|
149
|
+
self.flat_F = nn.Flatten()
|
|
138
150
|
|
|
139
151
|
def forward(self, x):
|
|
140
152
|
# conv 1 - A/0
|
|
141
|
-
|
|
142
|
-
|
|
153
|
+
convA_out = self.conv_A(x)
|
|
154
|
+
iaf_A_out = self.iaf_A(convA_out)
|
|
143
155
|
|
|
144
156
|
# conv 2 - B/1
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
157
|
+
conv_B_out = self.conv_B(iaf_A_out)
|
|
158
|
+
iaf_B_out = self.iaf2_B(conv_B_out)
|
|
159
|
+
pool_B_out = self.pool_B(iaf_B_out)
|
|
148
160
|
|
|
149
161
|
# conv 3 - C/2
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
#
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
162
|
+
conv_C_out = self.conv_C(pool_B_out)
|
|
163
|
+
iaf_C_out = self.iaf_C(conv_C_out)
|
|
164
|
+
pool_C_out = self.pool_C(iaf_C_out)
|
|
165
|
+
|
|
166
|
+
# conv 4 - D/4
|
|
167
|
+
conv_D_out = self.conv_D(pool_C_out)
|
|
168
|
+
iaf_D_out = self.iaf_D(conv_D_out)
|
|
169
|
+
# fc 1 - E/3
|
|
170
|
+
conv_E_out = self.conv_E(pool_B_out)
|
|
171
|
+
iaf3_E_out = self.iaf3_E(conv_E_out)
|
|
172
|
+
pool_E_out = self.pool_E(iaf3_E_out)
|
|
173
|
+
|
|
174
|
+
# fc 2 - F/6
|
|
175
|
+
conv_F_out = self.conv_F(pool_E_out)
|
|
176
|
+
iaf_F_out = self.iaf_F(conv_F_out)
|
|
177
|
+
|
|
178
|
+
# fc 2 - G/5
|
|
179
|
+
flat_D_out = self.flat_D(iaf_D_out)
|
|
180
|
+
flat_F_out = self.flat_F(iaf_F_out)
|
|
181
|
+
|
|
182
|
+
merge1_out = self.merge1(flat_D_out, flat_F_out)
|
|
183
|
+
fc3_out = self.fc3(merge1_out)
|
|
184
|
+
iaf3_fc_out = self.iaf3_fc(fc3_out)
|
|
185
|
+
|
|
186
|
+
return iaf3_fc_out
|
|
174
187
|
```
|
|
175
188
|
|
|
176
189
|
## Can I achieve a "Residual Connection" like ResNet does?
|
|
@@ -180,9 +193,9 @@ change the `samna.speck2f.configuration.CNNLayerDestination.layer` to achieve th
|
|
|
180
193
|
familiar with the `samna-configuration`.
|
|
181
194
|
You can also make use of our network graph extraction feature, to implement residual networks.
|
|
182
195
|
|
|
183
|
-
## How
|
|
196
|
+
## How can I define "Residual Connection" manually?
|
|
184
197
|
|
|
185
|
-
|
|
198
|
+
You can also achieve "Residual Connection" by manually modify the `samna-configuration`.
|
|
186
199
|
|
|
187
200
|
Let's say you want an architecture like below:
|
|
188
201
|
|
|
@@ -221,7 +234,7 @@ class ResidualBlock(nn.Module):
|
|
|
221
234
|
|
|
222
235
|
```
|
|
223
236
|
|
|
224
|
-
|
|
237
|
+
You can write it like:
|
|
225
238
|
|
|
226
239
|
```python
|
|
227
240
|
# define a Sequential first
|
|
@@ -264,8 +277,8 @@ devkit.get_model().apply_configuration(samna_cfg)
|
|
|
264
277
|
|
|
265
278
|
```
|
|
266
279
|
|
|
267
|
-
|
|
268
|
-
|
|
280
|
+
It is a lot of manual work but it will let you have your Residual Block.
|
|
281
|
+
We recommend to use our network graph extraction feature for residual connections.
|
|
269
282
|
|
|
270
283
|
## What execution order should I be aware of when I am implementing a sequential structure?
|
|
271
284
|
You should be aware with the internal layer order.
|
|
Binary file
|
|
Binary file
|
|
@@ -110,7 +110,7 @@
|
|
|
110
110
|
},
|
|
111
111
|
{
|
|
112
112
|
"cell_type": "code",
|
|
113
|
-
"execution_count":
|
|
113
|
+
"execution_count": 5,
|
|
114
114
|
"id": "500e2d79",
|
|
115
115
|
"metadata": {},
|
|
116
116
|
"outputs": [
|
|
@@ -230,7 +230,7 @@
|
|
|
230
230
|
")\n",
|
|
231
231
|
"# don't forget to set the slow clock frequency!\n",
|
|
232
232
|
"# here we set the frequency to 1Hz, which mean the Vmem should decrease after every 1 second\n",
|
|
233
|
-
"dynapcnn.to(device=\"
|
|
233
|
+
"dynapcnn.to(device=\"speck2fdevkit\", slow_clk_frequency=1)\n",
|
|
234
234
|
"\n",
|
|
235
235
|
"# Check if neuron states decrease along with time pass by\n",
|
|
236
236
|
"\n",
|
|
@@ -276,7 +276,7 @@
|
|
|
276
276
|
"name": "python",
|
|
277
277
|
"nbconvert_exporter": "python",
|
|
278
278
|
"pygments_lexer": "ipython3",
|
|
279
|
-
"version": "3.
|
|
279
|
+
"version": "3.12.3"
|
|
280
280
|
}
|
|
281
281
|
},
|
|
282
282
|
"nbformat": 4,
|