sinabs 3.1.1.dev1__tar.gz → 3.1.2__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.2}/PKG-INFO +2 -2
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/README.md +1 -1
- sinabs-3.1.2/docs/_static/visualize_spike_count/spike_count.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/about/release_notes.md +12 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/conf.py +0 -1
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/gallery/layers/utils.py +7 -1
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/notebooks/leak_neuron.ipynb +3 -3
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/notebooks/nmnist_quick_start.ipynb +142 -48
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/notebooks/play_with_speck_dvs.ipynb +28 -17
- sinabs-3.1.2/docs/speck/notebooks/power_monitoring.ipynb +703 -0
- sinabs-3.1.2/docs/speck/notebooks/using_readout_layer.ipynb +1023 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/notebooks/visualize_speck_dvs_input.ipynb +45 -17
- sinabs-3.1.2/docs/speck/notebooks/visualize_spike_count.ipynb +588 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/backend/dynapcnn/dynapcnn_visualizer.py +6 -2
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/backend/dynapcnn/io.py +4 -1
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/nir.py +4 -3
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs.egg-info/PKG-INFO +2 -2
- sinabs-3.1.2/sinabs.egg-info/pbr.json +1 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnn/hw_utils.py +7 -4
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnn/test_visualizer.py +25 -22
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/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/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.2}/.coveragerc +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/.github/workflows/ci-pipeline.yml +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/.pre-commit-config.yaml +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/.readthedocs.yaml +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/AUTHORS +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/CITATION.cff +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/LICENSE +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/codecov.yml +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/Makefile +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/_static/Overview/dataflow_layers.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/_static/Overview/event_preprocessing_pipeline.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/_static/Overview/memory_constraints.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/_static/Overview/sinabs-dynapcnn-role.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/_static/Overview/speck_dynapcnn.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/_static/Overview/speck_top_level.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/_static/devkits_images/dynapcnn_devkit.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/_static/devkits_images/speck_devkit.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/_static/devkits_images/speck_module.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/_static/devkits_images/speck_module_devkit.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/_static/nmnist_quick_start/dvs_input_flow.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/_static/nmnist_quick_start/dynapcnn_visualizer.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/_static/nmnist_quick_start/spike_input_flow.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/_static/power_monitoring/dynamic_power_samna_graph.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/_static/power_monitoring/idle_power_samna_graph.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/_static/power_monitoring/power_plot.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/_static/sinabs-logo-lowercase-whitebg.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/_static/sinabs-logo-lowercase.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/_static/tips_for_training/exceeding_bandwidth.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/_static/using_readout_layer/handcraft_weights.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/_static/using_readout_layer/neuron_id_mismatch.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/_static/using_readout_layer/readout_layer.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/_static/using_readout_layer/samna_graph.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/_static/visualize_speck_dvs/samna_graph.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/_static/visualize_spike_count/samna_graph.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/_templates/class_activation.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/_templates/class_layer.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/about/about.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/about/contributing.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/about/differences.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/about/info.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/api/activation.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/api/api.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/api/from_torch.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/api/hooks.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/api/layers.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/api/network.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/api/nir.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/api/synopcounter.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/api/utils.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/contact.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/gallery/README.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/gallery/layers/README.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/gallery/layers/plot_alif.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/gallery/layers/plot_exp_leaky.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/gallery/layers/plot_iaf.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/gallery/layers/plot_lif.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/gallery/spike_fns/README.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/gallery/spike_fns/plot_maxspike.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/gallery/spike_fns/plot_multispike.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/gallery/spike_fns/plot_singlespike.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/gallery/surrogate_grad_fns/README.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/gallery/surrogate_grad_fns/plot_gaussian.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/gallery/surrogate_grad_fns/plot_heaviside.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/gallery/surrogate_grad_fns/plot_multigaussian.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/gallery/surrogate_grad_fns/plot_periodicexponential.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/gallery/surrogate_grad_fns/plot_singleexponential.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/getting_started/fundamentals.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/getting_started/getting_started.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/getting_started/iaf_neuron_model.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/getting_started/install.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/getting_started/python_pyenv_pipenv.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/getting_started/quickstart.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/how_tos/activations.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/how_tos/custom_hooks.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/how_tos/how_tos.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/how_tos/synops_loss_ann.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/how_tos/synops_loss_snn.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/index.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/make.bat +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/plugins/plugins.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/requirements.txt +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/advanced_concepts.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/api/dynapcnn/chip_factory.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/api/dynapcnn/config_builder.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/api/dynapcnn/crop2d.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/api/dynapcnn/discretize.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/api/dynapcnn/dvs_layer.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/api/dynapcnn/dynapcnn.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/api/dynapcnn/dynapcnn_layer.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/api/dynapcnn/dynapcnn_network.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/api/dynapcnn/dynapcnn_visualizer.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/api/dynapcnn/exceptions.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/api/dynapcnn/flipdims.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/api/dynapcnn/io.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/api/dynapcnn/mapping.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/api/dynapcnn/specksim.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/api/dynapcnn/utils.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/dangers.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/faqs/add_new_device.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/faqs/available_algorithmic_operation.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/faqs/available_network_arch.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/faqs/chip_errata.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/faqs/device_management.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/faqs/imgs/network-with-merge-and-split.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/faqs/imgs/two-independent-networks.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/faqs/imgs/two-networks-merging-output.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/faqs/index.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/faqs/output_monitoring.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/faqs/save_hardware_config_as_binary.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/faqs/tips_for_training.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/index.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/overview.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/specksim.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/the_basics.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/tutorials.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/speck/visualizer.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/tutorials/LeNet_5_EngChinese.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/tutorials/bptt.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/tutorials/nir_to_speck.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/tutorials/nmnist.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/tutorials/scnn_mnist.nir +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/tutorials/tutorials.rst +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/tutorials/weight_scaling.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/docs/tutorials/weight_transfer_mnist.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/examples/dynapcnn_network/snn_DVSLayer_given.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/examples/dynapcnn_network/snn_DVSLayer_given_followed_by_pool.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/examples/dynapcnn_network/snn_deployment.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/examples/dynapcnn_network/snn_need_create_DVSLayer.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/examples/dynapcnn_network/snn_no_DVSLayer.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/examples/dynapcnn_network/snn_with_batchnorm.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/examples/dynapcnn_network/snn_with_multiple_batchnorm.ipynb +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/examples/mnist/dynapcnn_network.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/examples/mnist/mnist_params.pt +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/examples/mnist/specksim_network.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/examples/visualizer/dvs_gesture_params.pt +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/examples/visualizer/gesture_viz.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/examples/visualizer/icons/01_armroll.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/examples/visualizer/icons/02_handclap.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/examples/visualizer/icons/03_lefthandclockwise.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/examples/visualizer/icons/04_lefthandcounterclockwise.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/examples/visualizer/icons/05_lefthandwave.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/examples/visualizer/icons/06_righthandwave.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/examples/visualizer/icons/07_righthandclockwise.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/examples/visualizer/icons/08_righthandcounterclockwise.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/examples/visualizer/icons/09_airdrums.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/examples/visualizer/icons/10_airguitar.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/examples/visualizer/icons/11_other.png +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/jupyterlab-requirements.txt +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/pull_request_template.md +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/requirements.txt +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/setup.cfg +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/setup.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/__init__.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/activation/__init__.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/activation/quantize.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/activation/reset_mechanism.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/activation/spike_generation.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/activation/surrogate_gradient_fn.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/backend/__init__.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/backend/dynapcnn/__init__.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/backend/dynapcnn/chip_factory.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/backend/dynapcnn/chips/__init__.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/backend/dynapcnn/chips/dynapcnn.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/backend/dynapcnn/chips/speck2e.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/backend/dynapcnn/chips/speck2f.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/backend/dynapcnn/config_builder.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/backend/dynapcnn/connectivity_specs.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/backend/dynapcnn/crop2d.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/backend/dynapcnn/discretize.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/backend/dynapcnn/dvs_layer.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/backend/dynapcnn/dynapcnn_layer.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/backend/dynapcnn/dynapcnn_layer_utils.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/backend/dynapcnn/dynapcnn_network.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/backend/dynapcnn/dynapcnnnetwork_module.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/backend/dynapcnn/exceptions.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/backend/dynapcnn/flipdims.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/backend/dynapcnn/mapping.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/backend/dynapcnn/nir_graph_extractor.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/backend/dynapcnn/sinabs_edges_handler.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/backend/dynapcnn/specksim.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/backend/dynapcnn/utils.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/backend/dynapcnn/weight_rescaling_methods.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/cnnutils.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/conversion.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/from_torch.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/hooks.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/layers/__init__.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/layers/alif.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/layers/channel_shift.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/layers/crop2d.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/layers/exp_leak.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/layers/functional/__init__.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/layers/functional/alif.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/layers/functional/lif.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/layers/iaf.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/layers/lif.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/layers/merge.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/layers/neuromorphic_relu.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/layers/pool2d.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/layers/quantize.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/layers/reshape.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/layers/stateful_layer.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/layers/to_spike.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/network.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/synopcounter.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/utils.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs/validate_memory_speck.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs.egg-info/SOURCES.txt +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs.egg-info/dependency_links.txt +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs.egg-info/not-zip-safe +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs.egg-info/requires.txt +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/sinabs.egg-info/top_level.txt +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/__init__.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/inputs_and_results/hooks/conv_input.pth +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/inputs_and_results/hooks/conv_layer_synops.pth +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/inputs_and_results/hooks/firing_rates.pth +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/inputs_and_results/hooks/firing_rates_per_neuron.pth +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/inputs_and_results/hooks/input_diffs.pth +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/inputs_and_results/hooks/model_synops.pth +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/mnist_params.pt +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/models/README.txt +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/models/synop_hook_model.pth +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/requirements.txt +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_activations.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_batch_mismatch.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_batch_size_update.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_conversion.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_copy.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnn/custom_jit_filters.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnn/test_auto_mapping.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnn/test_compatible_layer_build.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnn/test_config_making.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnn/test_device_movement.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnn/test_device_name_mapping.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnn/test_discover_device.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnn/test_discretized.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnn/test_doorbell.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnn/test_dvs_input.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnn/test_dvs_layer.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnn/test_event_conversion.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnn/test_individual_cases.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnn/test_large_net.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnn/test_learning.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnn/test_monitoring.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnn/test_neuron_leak.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnn/test_single_neuron_hardware.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnn/test_speck2e.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnnlayer/__init__.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnnlayer/conftest_dynapcnnlayer.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnnlayer/model_dummy_1.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnnlayer/model_dummy_2.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnnlayer/model_dummy_3.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnnlayer/model_dummy_4.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnnlayer/test_dynapcnnlayer.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnnnetwork/__init__.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnnnetwork/conftest_dynapcnnnetwork.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnnnetwork/model_dummy_1.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnnnetwork/model_dummy_2.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnnnetwork/model_dummy_3.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnnnetwork/model_dummy_4.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnnnetwork/model_dummy_seq.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnnnetwork/test_dynapcnnnetwork.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_dynapcnnnetwork/test_failcases.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_from_model.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_graph_extractor/conftest_graph_extractor.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_graph_extractor/model_dummy_1.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_graph_extractor/model_dummy_2.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_graph_extractor/model_dummy_3.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_graph_extractor/model_dummy_4.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_graph_extractor/test_graph_extractor.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_hooks.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_layers/test_alif.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_layers/test_channelshift.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_layers/test_crop2d.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_layers/test_exp_leak.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_layers/test_iaf.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_layers/test_img2spk.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_layers/test_lif.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_layers/test_maxpooling.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_layers/test_merge.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_layers/test_neuromorphic_relu.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_layers/test_reshaping.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_layers/test_sig2spk.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_layers/test_stateful_layer.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_network_class.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_normalize_weights.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_onnx.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_quantize.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_specksim/test_specksim_bindings.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_specksim/test_specksim_conversion.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_specksim/test_specksim_network.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_surrogate_gradients.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_synops_counter.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/tests/test_utils.py +0 -0
- {sinabs-3.1.1.dev1 → sinabs-3.1.2}/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.2
|
|
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,17 @@
|
|
|
1
1
|
# Release notes
|
|
2
2
|
|
|
3
|
+
## v3.1.2 (12/12/2025)
|
|
4
|
+
|
|
5
|
+
* Update use of visualizer in Sinabs tutorials, previous tutorials were using a deprecated visualizer version.
|
|
6
|
+
* 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.
|
|
7
|
+
|
|
8
|
+
## v3.1.1 (27/11/2025)
|
|
9
|
+
|
|
10
|
+
* Fix NIR export of Conv1d layer which expected an input_shape parameter.
|
|
11
|
+
* Fix broken link on documentation.
|
|
12
|
+
* Fix missing plots on `Neuron Models` gallery.
|
|
13
|
+
* Fix `open_device` function that would thrown an error if an unsupported SynSense device was connected to the computer.
|
|
14
|
+
|
|
3
15
|
## v3.1.0 (31/10/2025)
|
|
4
16
|
|
|
5
17
|
* 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):
|
|
@@ -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,
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"except ImportError:\n",
|
|
38
38
|
" ! pip install tonic\n",
|
|
39
39
|
" from tonic.datasets.nmnist import NMNIST\n",
|
|
40
|
-
"
|
|
40
|
+
"\n",
|
|
41
41
|
"# download dataset\n",
|
|
42
42
|
"root_dir = \"./NMNIST\"\n",
|
|
43
43
|
"_ = NMNIST(save_to=root_dir, train=True)\n",
|
|
@@ -64,7 +64,9 @@
|
|
|
64
64
|
"sample_data, label = NMNIST(save_to=root_dir, train=False)[0]\n",
|
|
65
65
|
"\n",
|
|
66
66
|
"print(f\"type of data is: {type(sample_data)}\")\n",
|
|
67
|
-
"print(
|
|
67
|
+
"print(\n",
|
|
68
|
+
" f\"time length of sample data is: {sample_data['t'][-1] - sample_data['t'][0]} micro seconds\"\n",
|
|
69
|
+
")\n",
|
|
68
70
|
"print(f\"there are {len(sample_data)} events in the sample data\")\n",
|
|
69
71
|
"print(f\"the label of the sample data is: {label}\")"
|
|
70
72
|
]
|
|
@@ -99,15 +101,26 @@
|
|
|
99
101
|
"# define a CNN model\n",
|
|
100
102
|
"cnn = nn.Sequential(\n",
|
|
101
103
|
" # [2, 34, 34] -> [8, 17, 17]\n",
|
|
102
|
-
" nn.Conv2d(
|
|
104
|
+
" nn.Conv2d(\n",
|
|
105
|
+
" in_channels=2, out_channels=8, kernel_size=(3, 3), padding=(1, 1), bias=False\n",
|
|
106
|
+
" ),\n",
|
|
103
107
|
" nn.ReLU(),\n",
|
|
104
108
|
" nn.AvgPool2d(2, 2),\n",
|
|
105
109
|
" # [8, 17, 17] -> [16, 8, 8]\n",
|
|
106
|
-
" nn.Conv2d(
|
|
110
|
+
" nn.Conv2d(\n",
|
|
111
|
+
" in_channels=8, out_channels=16, kernel_size=(3, 3), padding=(1, 1), bias=False\n",
|
|
112
|
+
" ),\n",
|
|
107
113
|
" nn.ReLU(),\n",
|
|
108
114
|
" nn.AvgPool2d(2, 2),\n",
|
|
109
115
|
" # [16 * 8 * 8] -> [16, 4, 4]\n",
|
|
110
|
-
" nn.Conv2d(
|
|
116
|
+
" nn.Conv2d(\n",
|
|
117
|
+
" in_channels=16,\n",
|
|
118
|
+
" out_channels=16,\n",
|
|
119
|
+
" kernel_size=(3, 3),\n",
|
|
120
|
+
" padding=(1, 1),\n",
|
|
121
|
+
" stride=(2, 2),\n",
|
|
122
|
+
" bias=False,\n",
|
|
123
|
+
" ),\n",
|
|
111
124
|
" nn.ReLU(),\n",
|
|
112
125
|
" # [16 * 4 * 4] -> [10]\n",
|
|
113
126
|
" nn.Flatten(),\n",
|
|
@@ -160,7 +173,9 @@
|
|
|
160
173
|
"\n",
|
|
161
174
|
"# check the transformed data\n",
|
|
162
175
|
"sample_data, label = cnn_train_dataset[0]\n",
|
|
163
|
-
"print(
|
|
176
|
+
"print(\n",
|
|
177
|
+
" f\"The transformed array is in shape [Time-Step, Channel, Height, Width] --> {sample_data.shape}\"\n",
|
|
178
|
+
")"
|
|
164
179
|
]
|
|
165
180
|
},
|
|
166
181
|
{
|
|
@@ -306,8 +321,20 @@
|
|
|
306
321
|
"\n",
|
|
307
322
|
"cnn = cnn.to(device=device)\n",
|
|
308
323
|
"\n",
|
|
309
|
-
"cnn_train_dataloader = DataLoader(
|
|
310
|
-
"
|
|
324
|
+
"cnn_train_dataloader = DataLoader(\n",
|
|
325
|
+
" cnn_train_dataset,\n",
|
|
326
|
+
" batch_size=batch_size,\n",
|
|
327
|
+
" num_workers=num_workers,\n",
|
|
328
|
+
" drop_last=True,\n",
|
|
329
|
+
" shuffle=shuffle,\n",
|
|
330
|
+
")\n",
|
|
331
|
+
"cnn_test_dataloader = DataLoader(\n",
|
|
332
|
+
" cnn_test_dataset,\n",
|
|
333
|
+
" batch_size=batch_size,\n",
|
|
334
|
+
" num_workers=num_workers,\n",
|
|
335
|
+
" drop_last=True,\n",
|
|
336
|
+
" shuffle=shuffle,\n",
|
|
337
|
+
")\n",
|
|
311
338
|
"\n",
|
|
312
339
|
"optimizer = SGD(params=cnn.parameters(), lr=lr)\n",
|
|
313
340
|
"criterion = CrossEntropyLoss()\n",
|
|
@@ -329,7 +356,9 @@
|
|
|
329
356
|
" loss.backward()\n",
|
|
330
357
|
" optimizer.step()\n",
|
|
331
358
|
" # set progressing bar\n",
|
|
332
|
-
" train_p_bar.set_description(
|
|
359
|
+
" train_p_bar.set_description(\n",
|
|
360
|
+
" f\"Epoch {e} - Training Loss: {round(loss.item(), 4)}\"\n",
|
|
361
|
+
" )\n",
|
|
333
362
|
"\n",
|
|
334
363
|
" # validate\n",
|
|
335
364
|
" correct_predictions = []\n",
|
|
@@ -348,9 +377,11 @@
|
|
|
348
377
|
" correct_predictions.append(pred.eq(label.view_as(pred)))\n",
|
|
349
378
|
" # set progressing bar\n",
|
|
350
379
|
" test_p_bar.set_description(f\"Epoch {e} - Testing Model...\")\n",
|
|
351
|
-
"
|
|
380
|
+
"\n",
|
|
352
381
|
" correct_predictions = torch.cat(correct_predictions)\n",
|
|
353
|
-
" print(
|
|
382
|
+
" print(\n",
|
|
383
|
+
" f\"Epoch {e} - accuracy: {correct_predictions.sum().item()/(len(correct_predictions))*100}%\"\n",
|
|
384
|
+
" )"
|
|
354
385
|
]
|
|
355
386
|
},
|
|
356
387
|
{
|
|
@@ -391,7 +422,9 @@
|
|
|
391
422
|
"source": [
|
|
392
423
|
"from sinabs.from_torch import from_model\n",
|
|
393
424
|
"\n",
|
|
394
|
-
"snn_convert = from_model(
|
|
425
|
+
"snn_convert = from_model(\n",
|
|
426
|
+
" model=cnn, input_shape=(2, 34, 34), batch_size=batch_size\n",
|
|
427
|
+
").spiking_model\n",
|
|
395
428
|
"snn_convert"
|
|
396
429
|
]
|
|
397
430
|
},
|
|
@@ -434,7 +467,13 @@
|
|
|
434
467
|
"n_time_steps = 100\n",
|
|
435
468
|
"to_raster = ToFrame(sensor_size=NMNIST.sensor_size, n_time_bins=n_time_steps)\n",
|
|
436
469
|
"snn_test_dataset = NMNIST(save_to=root_dir, train=False, transform=to_raster)\n",
|
|
437
|
-
"snn_test_dataloader = DataLoader(
|
|
470
|
+
"snn_test_dataloader = DataLoader(\n",
|
|
471
|
+
" snn_test_dataset,\n",
|
|
472
|
+
" batch_size=batch_size,\n",
|
|
473
|
+
" num_workers=num_workers,\n",
|
|
474
|
+
" drop_last=True,\n",
|
|
475
|
+
" shuffle=False,\n",
|
|
476
|
+
")\n",
|
|
438
477
|
"\n",
|
|
439
478
|
"snn_convert = snn_convert.to(device)\n",
|
|
440
479
|
"\n",
|
|
@@ -459,7 +498,9 @@
|
|
|
459
498
|
" test_p_bar.set_description(f\"Testing SNN Model...\")\n",
|
|
460
499
|
"\n",
|
|
461
500
|
" correct_predictions = torch.cat(correct_predictions)\n",
|
|
462
|
-
" print(
|
|
501
|
+
" print(\n",
|
|
502
|
+
" f\"accuracy of converted SNN: {correct_predictions.sum().item()/(len(correct_predictions))*100}%\"\n",
|
|
503
|
+
" )"
|
|
463
504
|
]
|
|
464
505
|
},
|
|
465
506
|
{
|
|
@@ -511,20 +552,39 @@
|
|
|
511
552
|
"# just replace the ReLU layer with the sl.IAFSqueeze\n",
|
|
512
553
|
"snn_bptt = nn.Sequential(\n",
|
|
513
554
|
" # [2, 34, 34] -> [8, 17, 17]\n",
|
|
514
|
-
" nn.Conv2d(
|
|
515
|
-
"
|
|
555
|
+
" nn.Conv2d(\n",
|
|
556
|
+
" in_channels=2, out_channels=8, kernel_size=(3, 3), padding=(1, 1), bias=False\n",
|
|
557
|
+
" ),\n",
|
|
558
|
+
" sl.IAFSqueeze(\n",
|
|
559
|
+
" batch_size=batch_size, min_v_mem=-1.0, surrogate_grad_fn=PeriodicExponential()\n",
|
|
560
|
+
" ),\n",
|
|
516
561
|
" nn.AvgPool2d(2, 2),\n",
|
|
517
562
|
" # [8, 17, 17] -> [16, 8, 8]\n",
|
|
518
|
-
" nn.Conv2d(
|
|
519
|
-
"
|
|
563
|
+
" nn.Conv2d(\n",
|
|
564
|
+
" in_channels=8, out_channels=16, kernel_size=(3, 3), padding=(1, 1), bias=False\n",
|
|
565
|
+
" ),\n",
|
|
566
|
+
" sl.IAFSqueeze(\n",
|
|
567
|
+
" batch_size=batch_size, min_v_mem=-1.0, surrogate_grad_fn=PeriodicExponential()\n",
|
|
568
|
+
" ),\n",
|
|
520
569
|
" nn.AvgPool2d(2, 2),\n",
|
|
521
570
|
" # [16 * 8 * 8] -> [16, 4, 4]\n",
|
|
522
|
-
" nn.Conv2d(
|
|
523
|
-
"
|
|
571
|
+
" nn.Conv2d(\n",
|
|
572
|
+
" in_channels=16,\n",
|
|
573
|
+
" out_channels=16,\n",
|
|
574
|
+
" kernel_size=(3, 3),\n",
|
|
575
|
+
" padding=(1, 1),\n",
|
|
576
|
+
" stride=(2, 2),\n",
|
|
577
|
+
" bias=False,\n",
|
|
578
|
+
" ),\n",
|
|
579
|
+
" sl.IAFSqueeze(\n",
|
|
580
|
+
" batch_size=batch_size, min_v_mem=-1.0, surrogate_grad_fn=PeriodicExponential()\n",
|
|
581
|
+
" ),\n",
|
|
524
582
|
" # [16 * 4 * 4] -> [10]\n",
|
|
525
583
|
" nn.Flatten(),\n",
|
|
526
584
|
" nn.Linear(16 * 4 * 4, 10, bias=False),\n",
|
|
527
|
-
" sl.IAFSqueeze(
|
|
585
|
+
" sl.IAFSqueeze(\n",
|
|
586
|
+
" batch_size=batch_size, min_v_mem=-1.0, surrogate_grad_fn=PeriodicExponential()\n",
|
|
587
|
+
" ),\n",
|
|
528
588
|
")\n",
|
|
529
589
|
"\n",
|
|
530
590
|
"# init the model weights\n",
|
|
@@ -585,6 +645,7 @@
|
|
|
585
645
|
"source": [
|
|
586
646
|
"try:\n",
|
|
587
647
|
" from sinabs.exodus import conversion\n",
|
|
648
|
+
"\n",
|
|
588
649
|
" snn_bptt = conversion.sinabs_to_exodus(snn_bptt)\n",
|
|
589
650
|
"except ImportError:\n",
|
|
590
651
|
" print(\"Sinabs-exodus is not intalled.\")\n",
|
|
@@ -668,8 +729,20 @@
|
|
|
668
729
|
"device = \"cuda:0\"\n",
|
|
669
730
|
"shuffle = True\n",
|
|
670
731
|
"\n",
|
|
671
|
-
"snn_train_dataloader = DataLoader(
|
|
672
|
-
"
|
|
732
|
+
"snn_train_dataloader = DataLoader(\n",
|
|
733
|
+
" snn_train_dataset,\n",
|
|
734
|
+
" batch_size=batch_size,\n",
|
|
735
|
+
" num_workers=num_workers,\n",
|
|
736
|
+
" drop_last=True,\n",
|
|
737
|
+
" shuffle=True,\n",
|
|
738
|
+
")\n",
|
|
739
|
+
"snn_test_dataloader = DataLoader(\n",
|
|
740
|
+
" snn_test_dataset,\n",
|
|
741
|
+
" batch_size=batch_size,\n",
|
|
742
|
+
" num_workers=num_workers,\n",
|
|
743
|
+
" drop_last=True,\n",
|
|
744
|
+
" shuffle=False,\n",
|
|
745
|
+
")\n",
|
|
673
746
|
"\n",
|
|
674
747
|
"snn_bptt = snn_bptt.to(device=device)\n",
|
|
675
748
|
"\n",
|
|
@@ -695,15 +768,17 @@
|
|
|
695
768
|
" # backward\n",
|
|
696
769
|
" loss.backward()\n",
|
|
697
770
|
" optimizer.step()\n",
|
|
698
|
-
"
|
|
771
|
+
"\n",
|
|
699
772
|
" # detach the neuron states and activations from current computation graph(necessary)\n",
|
|
700
773
|
" for layer in snn_bptt.modules():\n",
|
|
701
774
|
" if isinstance(layer, sl.StatefulLayer):\n",
|
|
702
775
|
" for name, buffer in layer.named_buffers():\n",
|
|
703
776
|
" buffer.detach_()\n",
|
|
704
|
-
"
|
|
777
|
+
"\n",
|
|
705
778
|
" # set progressing bar\n",
|
|
706
|
-
" train_p_bar.set_description(
|
|
779
|
+
" train_p_bar.set_description(\n",
|
|
780
|
+
" f\"Epoch {e} - BPTT Training Loss: {round(loss.item(), 4)}\"\n",
|
|
781
|
+
" )\n",
|
|
707
782
|
"\n",
|
|
708
783
|
" # validate\n",
|
|
709
784
|
" correct_predictions = []\n",
|
|
@@ -725,9 +800,11 @@
|
|
|
725
800
|
" correct_predictions.append(pred.eq(label.view_as(pred)))\n",
|
|
726
801
|
" # set progressing bar\n",
|
|
727
802
|
" test_p_bar.set_description(f\"Epoch {e} - BPTT Testing Model...\")\n",
|
|
728
|
-
"
|
|
803
|
+
"\n",
|
|
729
804
|
" correct_predictions = torch.cat(correct_predictions)\n",
|
|
730
|
-
" print(
|
|
805
|
+
" print(\n",
|
|
806
|
+
" f\"Epoch {e} - BPTT accuracy: {correct_predictions.sum().item()/(len(correct_predictions))*100}%\"\n",
|
|
807
|
+
" )"
|
|
731
808
|
]
|
|
732
809
|
},
|
|
733
810
|
{
|
|
@@ -775,6 +852,7 @@
|
|
|
775
852
|
"source": [
|
|
776
853
|
"try:\n",
|
|
777
854
|
" from sinabs.exodus import conversion\n",
|
|
855
|
+
"\n",
|
|
778
856
|
" snn_bptt = conversion.exodus_to_sinabs(snn_bptt)\n",
|
|
779
857
|
"except ImportError:\n",
|
|
780
858
|
" print(\"Sinabs-exodus is not intalled.\")\n",
|
|
@@ -812,7 +890,9 @@
|
|
|
812
890
|
"\n",
|
|
813
891
|
"# cpu_snn = snn_convert.to(device=\"cpu\")\n",
|
|
814
892
|
"cpu_snn = snn_bptt.to(device=\"cpu\")\n",
|
|
815
|
-
"dynapcnn = DynapcnnNetwork(
|
|
893
|
+
"dynapcnn = DynapcnnNetwork(\n",
|
|
894
|
+
" snn=cpu_snn, input_shape=(2, 34, 34), discretize=True, dvs_input=False\n",
|
|
895
|
+
")\n",
|
|
816
896
|
"devkit_name = \"speck2fdevkit\"\n",
|
|
817
897
|
"\n",
|
|
818
898
|
"# use the `to` method of DynapcnnNetwork to deploy the SNN to the devkit\n",
|
|
@@ -886,10 +966,10 @@
|
|
|
886
966
|
" samna_event_stream = []\n",
|
|
887
967
|
" for ev in events:\n",
|
|
888
968
|
" spk = samna.speck2f.event.Spike()\n",
|
|
889
|
-
" spk.x = ev[
|
|
890
|
-
" spk.y = ev[
|
|
891
|
-
" spk.timestamp = ev[
|
|
892
|
-
" spk.feature = ev[
|
|
969
|
+
" spk.x = ev[\"x\"]\n",
|
|
970
|
+
" spk.y = ev[\"y\"]\n",
|
|
971
|
+
" spk.timestamp = ev[\"t\"] - events[\"t\"][0]\n",
|
|
972
|
+
" spk.feature = ev[\"p\"]\n",
|
|
893
973
|
" # Spikes will be sent to layer/core #0, since the SNN is deployed on core: [0, 1, 2, 3]\n",
|
|
894
974
|
" spk.layer = 0\n",
|
|
895
975
|
" samna_event_stream.append(spk)\n",
|
|
@@ -897,7 +977,7 @@
|
|
|
897
977
|
" # inference on chip\n",
|
|
898
978
|
" # output_events is also a list of Spike, but each Spike.layer is 3, since layer#3 is the output layer\n",
|
|
899
979
|
" output_events = dynapcnn(samna_event_stream)\n",
|
|
900
|
-
"
|
|
980
|
+
"\n",
|
|
901
981
|
" # use the most frequent output neruon index as the final prediction\n",
|
|
902
982
|
" neuron_index = [each.feature for each in output_events]\n",
|
|
903
983
|
" if len(neuron_index) != 0:\n",
|
|
@@ -905,14 +985,16 @@
|
|
|
905
985
|
" prediction = frequent_counter.most_common(1)[0][0]\n",
|
|
906
986
|
" else:\n",
|
|
907
987
|
" prediction = -1\n",
|
|
908
|
-
" inferece_p_bar.set_description(
|
|
988
|
+
" inferece_p_bar.set_description(\n",
|
|
989
|
+
" f\"label: {label}, prediction: {prediction}, output spikes num: {len(output_events)}\"\n",
|
|
990
|
+
" )\n",
|
|
909
991
|
"\n",
|
|
910
992
|
" if prediction == label:\n",
|
|
911
993
|
" correct_samples += 1\n",
|
|
912
994
|
"\n",
|
|
913
995
|
" test_samples += 1\n",
|
|
914
|
-
"
|
|
915
|
-
"print(f\"On chip inference accuracy: {correct_samples / test_samples}\")
|
|
996
|
+
"\n",
|
|
997
|
+
"print(f\"On chip inference accuracy: {correct_samples / test_samples}\")"
|
|
916
998
|
]
|
|
917
999
|
},
|
|
918
1000
|
{
|
|
@@ -1004,6 +1086,8 @@
|
|
|
1004
1086
|
],
|
|
1005
1087
|
"source": [
|
|
1006
1088
|
"import samnawe\n",
|
|
1089
|
+
"\n",
|
|
1090
|
+
"\n",
|
|
1007
1091
|
"# first define a callback function to modify the devkit configuration\n",
|
|
1008
1092
|
"# the callback function should only has 1 devkit config instance as its input argument\n",
|
|
1009
1093
|
"def config_modify_callback(devkit_cfg):\n",
|
|
@@ -1014,24 +1098,32 @@
|
|
|
1014
1098
|
" devkit_cfg.dvs_layer.raw_monitor_enable = False\n",
|
|
1015
1099
|
" # prevent the events generated by the embedded dvs been feed to the DynapCNN Core.\n",
|
|
1016
1100
|
" devkit_cfg.dvs_layer.pass_sensor_events = False\n",
|
|
1017
|
-
" # point the dvs layer output destination to the core#0
|
|
1101
|
+
" # point the dvs layer output destination to the core#0\n",
|
|
1018
1102
|
" devkit_cfg.dvs_layer.destinations[0].enable = True\n",
|
|
1019
1103
|
" devkit_cfg.dvs_layer.destinations[0].layer = 0\n",
|
|
1020
1104
|
"\n",
|
|
1021
1105
|
" # the callback must return the modified devkit config\n",
|
|
1022
1106
|
" return devkit_cfg\n",
|
|
1023
1107
|
"\n",
|
|
1108
|
+
"\n",
|
|
1024
1109
|
"# close the devkit before reopen\n",
|
|
1025
1110
|
"samna.device.close_device(dynapcnn.samna_device)\n",
|
|
1026
1111
|
"\n",
|
|
1027
1112
|
"# init DynapcnnNetwork instance\n",
|
|
1028
|
-
"dynapcnn = DynapcnnNetwork(
|
|
1113
|
+
"dynapcnn = DynapcnnNetwork(\n",
|
|
1114
|
+
" snn=cpu_snn, input_shape=(2, 34, 34), discretize=True, dvs_input=True\n",
|
|
1115
|
+
")\n",
|
|
1029
1116
|
"\n",
|
|
1030
1117
|
"devkit_name = \"speck2fdevkit\"\n",
|
|
1031
1118
|
"# define which layers output you want to monitor\n",
|
|
1032
1119
|
"layers_to_monitor = [0, 1, 2, 3]\n",
|
|
1033
1120
|
"# pass the callback function into the `.to` method\n",
|
|
1034
|
-
"dynapcnn.to(
|
|
1121
|
+
"dynapcnn.to(\n",
|
|
1122
|
+
" device=devkit_name,\n",
|
|
1123
|
+
" chip_layers_ordering=[0, 1, 2, 3],\n",
|
|
1124
|
+
" monitor_layers=layers_to_monitor,\n",
|
|
1125
|
+
" config_modifier=config_modify_callback,\n",
|
|
1126
|
+
")\n",
|
|
1035
1127
|
"print(f\"The SNN is deployed on the core: {dynapcnn.chip_layers_ordering}\")"
|
|
1036
1128
|
]
|
|
1037
1129
|
},
|
|
@@ -1160,16 +1252,16 @@
|
|
|
1160
1252
|
" samna_event_stream = []\n",
|
|
1161
1253
|
" for ev in events:\n",
|
|
1162
1254
|
" dvs_ev = samna.speck2f.event.DvsEvent()\n",
|
|
1163
|
-
" dvs_ev.x = ev[
|
|
1164
|
-
" dvs_ev.y = ev[
|
|
1165
|
-
" dvs_ev.timestamp = ev[
|
|
1166
|
-
" dvs_ev.p = ev[
|
|
1255
|
+
" dvs_ev.x = ev[\"x\"]\n",
|
|
1256
|
+
" dvs_ev.y = ev[\"y\"]\n",
|
|
1257
|
+
" dvs_ev.timestamp = ev[\"t\"] - events[\"t\"][0]\n",
|
|
1258
|
+
" dvs_ev.p = ev[\"p\"]\n",
|
|
1167
1259
|
" samna_event_stream.append(dvs_ev)\n",
|
|
1168
1260
|
"\n",
|
|
1169
1261
|
" # inference on chip\n",
|
|
1170
1262
|
" # output_events is also a list of Spike, but .layer will have 0, 1, 2, 3 since we choose to monitor all layers' output\n",
|
|
1171
1263
|
" output_events = dynapcnn(samna_event_stream)\n",
|
|
1172
|
-
"
|
|
1264
|
+
"\n",
|
|
1173
1265
|
" # get each layers output spikes\n",
|
|
1174
1266
|
" layer0_spks = [each.feature for each in output_events if each.layer == 0]\n",
|
|
1175
1267
|
" layer1_spks = [each.feature for each in output_events if each.layer == 1]\n",
|
|
@@ -1181,14 +1273,16 @@
|
|
|
1181
1273
|
" prediction = frequent_counter.most_common(1)[0][0]\n",
|
|
1182
1274
|
" else:\n",
|
|
1183
1275
|
" prediction = -1\n",
|
|
1184
|
-
" inferece_p_bar.set_description(
|
|
1276
|
+
" inferece_p_bar.set_description(\n",
|
|
1277
|
+
" f\"label: {label} prediction: {prediction},layer 0 output spks: {len(layer0_spks)},layer 1 output spikes num: {len(layer1_spks)}, layer 2 output spikes num: {len(layer2_spks)},layer 3 output spikes num: {len(layer3_spks)}\"\n",
|
|
1278
|
+
" )\n",
|
|
1185
1279
|
"\n",
|
|
1186
1280
|
" if prediction == label:\n",
|
|
1187
1281
|
" correct_samples += 1\n",
|
|
1188
1282
|
"\n",
|
|
1189
1283
|
" test_samples += 1\n",
|
|
1190
|
-
"
|
|
1191
|
-
"print(f\"On chip inference accuracy: {correct_samples / test_samples}\")
|
|
1284
|
+
"\n",
|
|
1285
|
+
"print(f\"On chip inference accuracy: {correct_samples / test_samples}\")"
|
|
1192
1286
|
]
|
|
1193
1287
|
},
|
|
1194
1288
|
{
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
{
|
|
4
4
|
"cell_type": "markdown",
|
|
5
5
|
"metadata": {
|
|
6
|
+
"collapsed": true,
|
|
6
7
|
"jupyter": {
|
|
7
8
|
"outputs_hidden": true
|
|
8
9
|
}
|
|
@@ -61,7 +62,7 @@
|
|
|
61
62
|
},
|
|
62
63
|
{
|
|
63
64
|
"cell_type": "code",
|
|
64
|
-
"execution_count":
|
|
65
|
+
"execution_count": 1,
|
|
65
66
|
"metadata": {},
|
|
66
67
|
"outputs": [
|
|
67
68
|
{
|
|
@@ -83,13 +84,15 @@
|
|
|
83
84
|
" )\n",
|
|
84
85
|
" (1): DynapcnnLayer(\n",
|
|
85
86
|
" (conv_layer): Conv2d(1, 1, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
|
|
86
|
-
" (spk_layer): IAFSqueeze(spike_threshold=
|
|
87
|
+
" (spk_layer): IAFSqueeze(spike_threshold=Parameter containing:\n",
|
|
88
|
+
" tensor(418.), min_v_mem=Parameter containing:\n",
|
|
89
|
+
" tensor(-418.), batch_size=1, num_timesteps=-1)\n",
|
|
87
90
|
" )\n",
|
|
88
91
|
" )\n",
|
|
89
92
|
")"
|
|
90
93
|
]
|
|
91
94
|
},
|
|
92
|
-
"execution_count":
|
|
95
|
+
"execution_count": 1,
|
|
93
96
|
"metadata": {},
|
|
94
97
|
"output_type": "execute_result"
|
|
95
98
|
}
|
|
@@ -112,7 +115,7 @@
|
|
|
112
115
|
"dynapcnn = DynapcnnNetwork(snn=snn, input_shape=input_shape, dvs_input=True)\n",
|
|
113
116
|
"\n",
|
|
114
117
|
"# deploy to speck devkit, use a different name if you're using a different version of the devkit\n",
|
|
115
|
-
"devkit_name = \"
|
|
118
|
+
"devkit_name = \"speck2fdevkit\"\n",
|
|
116
119
|
"dynapcnn.to(device=devkit_name, monitor_layers=[\"dvs\", -1])"
|
|
117
120
|
]
|
|
118
121
|
},
|
|
@@ -130,7 +133,7 @@
|
|
|
130
133
|
},
|
|
131
134
|
{
|
|
132
135
|
"cell_type": "code",
|
|
133
|
-
"execution_count":
|
|
136
|
+
"execution_count": 2,
|
|
134
137
|
"metadata": {},
|
|
135
138
|
"outputs": [
|
|
136
139
|
{
|
|
@@ -164,7 +167,7 @@
|
|
|
164
167
|
},
|
|
165
168
|
{
|
|
166
169
|
"cell_type": "code",
|
|
167
|
-
"execution_count":
|
|
170
|
+
"execution_count": 3,
|
|
168
171
|
"metadata": {},
|
|
169
172
|
"outputs": [
|
|
170
173
|
{
|
|
@@ -215,7 +218,7 @@
|
|
|
215
218
|
},
|
|
216
219
|
{
|
|
217
220
|
"cell_type": "code",
|
|
218
|
-
"execution_count":
|
|
221
|
+
"execution_count": 4,
|
|
219
222
|
"metadata": {},
|
|
220
223
|
"outputs": [
|
|
221
224
|
{
|
|
@@ -224,6 +227,14 @@
|
|
|
224
227
|
"text": [
|
|
225
228
|
"Network is valid\n"
|
|
226
229
|
]
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
"name": "stderr",
|
|
233
|
+
"output_type": "stream",
|
|
234
|
+
"text": [
|
|
235
|
+
"/home/vleite/.pyenv/versions/sinabs/lib/python3.12/site-packages/sinabs/backend/dynapcnn/chips/dynapcnn.py:252: UserWarning: DVS layer has pooling and is being monitored. Note that pooling will not be reflected in the monitored events.\n",
|
|
236
|
+
" warn(\n"
|
|
237
|
+
]
|
|
227
238
|
}
|
|
228
239
|
],
|
|
229
240
|
"source": [
|
|
@@ -267,7 +278,7 @@
|
|
|
267
278
|
},
|
|
268
279
|
{
|
|
269
280
|
"cell_type": "code",
|
|
270
|
-
"execution_count":
|
|
281
|
+
"execution_count": 5,
|
|
271
282
|
"metadata": {},
|
|
272
283
|
"outputs": [
|
|
273
284
|
{
|
|
@@ -309,7 +320,7 @@
|
|
|
309
320
|
},
|
|
310
321
|
{
|
|
311
322
|
"cell_type": "code",
|
|
312
|
-
"execution_count":
|
|
323
|
+
"execution_count": 6,
|
|
313
324
|
"metadata": {},
|
|
314
325
|
"outputs": [
|
|
315
326
|
{
|
|
@@ -360,7 +371,7 @@
|
|
|
360
371
|
},
|
|
361
372
|
{
|
|
362
373
|
"cell_type": "code",
|
|
363
|
-
"execution_count":
|
|
374
|
+
"execution_count": 7,
|
|
364
375
|
"metadata": {},
|
|
365
376
|
"outputs": [
|
|
366
377
|
{
|
|
@@ -391,7 +402,7 @@
|
|
|
391
402
|
},
|
|
392
403
|
{
|
|
393
404
|
"cell_type": "code",
|
|
394
|
-
"execution_count":
|
|
405
|
+
"execution_count": 8,
|
|
395
406
|
"metadata": {},
|
|
396
407
|
"outputs": [
|
|
397
408
|
{
|
|
@@ -433,7 +444,7 @@
|
|
|
433
444
|
},
|
|
434
445
|
{
|
|
435
446
|
"cell_type": "code",
|
|
436
|
-
"execution_count":
|
|
447
|
+
"execution_count": 9,
|
|
437
448
|
"metadata": {},
|
|
438
449
|
"outputs": [
|
|
439
450
|
{
|
|
@@ -485,7 +496,7 @@
|
|
|
485
496
|
},
|
|
486
497
|
{
|
|
487
498
|
"cell_type": "code",
|
|
488
|
-
"execution_count":
|
|
499
|
+
"execution_count": 10,
|
|
489
500
|
"metadata": {},
|
|
490
501
|
"outputs": [
|
|
491
502
|
{
|
|
@@ -547,7 +558,7 @@
|
|
|
547
558
|
},
|
|
548
559
|
{
|
|
549
560
|
"cell_type": "code",
|
|
550
|
-
"execution_count":
|
|
561
|
+
"execution_count": 11,
|
|
551
562
|
"metadata": {},
|
|
552
563
|
"outputs": [
|
|
553
564
|
{
|
|
@@ -594,7 +605,7 @@
|
|
|
594
605
|
},
|
|
595
606
|
{
|
|
596
607
|
"cell_type": "code",
|
|
597
|
-
"execution_count":
|
|
608
|
+
"execution_count": 12,
|
|
598
609
|
"metadata": {},
|
|
599
610
|
"outputs": [
|
|
600
611
|
{
|
|
@@ -625,7 +636,7 @@
|
|
|
625
636
|
"devkit_cfg_filter.dvs_filter.threshold = 5\n",
|
|
626
637
|
"\n",
|
|
627
638
|
"# set up the Unifirm/IO module\n",
|
|
628
|
-
"devkit_io =
|
|
639
|
+
"devkit_io = dynapcnn.samna_device.get_io_module()\n",
|
|
629
640
|
"\n",
|
|
630
641
|
"# update the configuration\n",
|
|
631
642
|
"dynapcnn.samna_device.get_model().apply_configuration(devkit_cfg_filter)"
|
|
@@ -655,7 +666,7 @@
|
|
|
655
666
|
"name": "python",
|
|
656
667
|
"nbconvert_exporter": "python",
|
|
657
668
|
"pygments_lexer": "ipython3",
|
|
658
|
-
"version": "3.
|
|
669
|
+
"version": "3.12.3"
|
|
659
670
|
}
|
|
660
671
|
},
|
|
661
672
|
"nbformat": 4,
|