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-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					//       ,          
    

    ダイナミックリンクライブラリの追加結果:有监督SNN网络——SLAYER Linux安装配置_第1张图片
  • フレームワークインストールまずダウンロードソース
  • 	git clone https://bitbucket.org/bamsumit/slayer/src.git
    

    しかし、私はとても遅いのでWindowsでbitbucketローカル環境をダウンロードしてダウンロードしました.
  • CPPバージョンのインストールダウンロードが完了したら、slayerCPPフォルダの下でmakefileのCUDAとYAMLのインストールパスを変更します.デフォルトのインストールの場合は、
  • です.
    CUDA_PATH := /usr/local/cuda
    YAML_PATH := /usr/local
    

    そしてそのままmakeでいい
  • MATLABバージョンのインストール作者はMATLABバージョンに適切なファイル処理コードをたくさん書いて、より直感的に使うので、MATLABバージョンのインストールをお勧めします.
  • インストールを開始し、まずMATLAB(私が使っている2016 b)を開き、パスは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というフォルダを事前に建てる必要があります.
    結果
    有监督SNN网络——SLAYER Linux安装配置_第2张图片 有监督SNN网络——SLAYER Linux安装配置_第3张图片運転exampleRun.mは、訓練されたパラメータを用いて試験セットデータをテストし、統計ヒストグラムを描くことができる.ただし、コードのデフォルトでは、作成者が訓練したモデルが使用されます.自分が訓練したモデルを使用するには、コードの先頭に注釈をロードする必要があります.
    % load('exampleNetwork.mat')
    

    有监督SNN网络——SLAYER Linux安装配置_第4张图片これは私が2000回訓練した結果です