PyBrainはあまり速くないので,名前からして速そうなFANN(Fast Artificial Neural Network Library)を試してみる. インストール方法のメモ
Fast Artificial Neural Network Library (FANN)
環境はUbuntu 14.04 apt-getでも取れるがバージョンが2.1.0なので自前でビルドする.
wget http://downloads.sourceforge.net/project/fann/fann/2.2.0/FANN-2.2.0-Source.tar.gz tar xvzf FANN-2.2.0-Source.tar.gz cd FANN-2.2.0-Source sudo apt-get install cmake cmake ./ make make install
Python用にラッピングしたものがあるのでこれもインストール.
sudo apt-get install swig sudo pip install fann2
使ってみる.コードは以下.
from fann2 import * from fann2.libfann import * nn = neural_net() #入力層2,隠れ層2,出力層2のネットワークを生成. nn.create_standard_array([2,3,1]) #活性化関数をシグモイド関数に設定 nn.set_activation_function_hidden(SIGMOID) nn.set_activation_function_output(SIGMOID) #xor.dataから学習用データを読み込んで,エラーが0.01になるまで最大1000回学習させる.100回毎に結果をプリント nn.train_on_file('xor.data', 1000, 100, 0.01) #結果を表示 print nn.run([-1,-1]) print nn.run([-1, 1]) print nn.run([1,-1]) print nn.run([1,1]) #保存 nn.save('xor.net')
なお,xor.dataの中身は以下のような感じ.
4 2 1 -1 -1 -1 -1 1 1 1 -1 1 1 1 -1
注意しなければならないのが,neural_netクラスにcreate_standardメソッドは存在するけど使えない.
FANNのCのサンプルコードはfann_create_standard関数を使っているので,これをラッピングしてるものと思われるcreate_standardを使おうとしたがどうもうまくいかない.Pythonのfann2モジュールのソースコードを見るとこのメソッドはSwigが自動生成したもので,まじめにラッピングされたものではない.fann2モジュールはあんまり使えない感じだ.例外とかも投げないし.
fann_create_standard_array関数をラッピングしているcreate_standard_arrayメソッドを使わなければならない.
うまくいった場合の結果が以下
ubuntu@ip-172-31-27-81:~/fann$ python test_fann.py Max epochs 1000. Desired error: 0.0099999998. Epochs 1. Current error: 1.2790305614. Bit fail 4. Epochs 100. Current error: 0.5000000000. Bit fail 2. ~~~ Epochs 900. Current error: 1.0000000000. Bit fail 4. Epochs 1000. Current error: 1.0000000000. Bit fail 4. [2.6503965530043108e-261] [0.9998977176605155] [0.9998977176605155] [2.6503965530043108e-261]
error, Bit failの意味はいまいちよくわからない.
PyBrainよりは速いが,使いにくい印象.