
Paket Python yang digunakan untuk mensimulasikan spiking neural networks (SNNs) pada CPU atau GPU menggunakan fungsionalitas tentorch Tensor .
Bindsnet adalah perpustakaan simulasi jaringan saraf spiking yang diarahkan untuk pengembangan algoritma yang diilhami secara biologis untuk pembelajaran mesin.
Paket ini digunakan sebagai bagian dari penelitian yang sedang berlangsung tentang penerapan masalah SNN, Pembelajaran Mesin (ML) dan Pembelajaran Penguatan (RL) di laboratorium Sistem Saraf & Dinamis (BINDS) yang terinspirasi secara biologis dan Pusat Penemuan Allen di Tufts University.
Lihatlah contoh -contoh BindSnet untuk kumpulan percobaan, fungsi untuk analisis hasil, plot hasil percobaan, dan banyak lagi. Dokumentasi untuk paket dapat ditemukan di sini.

Untuk menginstal rilis stabil terbaru dari repositori github
pip install git+https://github.com/BindsNET/bindsnet.git
Atau, untuk membangun paket bindsnet dari sumber, mengkloning repositori github, mengubah direktori ke tingkat atas proyek ini, dan masalah
pip install .
Atau, untuk menginstal dalam mode yang dapat diedit (memungkinkan modifikasi paket tanpa menginstal ulang):
pip install -e .
Untuk menginstal paket yang diperlukan untuk berinteraksi dengan Perpustakaan Lingkungan RL OpenAI Gym RL, ikuti instruksi mereka untuk menginstal paket yang diperlukan untuk menjalankan Simulator Lingkungan RL (pada Linux / MacOS).
Tautan ke Repositori Docker.
Kami juga menyediakan dockerfile di mana Bindsnet dan semua dependensinya dipasang. Masalah.
docker build .
Di direktori tingkat atas proyek ini untuk membuat gambar Docker.
Untuk mengubah nama gambar yang baru dibangun, masalah
docker tag <IMAGE_ID> <NEW_IMAGE_ID>
Untuk menjalankan wadah dan mendapatkan terminal bash di dalamnya, masalah
docker run -it <NEW_IMAGE_ID> bash
Untuk menjalankan replikasi SNN dari makalah ini, masalah ini
cd examples/mnist
python eth_mnist.py
Ada sejumlah argumen baris perintah opsional yang dapat diteruskan, termasuk --plot (menampilkan angka pemantauan yang bermanfaat), --n_neurons [int] (jumlah neuron penghambatan rangsang yang disimulasikan), --mode ['train' | 'test'] (mengatur operasi jaringan ke fase pelatihan atau pengujian), dan banyak lagi. Jalankan skrip dengan bendera --help atau -h untuk informasi lebih lanjut.
Sejumlah contoh lain tersedia di direktori examples yang dimaksudkan untuk menampilkan fungsionalitas Bindsnet. Lihatlah, dan beri tahu kami pendapat Anda!
Mengeluarkan yang berikut untuk menjalankan tes:
python -m pytest test/
Beberapa tes akan gagal jika Open AI gym tidak dipasang di mesin Anda.
Simulasi dinamika neuron spiking yang masuk akal secara biologis bisa menantang. Ini biasanya dilakukan dengan memecahkan persamaan diferensial biasa (ODE) yang menggambarkan dinamika tersebut. Pytorch tidak secara eksplisit mendukung solusi persamaan diferensial (sebagai lawan dari brian2 , misalnya), tetapi kita dapat mengonversi ODE yang mendefinisikan dinamika menjadi persamaan perbedaan dan menyelesaikannya pada interval singkat dan pendek ( dt pada urutan 1 milidetik) sebagai perkiraan. Tentu saja, di bawah kap, paket seperti brian2 melakukan hal yang sama. Melakukan ini di PyTorch menarik karena beberapa alasan:
Kita dapat menggunakan objek torch.Tensor yang kuat dan fleksibel, pembungkus di sekitar numpy.ndarray yang dapat ditransfer ke dan dari perangkat GPU.
Kita dapat menghindari "menciptakan kembali roda" dengan menggunakan kembali fungsi -fungsi dari torch.nn.functional Pytorch submodule dalam arsitektur SNN kami; misalnya fungsi konvolusi atau pengumpulan.
Konsep bahwa pemesanan lonjakan neuron dan informasi waktu relatifnya adalah tema sentral dalam ilmu saraf. Markram et al. (1997) mengusulkan bahwa sinapsis antara neuron harus memperkuat atau menurunkan berdasarkan waktu relatif ini, dan sebelum itu, Donald Hebb mengusulkan teori pembelajaran Hebbian, sering kali dinyatakan sebagai "neuron yang menyatu bersama, menyatu bersama." Perpanjangan Teori Hebbian Markram et al. Dikenal sebagai spike-timing-dependent plasticity (STDP).
Kami tertarik untuk menerapkan SNNs ke masalah ML dan RL. Kami menggunakan STDP untuk memodifikasi bobot sinapsis yang menghubungkan pasangan atau populasi neuron di SNNs. Dalam konteks ML, kami ingin mempelajari pengaturan bobot sinaps yang akan menghasilkan aktivitas spiking yang bergantung pada data di SNNs. Kegiatan ini akan memungkinkan kita untuk melakukan beberapa tugas ML yang menarik; misalnya, membedakan atau mengelompokkan data input. Dalam konteks RL, kita mungkin menganggap jaringan saraf spiking sebagai agen RL, yang aktivitas spikingnya dapat dikonversi menjadi tindakan dalam ruang tindakan lingkungan.
Kami telah memberikan beberapa skrip starter sederhana untuk melakukan pembelajaran tanpa pengawasan (mempelajari representasi yang sepenuhnya terhubung atau konvolusional melalui STDP), belajar (menjepit output neuron ke perilaku spiking yang diinginkan tergantung pada label data), dan pembelajaran penguatan (mengonversi pengamatan dari aksi permainan permainan di ATARI.
Kami mensimulasikan jaringan dengan populasi neuron input N Poisson dengan laju penembakan (di Hertz) yang ditarik secara acak dari U (0, 100), terhubung semua dengan semua dengan populasi neuron integrasi-dan-api yang bocor yang sama, dengan bobot koneksi yang diambil sampelnya dari N (0,1). Kami bervariasi N secara sistematis dari 250 hingga 10.000 dalam langkah 250, dan menjalankan setiap simulasi dengan setiap perpustakaan untuk 1.000 ms dengan resolusi waktu DT = 1.0. Kami menguji Bindsnet (dengan CPU dan komputasi GPU), Brian2, Pynest (antarmuka Python ke antarmuka sarang sarang yang menjalankan simulator inti sarang C ++), annarki (dengan komputasi CPU dan GPU), dan Brian2Genn (front-end Brian2 untuk Genn Simulator).
Beberapa paket, termasuk Brian dan Pynest, memungkinkan pengaturan preferensi global tertentu; Misalnya, jumlah utas CPU, jumlah proses OpenMP, dll. Kami memilih pengaturan ini untuk studi benchmark kami dalam upaya untuk memaksimalkan kecepatan masing -masing perpustakaan, tetapi perhatikan bahwa BindsNet tidak memerlukan pengaturan opsi tersebut. Pendekatan kami, mewarisi model komputasi Pytorch, tampaknya memanfaatkan perangkat keras yang tersedia sebaik -baiknya, dan karenanya membuatnya sederhana bagi para praktisi untuk mendapatkan kinerja terbaik dari sistem mereka dengan upaya paling sedikit.

Semua simulasi dijalankan pada Ubuntu 16.04 LTS dengan Intel (R) Xeon (R) CPU E5-2687W V3 @ 3.10GHz, 128GB RAM @ 2133MHz, dan dua GPU GeForce GTX Titan X (GM200). Python 3.6 digunakan dalam semua kasus. Waktu jam direkam untuk setiap menjalankan simulasi.
Jika Anda menggunakan BindSnet dalam riset Anda, silakan kutip artikel berikut:
@ARTICLE{10.3389/fninf.2018.00089,
AUTHOR={Hazan, Hananel and Saunders, Daniel J. and Khan, Hassaan and Patel, Devdhar and Sanghavi, Darpan T. and Siegelmann, Hava T. and Kozma, Robert},
TITLE={BindsNET: A Machine Learning-Oriented Spiking Neural Networks Library in Python},
JOURNAL={Frontiers in Neuroinformatics},
VOLUME={12},
PAGES={89},
YEAR={2018},
URL={https://www.frontiersin.org/article/10.3389/fninf.2018.00089},
DOI={10.3389/fninf.2018.00089},
ISSN={1662-5196},
}
Dibuat dengan contrib.rocks.
Lisensi Publik Umum GNU Affero v3.0