なにごとも 継続

博士課程での研究や思ったこと、作業記録、などなど自由に書いていくつもりです

BindsNetのインストール

BindsNetインストール

BindsNetはスパイキングニューラルネットpythonライブラリです。 スパイキングニューラルネット(SNN)を試してみようと導入します。 BindsNetはpytorchでbuiltされています。tensorflowでも動くみたいですが、未確認です。

私はずっとchainerでやっていたのですがディスコンしましたので、ほかのフレームワークへ移行しなければなりません。
pytorchはchainerフォークのフレームワークなので、移行先の第一候補です。
pytorchに慣れる目的もかねて、インストールしてみたいと思います。

とりあえずBindsNet用の仮想環境を作って、そこにインストールします。
bindsnetのGitHub
pip install bindsnetでインストール可能。

PCの環境はWindows10です。

> python -V
Python 3.6.8 :: Anaconda, Inc.

公式ドキュメントに、ここでやっていることやその詳細は書いてありますので参考にしてください。
ここではexampleのプログラムを動かすところまでを紹介します。

1. 仮想環境を作る

まず現在の仮想環境はconda info -eで確認できる。

# conda environments:
#
base                  *  C:\Users\\Anaconda3
caffe_env                C:\Users\\Anaconda3\envs\caffe_env
chainer                  C:\Users\\Anaconda3\envs\chainer

ここに

conda create -n bindsnet anaconda

で仮想環境名bindsnetの環境が作られる。anacondaを入れないと、何も入ってない更地の環境が作られてしまうので、あらかじめ必要なパッケージを入れておくと便利。
ここではanaconda自体を入れているが、容量などが気になる場合は、numpyなど最低限のパッケージに限定してもよい。
-nはname指定のオプション。

2. pytorchのインストール

pytorch環境がない場合はエラーが出ます。 先ほど で作った仮想環境内では、まだpytorchをインストールしてないはずなので
ここでインストールを行います。
pytorchのインストールはcondaで可能です。 pipcondaは基本混ぜるな危険ですから、なるべく仮想環境内で環境を作る方がいいです。以前、そのような混交が原因で、パッケージのアップデートできず大変なことになりました。
githubで公開されているbindsnetのdocker imageをダウンロードすることも一つの方法です。
(ただしLinuxMacのみ)

conda install -c pytorchでインストール可能。 もしバージョン指定したい場合は、conda install -c pytorch pytorch=1.4.0のようにする。
-cはチャネル指定のオプション。

ERROR: torchvision 0.5.0 has requirement torch==1.4.0, but you'll have torch 1.3.1 which is incompatible.   
Installing collected packages: torchvision, protobuf, tensorboardX, pyglet, cloudpickle, gym, opencv-python, bindsnet, imagecodecs

のようなエラーが出たので、私は1.4.0に指定しています。

3. BindsNetのインストール

bindsnetのインストールをpip install bindsnetで行う。

しばらく待ちます。

インストールが完了したら、テストをします。 bindsnetをインストールしたディレクトリに移動して、 python -m pytest test が通れば成功です。

examples/mnistの実行

次にmnistのサンプルプログラムを動かしてみました。
jupyterlabからはpyファイルは動かせないので、コマンドからやりましたが、spyderを使えばよかった。
表題にしているディレクトリ内のeth_mnist.pyを動かします。
下のは実行のイメージです。

(bindsnet) PS C:\Users\\bindsnet> python examples/mnist/eth_mnist.py
Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz to ..\..\data\MNIST\TorchvisionDatasetWrapper\raw\train-images-idx3-ubyte.gz
9920512it [00:03, 2977845.89it/s]
Extracting ..\..\data\MNIST\TorchvisionDatasetWrapper\raw\train-images-idx3-ubyte.gz to ..\..\data\MNIST\TorchvisionDatasetWrapper\raw  
Downloading http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz to ..\..\data\MNIST\TorchvisionDatasetWrapper\raw\train-labels-idx1-ubyte.gz
32768it [00:00, 52070.78it/s]
Extracting ..\..\data\MNIST\TorchvisionDatasetWrapper\raw\train-labels-idx1-ubyte.gz to ..\..\data\MNIST\TorchvisionDatasetWrapper\raw  
Downloading http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz to ..\..\data\MNIST\TorchvisionDatasetWrapper\raw\t10k-images-idx3-ubyte.gz
1654784it [00:01, 954779.86it/s]
Extracting ..\..\data\MNIST\TorchvisionDatasetWrapper\raw\t10k-images-idx3-ubyte.gz to ..\..\data\MNIST\TorchvisionDatasetWrapper\raw   
Downloading http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz to ..\..\data\MNIST\TorchvisionDatasetWrapper\raw\t10k-labels-idx1-ubyte.gz
8192it [00:00, 19153.02it/s]
Extracting ..\..\data\MNIST\TorchvisionDatasetWrapper\raw\t10k-labels-idx1-ubyte.gz to ..\..\data\MNIST\TorchvisionDatasetWrapper\raw   
Processing...
Done!

Begin training.

Progress: 0 / 1 (0.0000 seconds)
  0%|                       | 250/60000 [02:44<12:18:17,  1.35it/s] 
All activity accuracy: 9.20 (last), 9.20 (average), 9.20 (best)     
Proportion weighting accuracy: 9.20 (last), 9.20 (average), 9.20 (best)

  1%|▏                      | 500/60000 [06:31<11:15:24,  1.47it/s]

わお、激重
なんでだろうか。

一晩明けた結果が次です。

100%|█████████████████████████████████████████████████████████████▋| 59750/60000 [7:44:49<02:01,  2.06it/s] 
All activity accuracy: 78.80 (last), 76.17 (average), 85.60 (best)
Proportion weighting accuracy: 78.80 (last), 76.95 (average), 86.80 (best)

1万試行の段階くらいで70%には届いているので、実行前にオプション指定をするか、ソースを直接変更しても良いかもしれません。

eth_mnist.py`の中身を次回以降見てみます。

今回はここまで。