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
で可能です。
pip
とconda
は基本混ぜるな危険ですから、なるべく仮想環境内で環境を作る方がいいです。以前、そのような混交が原因で、パッケージのアップデートできず大変なことになりました。
githubで公開されているbindsnetのdocker imageをダウンロードすることも一つの方法です。
(ただしLinuxとMacのみ)
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`の中身を次回以降見てみます。
今回はここまで。