SNNネットワークを監視するSLAYER Linuxインストール構成
7069 ワード
SLAYERはNUSからの成果であり、NeurIPS 2018に収録されている
テキストリンクhttp://papers.nips.cc/paper/7415-slayer-spike-layer-error-reassignment-in-time.pdf
文章の内容を簡単に述べる
SNN(spiking neural network)におけるニューロンモデルから放出される離散パルス信号は微小ではないため,従来のCNNのBP戦略は適用されなくなった.本文の主な寄与は,weights(突起重み)とaxonal delays(軸突起遅延)を訓練するためにSNNに適した新しいBPアルゴリズムを提案することである.モデルにはSpike Response Model(SRM)ニューロンモデルを用いた.具体的なアルゴリズムは文章が一部の細部を省略したため徹底的に理解していないで、私がソースコードを見終わってから帰ってアルゴリズムの細部の招待状を補充しましょう:)
インストールプロセス
環境要件
著者らはハードウェアの提案についてこう書いた.
GPU hardware with cc 6.0 or higher.
NVIDIA GeForce GTX 1050 Tiを使っていますがちょっと骨が折れます
環境に関する著者の使用 CUDA 9.2 CUDNN 7.2 yaml-cpp私はトランスポートゲートです(cmakeに注意するときは必ず-DBUILD_SHARED_LIBS=ONを選択して動的にコンパイルします) インストール CUDAとCUDNNのインストールのネット上の教程は比较的に多くて、ここでもう赘述しないで、みんなに注意しなければならないのは必ず环境の変数を追加します!!! YAML-CPPインストール新規フォルダ
注意インストールが完了した后にYAMLのダイナミックリンクライブラリをキャッシュに追加して、さもなくばコンパイルする时ずっと探し出せません!!!次は追加方法です.
ダイナミックリンクライブラリの追加結果:フレームワークインストールまずダウンロードソース
しかし、私はとても遅いのでWindowsでbitbucketローカル環境をダウンロードしてダウンロードしました. CPPバージョンのインストールダウンロードが完了したら、 です.
そしてそのままmakeでいい MATLABバージョンのインストール作者はMATLABバージョンに適切なファイル処理コードをたくさん書いて、より直感的に使うので、MATLABバージョンのインストールをお勧めします. インストールを開始し、まずMATLAB(私が使っている2016 b)を開き、パスは
学習とテストの部分コードをそれぞれコンパイルします.
これでフレームワーク全体のコンパイルが完了します.次に著者が提供したexampleを走り、M-MNISTデータセットの一部のデータを訓練し、テストします.
テスト
次のようになります.
フレームワークの論理は、すべてのデータを同じフォルダの下に置く必要があります.つまり、MINISTのように各クラスのデータを1つのサブフォルダの下に置くデータは、一緒に混ぜなければ使用できません.トレーニングセットとテストセットが混用されています.個人的にはこのコードロジックはデータ処理に不利だと思いますが、著者に連絡してフレームワークを確実に書く際に他のデータ抽出ロジックがないことを確認し、今はこのように使うしかありません.しかし、著者らは、この問題を解決するためにデータ処理スクリプトを書く方法も考えていると述べた.もちろん、私は自分でデータ処理のコードを書いて、次にフレームワークで新しいデータセットを訓練する方法を紹介するついでに公開します.
そしてMATLABで
結果
運転
これは私が2000回訓練した結果です
テキストリンクhttp://papers.nips.cc/paper/7415-slayer-spike-layer-error-reassignment-in-time.pdf
文章の内容を簡単に述べる
SNN(spiking neural network)におけるニューロンモデルから放出される離散パルス信号は微小ではないため,従来のCNNのBP戦略は適用されなくなった.本文の主な寄与は,weights(突起重み)とaxonal delays(軸突起遅延)を訓練するためにSNNに適した新しいBPアルゴリズムを提案することである.モデルにはSpike Response Model(SRM)ニューロンモデルを用いた.具体的なアルゴリズムは文章が一部の細部を省略したため徹底的に理解していないで、私がソースコードを見終わってから帰ってアルゴリズムの細部の招待状を補充しましょう:)
インストールプロセス
環境要件
著者らはハードウェアの提案についてこう書いた.
GPU hardware with cc 6.0 or higher.
NVIDIA GeForce GTX 1050 Tiを使っていますがちょっと骨が折れます
環境に関する著者の使用
YAML-CPP-installer
オープン端末入力下記コードgit clone https://github.com/jbeder/yaml-cpp.git
cd yaml-cpp
mkdir build
cd build
cmake -DBUILD_SHARED_LIBS=ON .. // /usr/local
make -j4
sudo make install -j4
注意インストールが完了した后にYAMLのダイナミックリンクライブラリをキャッシュに追加して、さもなくばコンパイルする时ずっと探し出せません!!!次は追加方法です.
cd /etc/ld.so.conf.d //
sudo touch local.conf //
sudo gedit local.conf // , 。 /usr/local /usr/local/lib
sudo ldconfig
ldconfig -p // ,
ダイナミックリンクライブラリの追加結果:
git clone https://bitbucket.org/bamsumit/slayer/src.git
しかし、私はとても遅いのでWindowsでbitbucketローカル環境をダウンロードしてダウンロードしました.
slayerCPP
フォルダの下でmakefile
のCUDAとYAMLのインストールパスを変更します.デフォルトのインストールの場合は、CUDA_PATH := /usr/local/cuda
YAML_PATH := /usr/local
そしてそのままmakeでいい
slayerMEX
フォルダの下にあります.ここではmexコンパイラを使う必要があります.通常はすでにプリインストールされているはずです.MATLABコマンドラインにmex-setupを入力し、プロンプトに従ってC++のコンパイラを選択します.同じフォルダの下のnvmex.m
を開いてCUDAとYAMLのインストールパスを変更し、パスの内容はCPPバージョンと同じです.修正後MATLABコマンドラインに入力nvmex('spikeLearn.cu')
nvmex('spikerun.cu')
学習とテストの部分コードをそれぞれコンパイルします.
これでフレームワーク全体のコンパイルが完了します.次に著者が提供したexampleを走り、M-MNISTデータセットの一部のデータを訓練し、テストします.
テスト
example
フォルダに入り、データNMNISTsmall.zip
を解凍するunzip NMNISTsmall.zip
次のようになります.
1.bs2
から1000.bs2
はトレーニングデータである.60001.bs2
から60100.bs2
は試験セットである.Desired_10_60
は、エンドニューロンの所望のパルス発行数を定義するファイルであり、このデータセットで正確な結果を定義して60パルスを発行し、誤った結果を10パルスを発行する.train1K.txt
は、トレーニングデータのラベルを指定する.test100.txt
は、試験データのラベルを指定する.フレームワークの論理は、すべてのデータを同じフォルダの下に置く必要があります.つまり、MINISTのように各クラスのデータを1つのサブフォルダの下に置くデータは、一緒に混ぜなければ使用できません.トレーニングセットとテストセットが混用されています.個人的にはこのコードロジックはデータ処理に不利だと思いますが、著者に連絡してフレームワークを確実に書く際に他のデータ抽出ロジックがないことを確認し、今はこのように使うしかありません.しかし、著者らは、この問題を解決するためにデータ処理スクリプトを書く方法も考えていると述べた.もちろん、私は自分でデータ処理のコードを書いて、次にフレームワークで新しいデータセットを訓練する方法を紹介するついでに公開します.
そしてMATLABで
exampleTrain.m
を開く適宜snnを修正する.maxIterは最大訓練回数を調整して直接運転すればよい.ここで最大訓練回数は訓練セットのサンプル数よりはるかに大きいべきで、自分で訓練セットの訓練をする時、訓練セットの順序を乱すことに注意しなければならない.そうしないと、訓練があるサンプルに集中して最終的な効果が悪い.訓練結果はコード同フォルダの下OutFiles
フォルダに保存されますが、このフォルダは自動的に生成されないので、自分でOutFiles
というフォルダを事前に建てる必要があります.結果
運転
exampleRun.m
は、訓練されたパラメータを用いて試験セットデータをテストし、統計ヒストグラムを描くことができる.ただし、コードのデフォルトでは、作成者が訓練したモデルが使用されます.自分が訓練したモデルを使用するには、コードの先頭に注釈をロードする必要があります.% load('exampleNetwork.mat')
これは私が2000回訓練した結果です