
Otak adalah tempat yang sempurna untuk mencari inspirasi untuk mengembangkan jaringan saraf yang lebih efisien. Salah satu perbedaan utama dengan pembelajaran mendalam modern adalah bahwa otak mengkodekan informasi dalam lonjakan daripada aktivasi berkelanjutan. Snntorch adalah paket Python untuk melakukan pembelajaran berbasis gradien dengan spiking neural networks. Ini memperluas kemampuan Pytorch, mengambil keuntungan dari perhitungan tensor yang dipercepat GPU dan menerapkannya pada jaringan neuron spiking. Model neuron spiking pra-dirancang diintegrasikan dengan mulus dalam kerangka pytorch dan dapat diperlakukan sebagai unit aktivasi berulang.

Jika Anda menyukai proyek ini, harap pertimbangkan untuk membintangi repo ini karena ini adalah cara termudah dan terbaik untuk mendukungnya.
Jika Anda memiliki masalah, komentar, atau sedang mencari saran tentang pelatihan spiking neural networks, Anda dapat membuka masalah, diskusi, atau mengobrol di saluran perselisihan kami.
Snntorch berisi komponen berikut:
| Komponen | Keterangan |
|---|---|
| snntorch | Perpustakaan neuron spiking seperti Torch.nn, sangat terintegrasi dengan Autograd |
| snntorch.Export | Mengaktifkan kompatibilitas silang dengan perpustakaan SNN lainnya melalui NIR |
| snntorch.functional | Operasi aritmatika umum pada paku, misalnya, kehilangan, regularisasi dll. |
| snntorch.spikegen | perpustakaan untuk pembuatan lonjakan dan konversi data |
| snntorch.spikeplot | Alat visualisasi untuk data berbasis lonjakan menggunakan matplotlib dan seluloid |
| snntorch.surrogate | fungsi gradien pengganti opsional |
| snntorch.utils | Fungsi Utilitas Dataset |
Snntorch dirancang untuk digunakan secara intuitif dengan pytorch, seolah -olah masing -masing neuron spiking hanyalah aktivasi lain dalam urutan lapisan. Oleh karena itu, agnostik untuk lapisan yang terhubung sepenuhnya, lapisan konvolusional, koneksi residual, dll.
Saat ini, model neuron diwakili oleh fungsi rekursif yang menghilangkan kebutuhan untuk menyimpan jejak potensial membran untuk semua neuron dalam suatu sistem untuk menghitung gradien. Persyaratan lean snntorch memungkinkan jaringan kecil dan besar dilatih dengan baik di CPU, jika diperlukan. Asalkan model jaringan dan tensor dimuat ke cuda, snntorch mengambil keuntungan dari akselerasi GPU dengan cara yang sama seperti pytorch.
Jika Anda menemukan snntorch berguna dalam pekerjaan Anda, silakan kutip sumber berikut:
Jason K. Eshraghian, Max Ward, Emre Neftci, Xinxin Wang, Gregor Lenz, Girish Dwivedi, Mohammed Bennamoun, Doo Seok Jeong, dan Wei D. Lu “melatih jaringan saraf yang menggunakan pelajaran dari pembelajaran yang mendalam”. Prosiding IEEE, 111 (9) September 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}
}Beri tahu kami jika Anda menggunakan snntorch dalam pekerjaan, penelitian, atau blog yang menarik, karena kami ingin mendengar lebih banyak tentang itu! Jangkau di [email protected].
Paket -paket berikut perlu diinstal untuk menggunakan snntorch:
Mereka secara otomatis diinstal jika snntorch diinstal menggunakan perintah PIP. Pastikan versi obor yang benar diinstal untuk sistem Anda untuk memungkinkan kompatibilitas CUDA.
Jalankan yang berikut untuk menginstal:
$ python
$ pip install snntorchUntuk menginstal snntorch dari sumber sebagai gantinya:
$ git clone https://github.com/jeshraghian/snntorch $ CD snntorch $ python setup.py install
Untuk menginstal snntorch dengan conda:
$ conda instal -c conda -forge snntorch
Untuk menginstal untuk Build Berbasis Unit Pemrosesan Cerdas (IPU) menggunakan akselerator GraphCore:
$ pip instal snntorch-ipu
API lengkap tersedia di sini. Contoh, tutorial, dan notebook Colab disediakan.
Berikut adalah beberapa cara Anda bisa memulai dengan snntorch:
Untuk contoh cepat untuk menjalankan snntorch, lihat cuplikan berikut, atau uji notebook 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 Jika Anda ingin mempelajari semua dasar -dasar pelatihan melintasi jaringan saraf, dari model neuron, hingga kode saraf, hingga backpropagation, seri tutorial Snntorch adalah tempat yang tepat untuk memulai. Ini terdiri dari buku catatan interaktif dengan penjelasan lengkap yang dapat membuat Anda mempercepat.
| Tutorial | Judul | Tautan colab |
|---|---|---|
| Tutorial 1 | Spike encoding dengan snntorch | |
| Tutorial 2 | The Cheaky Integrate dan Fire Neuron | |
| Tutorial 3 | Jaringan saraf spiking feedforward | |
| Tutorial 4 | Model neuron spiking urutan ke -2 (opsional) | |
| Tutorial 5 | Pelatihan Spiking Neural Networks dengan Snntorch | |
| Tutorial 6 | Surrogate Gradient Descent dalam SNN konvolusional | |
| Tutorial 7 | Dataset neuromorfik dengan tonik + snntorch |
| Tutorial lanjutan | Tautan colab |
|---|---|
| Pengkodean populasi | |
| Regresi: Bagian I - Pembelajaran potensial membran dengan neuron LIF | |
| Regresi: Bagian II - Klasifikasi berbasis regresi dengan neuron LIF berulang | |
| Mempercepat snntorch di ipus | - - |
Snntorch telah dioptimalkan untuk akselerator IPU Graphcore. Untuk menginstal Snntorch berbasis IPU:
$ pip instal snntorch-ipu
Operasi kustom tingkat rendah untuk kompatibilitas IPU akan dikompilasi secara otomatis ketika import snntorch dipanggil untuk pertama kalinya.
Saat memperbarui SDK poplar, operasi ini mungkin perlu dikompilasi ulang. Ini dapat dilakukan dengan menginstal ulang snntorch-ipu , atau menghapus file di direktori dasar dengan ekstensi .so.
Modul snntorch.backprop , dan beberapa fungsi dari snntorch.functional dan snntorch.surrogate , tidak sesuai dengan IPU, tetapi dapat diciptakan kembali menggunakan primitif Pytorch.
Persyaratan tambahan meliputi:
Lihat dokumentasi GraphCore untuk instruksi instalasi PopTorch dan Poplar SDK.
Beranda untuk proyek IPU Snntorch dapat ditemukan di sini. Tutorial untuk pelatihan SNN disediakan di sini.
Jika Anda siap berkontribusi pada snntorch, instruksi untuk melakukannya dapat ditemukan di sini.
Snntorch saat ini dipelihara oleh kelompok komputasi neuromorfik UCSC. Awalnya dikembangkan oleh Jason K. Eshraghian di Lu Group (University of Michigan).
Kontribusi tambahan dibuat oleh Vincent Sun, Peng Zhou, Ridger Zhu, Alexander Henkes, Steven Abreu, Xinxin Wang, Sreyes Venkatesh, Gekkom, dan Emre Neftci.
Kode Sumber Snntorch diterbitkan di bawah ketentuan lisensi MIT. Dokumentasi Snntorch dilisensikan di bawah Lisensi Atribusi Creative Commons yang sama-sama 3.0 Lisensi yang Tidak Dipaksa (CC BY-SA 3.0).