
สมองเป็นสถานที่ที่สมบูรณ์แบบในการมองหาแรงบันดาลใจในการพัฒนาเครือข่ายประสาทที่มีประสิทธิภาพมากขึ้น หนึ่งในความแตกต่างที่สำคัญกับการเรียนรู้ลึกที่ทันสมัยคือสมองเข้ารหัสข้อมูลในหนามมากกว่าการเปิดใช้งานอย่างต่อเนื่อง Snntorch เป็นแพ็คเกจ Python สำหรับการเรียนรู้จากการไล่ระดับสีด้วยเครือข่ายประสาท มันขยายความสามารถของ Pytorch โดยใช้ประโยชน์จากการคำนวณเทนเซอร์แบบเร่งความเร็ว GPU และนำไปใช้กับเครือข่ายของเซลล์ประสาท spiking แบบจำลองเซลล์ประสาท spiking ที่ออกแบบไว้ล่วงหน้านั้นถูกรวมเข้าด้วยกันอย่างราบรื่นภายในกรอบ Pytorch และสามารถถือว่าเป็นหน่วยเปิดใช้งานซ้ำ

หากคุณชอบโครงการนี้โปรดพิจารณานำแสดงโดย repo นี้เนื่องจากเป็นวิธีที่ง่ายที่สุดและดีที่สุดในการสนับสนุน
หากคุณมีปัญหาความคิดเห็นหรือกำลังมองหาคำแนะนำเกี่ยวกับการฝึกอบรมเครือข่ายประสาทคุณสามารถเปิดปัญหาการสนทนาหรือแชทในช่อง Discord ของเรา
Snntorch มีส่วนประกอบต่อไปนี้:
| ส่วนประกอบ | คำอธิบาย |
|---|---|
| snntorch | ห้องสมุดเซลล์ประสาท spiking เช่น Torch.nn รวมเข้ากับ Autograd อย่างลึกซึ้ง |
| snntorch.export | เปิดใช้งานการเข้ากันได้ข้ามกับไลบรารี SNN อื่น ๆ ผ่าน NIR |
| snntorch.functional | การดำเนินการทางคณิตศาสตร์ทั่วไปเกี่ยวกับ spikes, เช่นการสูญเสีย, การทำให้เป็นปกติ ฯลฯ |
| snntorch.spikegen | ห้องสมุดสำหรับการสร้างสไปค์และการแปลงข้อมูล |
| snntorch.spikeplot | เครื่องมือสร้างภาพสำหรับข้อมูลที่ใช้สไปค์โดยใช้ Matplotlib และเซลลูลอยด์ |
| snntorch.surrogate | ฟังก์ชั่นการไล่ระดับสีแทนตัวเลือก |
| snntorch.utils | ฟังก์ชั่นชุดข้อมูลชุดข้อมูล |
Snntorch ได้รับการออกแบบให้ใช้อย่างสังหรณ์ใจกับ pytorch ราวกับว่าเซลล์ประสาท spiking แต่ละตัวเป็นเพียงการเปิดใช้งานอีกครั้งในลำดับของเลเยอร์ ดังนั้นจึงไม่เชื่อเรื่องเลเยอร์ที่เชื่อมต่ออย่างเต็มที่เลเยอร์ convolutional การเชื่อมต่อที่เหลือ ฯลฯ
ในปัจจุบันโมเดลเซลล์ประสาทจะถูกแทนด้วยฟังก์ชั่นซ้ำซึ่งขจัดความจำเป็นในการเก็บร่องรอยที่มีศักยภาพของเมมเบรนสำหรับเซลล์ประสาททั้งหมดในระบบเพื่อคำนวณการไล่ระดับสี ความต้องการแบบลีนของ Snntorch ช่วยให้เครือข่ายขนาดเล็กและขนาดใหญ่ได้รับการฝึกฝนอย่างรวดเร็วใน CPU ตามที่จำเป็น โดยมีเงื่อนไขว่าโมเดลเครือข่ายและเทนเซอร์จะถูกโหลดลงบน CUDA Snntorch ใช้ประโยชน์จากการเร่งความเร็วของ GPU ในลักษณะเดียวกับ Pytorch
หากคุณพบว่า snntorch มีประโยชน์ในงานของคุณโปรดอ้างอิงแหล่งข้อมูลต่อไปนี้:
Jason K. Eshraghian, Max Ward, Emre Neftci, Xinxin Wang, Gregor Lenz, Girish Dwivedi, Mohammed Bennamoun, Doo Seok Jeong และ Wei D. Lu“ ฝึกอบรมเครือข่ายประสาท การดำเนินการของ IEEE, 111 (9) กันยายน 2023
@article{eshraghian2021training,
title = {Training spiking neural networks using lessons from deep learning},
author = {Eshraghian, Jason K and Ward, Max and Neftci, Emre and Wang, Xinxin
and Lenz, Gregor and Dwivedi, Girish and Bennamoun, Mohammed and
Jeong, Doo Seok and Lu, Wei D},
journal = {Proceedings of the IEEE},
volume = {111},
number = {9},
pages = {1016--1054},
year = {2023}
}แจ้งให้เราทราบหากคุณใช้ snntorch ในงานที่น่าสนใจการวิจัยหรือบล็อกเพราะเราชอบที่จะได้ยินเพิ่มเติมเกี่ยวกับเรื่องนี้! ติดต่อที่ [email protected]
ต้องติดตั้งแพ็คเกจต่อไปนี้เพื่อใช้ Snntorch:
พวกเขาจะติดตั้งโดยอัตโนมัติหากติดตั้ง Snntorch โดยใช้คำสั่ง PIP ตรวจสอบให้แน่ใจว่ามีการติดตั้งคบเพลิงเวอร์ชันที่ถูกต้องสำหรับระบบของคุณเพื่อเปิดใช้งานความเข้ากันได้ของ CUDA
รันต่อไปนี้เพื่อติดตั้ง:
$ python
$ pip install snntorchในการติดตั้ง snntorch จากแหล่งที่มาแทน:
$ git clone https://github.com/jeshraghian/snntorch $ cd snntorch $ python setup.py ติดตั้ง
ในการติดตั้ง snntorch ด้วย conda:
$ conda Install -c conda -forge snntorch
ในการติดตั้งสำหรับหน่วยประมวลผลอัจฉริยะ (IPU) โดยใช้ตัวเร่งความเร็วของ GraphCore:
$ pip ติดตั้ง snntorch-ipu
API ที่สมบูรณ์มีให้ที่นี่ ตัวอย่างมีการจัดทำแบบฝึกหัดและสมุดบันทึก colab
นี่คือสองสามวิธีที่คุณสามารถเริ่มต้นด้วย snntorch:
สำหรับตัวอย่างด่วนในการเรียกใช้ snntorch ดูตัวอย่างต่อไปนี้หรือทดสอบสมุดบันทึก QuickStart:
import torch , torch . nn as nn
import snntorch as snn
from snntorch import surrogate
from snntorch import utils
num_steps = 25 # number of time steps
batch_size = 1
beta = 0.5 # neuron decay rate
spike_grad = surrogate . fast_sigmoid () # surrogate gradient
net = nn . Sequential (
nn . Conv2d ( 1 , 8 , 5 ),
nn . MaxPool2d ( 2 ),
snn . Leaky ( beta = beta , init_hidden = True , spike_grad = spike_grad ),
nn . Conv2d ( 8 , 16 , 5 ),
nn . MaxPool2d ( 2 ),
snn . Leaky ( beta = beta , init_hidden = True , spike_grad = spike_grad ),
nn . Flatten (),
nn . Linear ( 16 * 4 * 4 , 10 ),
snn . Leaky ( beta = beta , init_hidden = True , spike_grad = spike_grad , output = True )
)
data_in = torch . rand ( num_steps , batch_size , 1 , 28 , 28 ) # random input data
spike_recording = [] # record spikes over time
utils . reset ( net ) # reset/initialize hidden states for all neurons
for step in range ( num_steps ): # loop over time
spike , state = net ( data_in [ step ]) # one time step of forward-pass
spike_recording . append ( spike ) # record spikes in list หากคุณต้องการเรียนรู้พื้นฐานทั้งหมดของการฝึกอบรมเครือข่ายประสาทตั้งแต่โมเดลเซลล์ประสาทไปจนถึงรหัสระบบประสาทจนถึง backpropagation ซีรีส์การสอน Snntorch เป็นสถานที่ที่ยอดเยี่ยมในการเริ่มต้น ประกอบด้วยสมุดบันทึกแบบโต้ตอบพร้อมคำอธิบายที่สมบูรณ์ซึ่งจะทำให้คุณมีความเร็ว
| การสอน | ชื่อ | ลิงค์ colab |
|---|---|---|
| บทช่วยสอน 1 | การเข้ารหัสสไปค์ด้วย snntorch | |
| บทช่วยสอน 2 | การรั่วไหลของเซลล์ประสาทและไฟ | |
| บทช่วยสอน 3 | เครือข่ายประสาทแบบ Spiking Feedforward | |
| บทช่วยสอน 4 | ลำดับที่ 2 ของรุ่น Spiking Neuron (ไม่บังคับ) | |
| บทช่วยสอน 5 | การฝึกอบรมเครือข่ายประสาทด้วย snntorch | |
| บทช่วยสอน 6 | การไล่ระดับสีรองลงมาใน snn convolutional | |
| บทช่วยสอน 7 | ชุดข้อมูล Neuromorphic พร้อม tonic + snntorch |
| บทช่วยสอนขั้นสูง | ลิงค์ colab |
|---|---|
| การเข้ารหัสประชากร | |
| การถดถอย: ส่วนที่ 1 - เมมเบรนการเรียนรู้ที่มีศักยภาพกับเซลล์ประสาท LIF | |
| การถดถอย: ส่วนที่สอง - การจำแนกประเภทการถดถอยด้วยเซลล์ประสาท LIF ที่เกิดขึ้นอีก | |
| เร่ง Snntorch บน IPUS | - |
Snntorch ได้รับการปรับให้เหมาะสมสำหรับเครื่องเร่งความเร็ว IPU ของ GraphCore ในการติดตั้ง build -build ของ snntorch:
$ pip ติดตั้ง snntorch-ipu
การดำเนินการที่กำหนดเองระดับต่ำสำหรับความเข้ากันได้ของ IPU จะถูกรวบรวมโดยอัตโนมัติเมื่อ import snntorch ถูกเรียกเป็นครั้งแรก
เมื่ออัปเดต Poplar SDK การดำเนินการเหล่านี้อาจต้องมีการคอมไพล์ใหม่ สิ่งนี้สามารถทำได้โดยการติดตั้ง snntorch-ipu ใหม่หรือลบไฟล์ในไดเรกทอรีพื้นฐานด้วยส่วนขยาย. SO
โมดูล snntorch.backprop และฟังก์ชั่นหลายอย่างจาก snntorch.functional และ snntorch.surrogate ไม่เข้ากันกับ IPUs แต่สามารถสร้างขึ้นใหม่ได้โดยใช้ pytorch primitives
ข้อกำหนดเพิ่มเติมรวมถึง:
อ้างถึงเอกสารประกอบของ GraphCore สำหรับคำแนะนำการติดตั้งของ Poptorch และ Poplar SDK
หน้าแรกสำหรับโครงการ SNNTORCH IPU สามารถพบได้ที่นี่ มีการสอนสำหรับการฝึกอบรม SNNs ที่นี่
หากคุณพร้อมที่จะมีส่วนร่วมใน Snntorch คำแนะนำในการทำเช่นนั้นสามารถพบได้ที่นี่
Snntorch ปัจจุบันได้รับการดูแลโดยกลุ่มคอมพิวเตอร์ Neuromorphic UCSC มันได้รับการพัฒนาครั้งแรกโดย Jason K. Eshraghian ในกลุ่ม LU (University of Michigan)
มีการบริจาคเพิ่มเติมโดย Vincent Sun, Peng Zhou, Ridger Zhu, Alexander Henkes, Steven Abreu, Xinxin Wang, Sreyes Venkatesh, Gekkom และ Emre Neftci
ซอร์สโค้ด Snntorch ถูกเผยแพร่ภายใต้ข้อกำหนดของใบอนุญาต MIT เอกสารของ Snntorch ได้รับใบอนุญาตภายใต้ใบอนุญาตที่มีการระบุแหล่งที่มาของ Creative Commons เหมือนกัน 3.0 ใบอนุญาตที่ไม่ได้รับการดูแล (CC BY-SA 3.0)