Английский | 中文 (китайский)

SpikingJelly-это рамка глубокого обучения с открытым исходным кодом для всплески нейронной сети (SNN) на основе Pytorch.
Документация SpikingJelly написана как на английском, так и на китайском языке: https://spikingjelly.readthedocs.io.
Обратите внимание, что SpikingJelly основан на Pytorch. Пожалуйста, убедитесь, что вы установили Pytorch, прежде чем установить SpikingJelly.
Версия Примечания
Номер ODD версии - это разработка версия, обновленная с помощью репозитория GitHub/Openi. Ровный номер версии является стабильной версией и доступен в PYPI.
DOC по умолчанию предназначен для последней развивающейся версии. Если вы используете стабильную версию, не забудьте переключаться на DOC в соответствующей версии.
Из версии 0.0.0.0.14 , модули, включая clock_driven и event_driven переименованы в переименование. Пожалуйста, обратитесь к учебному пособию, мигрируйте из старых версий.
Если вы используете старую версию SpikingJelly, вы можете столкнуться с некоторыми смертельными ошибками. См. Историю ошибок с релизами для более подробной информации.
Документы для разных версий:
Установите последнюю стабильную версию от PYPI :
pip install spikingjellyУстановите последнюю разработку версии из исходного кода :
От GitHub:
git clone https://github.com/fangwei123456/spikingjelly.git
cd spikingjelly
python setup.py installОт Openi:
git clone https://openi.pcl.ac.cn/OpenI/spikingjelly.git
cd spikingjelly
python setup.py installSpikingJelly удобен для пользователя. Строительство SNN с SpikingJelly так же просто, как строить Ann в Pytorch:
nn . Sequential (
layer . Flatten (),
layer . Linear ( 28 * 28 , 10 , bias = False ),
neuron . LIFNode ( tau = tau , surrogate_function = surrogate . ATan ())
)Эта простая сеть с пуассонским энкодером может достичь 92% точности в наборе тестирования MNIST. Читать См. Учебное пособие для получения более подробной информации. Вы также можете запустить этот код в терминале Python для обучения по классификации Mnist:
python - m spikingjelly . activation_based . examples . lif_fc_mnist - tau 2.0 - T 100 - device cuda : 0 - b 64 - epochs 100 - data - dir < PATH to MNIST > - amp - opt adam - lr 1e-3 - j 8 SpikingJelly реализует относительно общий интерфейс преобразования Ann-SNN. Пользователи могут реализовать преобразование через Pytorch. Более того, пользователи могут настроить режим преобразования.
class ANN ( nn . Module ):
def __init__ ( self ):
super (). __init__ ()
self . network = nn . Sequential (
nn . Conv2d ( 1 , 32 , 3 , 1 ),
nn . BatchNorm2d ( 32 , eps = 1e-3 ),
nn . ReLU (),
nn . AvgPool2d ( 2 , 2 ),
nn . Conv2d ( 32 , 32 , 3 , 1 ),
nn . BatchNorm2d ( 32 , eps = 1e-3 ),
nn . ReLU (),
nn . AvgPool2d ( 2 , 2 ),
nn . Conv2d ( 32 , 32 , 3 , 1 ),
nn . BatchNorm2d ( 32 , eps = 1e-3 ),
nn . ReLU (),
nn . AvgPool2d ( 2 , 2 ),
nn . Flatten (),
nn . Linear ( 32 , 10 )
)
def forward ( self , x ):
x = self . network ( x )
return xЭта простая сеть с аналоговым кодированием может достичь точности на 98,44% после преобразования в наборе данных тестовых данных MNIST. Прочитайте учебник для более подробной информации. Вы также можете запустить этот код в терминале Python для обучения классификации MNIST с использованием преобразованной модели:
> >> import spikingjelly . activation_based . ann2snn . examples . cnn_mnist as cnn_mnist
> >> cnn_mnist . main () SpikingJelly предоставляет две бэкэнды для многоэтапных нейронов. Вы можете использовать бэкэнд torch для легкого кодирования и отладки и использовать Backend cupy для более высокой скорости обучения.
На следующем рисунке сравнивается время выполнения двух бэкэндов многоэтапных нейронов LIF ( float32 ):

float16 также предоставляется бэкэнд cupy и может использоваться в автоматической смешанной точной тренировке.
Чтобы использовать cupy Backend, пожалуйста, установите Cupy. Обратите внимание, что бэкэнд cupy поддерживает только GPU, в то время как бэкэнд torch поддерживает как процессор, так и графический процессор.
Так же просто, как использование Pytorch.
> >> net = nn . Sequential ( layer . Flatten (), layer . Linear ( 28 * 28 , 10 , bias = False ), neuron . LIFNode ( tau = tau ))
> >> net = net . to ( device ) # Can be CPU or CUDA devices SpikingJelly включает в себя следующие нейроморфные наборы данных:
| Набор данных | Источник |
|---|---|
| ASL-DVS | Классификация объектов на основе графика для чувствительности нейроморфного зрения |
| Cifar10-dvs | CIFAR10-DVS: набор данных потока событий для классификации объектов |
| DVS128 жест | Система распознавания жестов с низкой мощностью. |
| Es-Imagenet | ES-IMAGENET: набор данных классификации Million Stream для просмотра нейронных сетей |
| Хардви | ХардВ: пересмотр распознавания деятельности человека с динамическими датчиками зрения |
| N-Caltech101 | Преобразование наборов данных статического изображения в наборы нейроморфных данных с использованием саккад |
| N-Mnist | Преобразование наборов данных статического изображения в наборы нейроморфных данных с использованием саккад |
| Жест NAV | Распознавание жестов на основе событий с динамическим подавлением фона с использованием вычислительных возможностей смартфонов |
| Поиск цифр Гейдельберга (SHD) | Наборы данных Гейдельберга для систематической оценки всплесков нейронных сетей |
| DVS-LIP | Многоцелевые пространственные функции воспринимаются сеть для чтения губ на основе событий |
Пользователи могут использовать как данные о происхождении, так и данные кадры, интегрированные SpikingJelly:
import torch
from torch . utils . data import DataLoader
from spikingjelly . datasets import pad_sequence_collate , padded_sequence_mask
from spikingjelly . datasets . dvs128_gesture import DVS128Gesture
# Set the root directory for the dataset
root_dir = 'D:/datasets/DVS128Gesture'
# Load event dataset
event_set = DVS128Gesture ( root_dir , train = True , data_type = 'event' )
event , label = event_set [ 0 ]
# Print the keys and their corresponding values in the event data
for k in event . keys ():
print ( k , event [ k ])
# t [80048267 80048277 80048278 ... 85092406 85092538 85092700]
# x [49 55 55 ... 60 85 45]
# y [82 92 92 ... 96 86 90]
# p [1 0 0 ... 1 0 0]
# label 0
# Load a dataset with fixed frame numbers
fixed_frames_number_set = DVS128Gesture ( root_dir , train = True , data_type = 'frame' , frames_number = 20 , split_by = 'number' )
# Randomly select two frames and print their shapes
rand_index = torch . randint ( low = 0 , high = fixed_frames_number_set . __len__ (), size = [ 2 ])
for i in rand_index :
frame , label = fixed_frames_number_set [ i ]
print ( f'frame[ { i } ].shape=[T, C, H, W]= { frame . shape } ' )
# frame[308].shape=[T, C, H, W]=(20, 2, 128, 128)
# frame[453].shape=[T, C, H, W]=(20, 2, 128, 128)
# Load a dataset with a fixed duration and print the shapes of the first 5 samples
fixed_duration_frame_set = DVS128Gesture ( root_dir , data_type = 'frame' , duration = 1000000 , train = True )
for i in range ( 5 ):
x , y = fixed_duration_frame_set [ i ]
print ( f'x[ { i } ].shape=[T, C, H, W]= { x . shape } ' )
# x[0].shape=[T, C, H, W]=(6, 2, 128, 128)
# x[1].shape=[T, C, H, W]=(6, 2, 128, 128)
# x[2].shape=[T, C, H, W]=(5, 2, 128, 128)
# x[3].shape=[T, C, H, W]=(5, 2, 128, 128)
# x[4].shape=[T, C, H, W]=(7, 2, 128, 128)
# Create a data loader for the fixed duration frame dataset and print the shapes and sequence lengths
train_data_loader = DataLoader ( fixed_duration_frame_set , collate_fn = pad_sequence_collate , batch_size = 5 )
for x , y , x_len in train_data_loader :
print ( f'x.shape=[N, T, C, H, W]= { tuple ( x . shape ) } ' )
print ( f'x_len= { x_len } ' )
mask = padded_sequence_mask ( x_len ) # mask.shape = [T, N]
print ( f'mask= n { mask . t (). int () } ' )
break
# x.shape=[N, T, C, H, W]=(5, 7, 2, 128, 128)
# x_len=tensor([6, 6, 5, 5, 7])
# mask=
# tensor([[1, 1, 1, 1, 1, 1, 0],
# [1, 1, 1, 1, 1, 1, 0],
# [1, 1, 1, 1, 1, 0, 0],
# [1, 1, 1, 1, 1, 0, 0],
# [1, 1, 1, 1, 1, 1, 1]], dtype=torch.int32)Больше наборов данных будет включено в будущее.
Если для некоторых пользователей не доступны ссылки на некоторые наборы данных, пользователи могут загрузить из Openi Mirror:
https://openi.pcl.ac.cn/openi/spikingjelly/datasets?type=0
Все наборы данных, сохраненные в Openi Mirror, допустимы по их лицензии или соглашению автора.
SpikingJelly предоставляет сложные учебные пособия. Вот несколько учебных пособий:
| Фигура | Учебник |
|---|---|
![]() | Основная концепция |
![]() | Нейрон |
![]() | Одиночный полностью подключенный слой SNN для классификации mnist |
![]() | Сверточный SNN для классификации fmnist |
![]() | Ann2snn |
![]() | Нейроморфные наборы данных обработка |
![]() | Классифицируйте жест DVS |
![]() | Повторяющееся соединение и синапс состояния |
![]() | Обучение STDP |
![]() | Подкрепление обучения |
Другие учебники, которые здесь не указаны, также доступны в документе https://spikingjelly.readthedocs.io.
Публикации, использующие SpikingJelly, записаны в публикациях. Если вы используете SpikingJelly в своей бумаге, вы также можете добавить его в этот таблицу по запросу.
Если вы используете SpikingJelly в своей работе, пожалуйста, укажите это следующим образом:
@article{
doi:10.1126/sciadv.adi1480,
author = {Wei Fang and Yanqi Chen and Jianhao Ding and Zhaofei Yu and Timothée Masquelier and Ding Chen and Liwei Huang and Huihui Zhou and Guoqi Li and Yonghong Tian },
title = {SpikingJelly: An open-source machine learning infrastructure platform for spike-based intelligence},
journal = {Science Advances},
volume = {9},
number = {40},
pages = {eadi1480},
year = {2023},
doi = {10.1126/sciadv.adi1480},
URL = {https://www.science.org/doi/abs/10.1126/sciadv.adi1480},
eprint = {https://www.science.org/doi/pdf/10.1126/sciadv.adi1480},
abstract = {Spiking neural networks (SNNs) aim to realize brain-inspired intelligence on neuromorphic chips with high energy efficiency by introducing neural dynamics and spike properties. As the emerging spiking deep learning paradigm attracts increasing interest, traditional programming frameworks cannot meet the demands of automatic differentiation, parallel computation acceleration, and high integration of processing neuromorphic datasets and deployment. In this work, we present the SpikingJelly framework to address the aforementioned dilemma. We contribute a full-stack toolkit for preprocessing neuromorphic datasets, building deep SNNs, optimizing their parameters, and deploying SNNs on neuromorphic chips. Compared to existing methods, the training of deep SNNs can be accelerated 11×, and the superior extensibility and flexibility of SpikingJelly enable users to accelerate custom models at low costs through multilevel inheritance and semiautomatic code generation. SpikingJelly paves the way for synthesizing truly energy-efficient SNN-based machine intelligence systems, which will enrich the ecology of neuromorphic computing. Motivation and introduction of the software framework SpikingJelly for spiking deep learning.}}
Вы можете прочитать проблемы и решить проблемы, которые будут решены, и последние планы разработки. Мы приветствуем всех пользователей присоединиться к обсуждению планов разработки, решать проблемы и отправлять запросы на привлечение.
Не все документы API написаны как на английском, так и на китайском языке. Мы приветствуем, как пользователи завершают перевод (от английского на китайский или от китайского на английский).
Multimedia Learning Group, Институт цифровых СМИ (NELVT), Пекинский университет и лаборатория Peng Cheng являются основными разработчиками SpikingJelly.


Список разработчиков можно найти здесь.