
脳は、より効率的なニューラルネットワークを開発するためのインスピレーションを探すのに最適な場所です。現代の深い学習の主な違いの1つは、脳が連続的な活性化ではなくスパイクで情報をエンコードすることです。 Snntorchは、スパイクニューラルネットワークを使用してグラデーションベースの学習を実行するためのPythonパッケージです。 Pytorchの機能を拡張し、GPU加速テンソル計算を活用し、スパイクニューロンのネットワークに適用します。事前に設計されたスパイクニューロンモデルは、Pytorchフレームワーク内にシームレスに統合されており、再発活性化ユニットとして扱うことができます。

このプロジェクトが気に入っている場合は、このリポジトリを主演することを検討してください。これは、それをサポートする最も簡単で最良の方法であるためです。
問題、コメント、またはニューラルネットワークの急増のトレーニングに関するアドバイスを探している場合は、私たちの不一致チャンネルで問題、ディスカッション、またはチャットを開くことができます。
Snntorchには、次のコンポーネントが含まれています。
| 成分 | 説明 |
|---|---|
| Snntorch | Torch.nnのようなスパイクニューロンライブラリ、オートグラードと深く統合された |
| snntorch.export | NIRを介して他のSNNライブラリとの相互互換性を有効にします |
| snntorch.functional | スパイクに関する一般的な算術操作、例えば、損失、正規化など。 |
| snntorch.spikegen | スパイクの生成とデータ変換のためのライブラリ |
| snntorch.spikeplot | Matplotlibとセルロイドを使用したスパイクベースのデータ用の視覚化ツール |
| snntorch.surrogate | オプションのサロゲートグラデーション関数 |
| snntorch.utils | データセットユーティリティ関数 |
Snntorchは、Pytorchで直感的に使用されるように設計されています。まるで各スパイクニューロンが一連の層の単なる別の活性化であるかのように。したがって、完全に接続された層、畳み込み層、残留接続などが不可知論されます。
現在、ニューロンモデルは、勾配を計算するために、システム内のすべてのニューロンの膜電位トレースを保存する必要性を除去する再帰関数で表されています。 Snntorchの無駄のない要件により、小規模および大規模なネットワークを必要に応じてCPUで通過することができます。ネットワークモデルとテンソルがCUDAにロードされている場合、SnntorchはPytorchと同じ方法でGPU加速度を利用します。
Snntorchがあなたの仕事で役立つと思う場合は、次の情報源を引用してください。
ジェイソン・K・エシュラギアン、マックス・ウォード、エムレ・ネフチ、Xinxin王、グレゴール・レンツ、ギリッシュ・ドワイヴィー、モハメッド・ベンナムーン、ドゥー・ソク・ジョン、およびウェイ・D・ルー「深い学習からの教訓を使用して、ニューラルネットワークのトレーニング」。 IEEEの議事録、111(9)2023年9月。
@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
GraphCoreのアクセラレータを使用して、インテリジェント処理ユニット(IPU)ベースのビルドをインストールするには:
$ pipインストールSnntorch-ipu
完全なAPIはこちらから入手できます。例、チュートリアル、コラブノートブックが提供されています。
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 ニューロンモデルからニューラルコード、バックプロパゲーションまで、ニューラルネットワークをスパイクするトレーニングのすべての基礎を学びたい場合、Snntorchチュートリアルシリーズは開始するのに最適な場所です。これは、スピードを上げることができる完全な説明を含むインタラクティブなノートブックで構成されています。
| チュートリアル | タイトル | コラブリンク |
|---|---|---|
| チュートリアル1 | Snntorchでエンコードするスパイク | |
| チュートリアル2 | 漏れやすい統合と火災ニューロン | |
| チュートリアル3 | フィードフォワードスパイクニューラルネットワーク | |
| チュートリアル4 | 2回目のスパイクニューロンモデル(オプション) | |
| チュートリアル5 | Snntorchを使用したニューラルネットワークをスパイクするトレーニング | |
| チュートリアル6 | 畳み込みSNNでのサロゲート勾配降下 | |
| チュートリアル7 | 強壮剤 + snntorchを使用した神経形態データセット |
| 高度なチュートリアル | コラブリンク |
|---|---|
| 人口コーディング | |
| 回帰:パートI- LIFニューロンを使用した膜潜在学習 | |
| 回帰:パートII-再発LIFニューロンによる回帰ベースの分類 | |
| IPUSでSnntorchを加速します | - |
Snntorchは、GraphCoreのIPUアクセラレータ用に最適化されています。 SnntorchのIPUベースのビルドをインストールするには:
$ pipインストールSnntorch-ipu
IPUの互換性の低レベルのカスタム操作は、 import snntorchが初めて呼び出されたときに自動的にコンパイルされます。
Poplar SDKを更新する場合、これらの操作を再コンパイルする必要がある場合があります。これは、 snntorch-ipuを再インストールするか、.SO拡張子を使用してベースディレクトリ内のファイルを削除することで実行できます。
snntorch.backpropモジュール、およびsnntorch.functional and snntorch.surrogateのいくつかの機能は、ipusと互換性がありますが、pytorchプリミティブを使用して再現できます。
追加の要件は次のとおりです。
PoptorchとPoplar SDKのインストール手順については、GraphCoreのドキュメントを参照してください。
Snntorch IPUプロジェクトのホームページはここにあります。 SNNSのトレーニングのチュートリアルはこちらで提供されています。
Snntorchに貢献する準備ができている場合は、こちらをご覧ください。
Snntorchは現在、UCSC Neuromorphic Computing Groupによって維持されています。当初、ジェイソン・K・エシュラギアンがLUグループ(ミシガン大学)で開発しました。
追加の貢献は、ヴィンセントサン、ペンチュウ、リッカーズー、アレクサンダーヘンケス、スティーブンアブレウ、Xinxin Wang、Sreyes Venkatesh、Gekkom、およびEmre Neftciによって行われました。
Snntorchソースコードは、MITライセンスの条件に基づいて公開されます。 Snntorchのドキュメントは、Creative Commons Attribution-Share 3.0 Unportedライセンス(CC BY-SA 3.0)の下でライセンスされています。