الإنجليزية | 中文 (صينية)

Spikingjelly هو إطار عمل عميق مفتوح المصدر لشبكة Neural Neturn (SNN) على أساس Pytorch.
تتم كتابة وثائق Spikingjelly باللغة الإنجليزية والصينية: https://spikingjelly.readthedocs.io.
لاحظ أن Spikingjelly يعتمد على Pytorch. يرجى التأكد من تثبيت Pytorch قبل تثبيت Spikingjelly.
ملاحظات الإصدار
رقم الإصدار الفردي هو الإصدار التطوري ، الذي تم تحديثه باستخدام مستودع GitHub/Openi. رقم الإصدار الزوجي هو الإصدار المستقر وهو متاح في PYPI.
DOC الافتراضي هو لأحدث إصدار تطوير. إذا كنت تستخدم الإصدار المستقر ، فلا تنسى التبديل إلى المستند في الإصدار المقابل.
من الإصدار 0.0.0.0.14 ، تتم إعادة تسمية وحدات بما في ذلك clock_driven و event_driven . يرجى الرجوع إلى البرنامج التعليمي للترحيل من الإصدارات القديمة.
إذا كنت تستخدم إصدارًا قديمًا من Spikingjelly ، فقد تواجه بعض الأخطاء المميتة. ارجع إلى تاريخ الأخطاء مع الإصدارات لمزيد من التفاصيل.
مستندات للإصدارات المختلفة:
قم بتثبيت آخر إصدار مستقر من Pypi :
pip install spikingjellyقم بتثبيت أحدث إصدار من الكود المصدر :
من جيثب:
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 بسيط مثل بناء آن في Pytorch:
nn . Sequential (
layer . Flatten (),
layer . Linear ( 28 * 28 , 10 , bias = False ),
neuron . LIFNode ( tau = tau , surrogate_function = surrogate . ATan ())
)يمكن أن تحقق هذه الشبكة البسيطة مع تشفير Poisson دقة 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 السالحة للاستخدام لترميز وتصحيح الأخطاء واستخدام الواجهة الخلفية cupy بسهولة لسرعة التدريب بشكل أسرع.
يقارن الشكل التالي وقت تنفيذ اثنين من الخلايا الخلفية من الخلايا العصبية LIF متعددة الخطوات ( float32 ):

يتم توفير float16 أيضًا بواسطة الواجهة الخلفية cupy ويمكن استخدامها في التدريب التلقائي المختلط الدقيق.
لاستخدام الواجهة الخلفية cupy ، يرجى تثبيت 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: مجموعة بيانات التصنيف المليون من الأحداث للشبكات العصبية |
| hardvs | Hardvs: إعادة النظر في التعرف على النشاط البشري مع أجهزة استشعار الرؤية الديناميكية |
| N-Caltech101 | تحويل مجموعات بيانات الصور الثابتة إلى مجموعات بيانات الشكل العصبي باستخدام saccades |
| n-mnist | تحويل مجموعات بيانات الصور الثابتة إلى مجموعات بيانات الشكل العصبي باستخدام saccades |
| إيماءة البحرية | التعرف على الإيماءات القائمة على الأحداث مع قمع الخلفية الديناميكي باستخدام إمكانيات الهاتف الذكي الحسابي |
| أرقام Heidelberg أرقام (SHD) | مجموعات بيانات Heidelberg للتقييم المنهجي للشبكات العصبية المتساقطة |
| DVS-lip | الميزات المكانية والزمنية المتعددة الحبيبات الشبكة المتصورة لقراءة الشفاه القائمة على الأحداث |
يمكن للمستخدمين استخدام كل من بيانات حدث Origin وبيانات الإطار المدمجة بواسطة 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.


يمكن العثور على قائمة المطورين هنا.