まんぼう日記

takataka's diary

Theano の開発版をおっかける

毎年度恒例12月から2月にかけての忙し期間も,昨日であらかたおわり.気が緩んだのか,昨晩夕食後にちょっと横んなって,気づいたら朝の9時でしたがな… (^^;

で,頭痛が痛いっす.昔から,ストレスから解放されると頭痛起こす体質なもんで (^^;;

 

それはさておき.

 

Welcome — Theano 0.6 documentation の関数 max_pool_2d のドキュメント downsample – Down-Sampling — Theano 0.6 documentation を見ると,stride size を指定して overlap ありの pooling が出来ることになってます.でも,自分の環境で試すと,st を指定したらエラーになります.むむむ…

 

どうやら,上記リンク先のドキュメントは,リリース版じゃなくて最新の開発版のもののようですね.たかたかの環境に入ってるのは前者で,stride size を指定できる max_pool_2d はそのリリース後に開発版にコミットされたんでしょう.

 

というわけで,最新版を使いたかったのでそのインストール作業をちまちま.

 

これまでは,MacPorts で入れた Python 2.7 と Theano 0.6 を使ってきました.

$ port installed python27 py27-theano
py27-theano @0.6.0_1 (active)
python27 @2.7.9_0 (active)

これだと,Theano のバージョンと max_pool_2d の help はこうなります.

>>> import theano
>>> theano.version.full_version
'0.6.0.dev-RELEASE'
>>> from theano.tensor.signal.downsample import *
>>> help(max_pool_2d)

Help on function max_pool_2d in module theano.tensor.signal.downsample:
max_pool_2d(input, ds, ignore_border=False)
   :

この通り,現在のリリース版 Theano では,上記リンク先のドキュメントにある st っちゅう引数は存在しません.

 

st を指定できる max_pool_2d を使いたいので,Installing Theano — Theano 0.6 documentation の Bleeding-edge install instructions にしたがって,最新開発版の Theano をインストールすることにします.

 

まずは,適当なファイル置き場を作って,そこで

$ git clone git://github.com/Theano/Theano.git

を実行.Theano というサブディレクトリが出来て,そこに最新版リポジトリの内容がクローンされます.

 

で,次にそれをインストールするんですが,MacPorts で入れたリリース版に上書きしたりするのは面倒のもとなので,そっちは残しといて,自分のユーザディレクトリにインストールすることにします.

 

そのため,環境変数 PYTHONPATH を設定して,それにあわせて site-packages ディレクトリを作成しておきます.たとえば,PYTHONPATH に ~/python/lib/python2.7/site-packages を指定する場合,つまり,~/.bashrc 等で

export PYTHONPATH=$HOME/python/lib/python2.7/site-packages:$PYTHONPATH

とする場合,~/python/lib/python2.7/site-packages というディレクトリを作成しておきます.これ先にやっとかんと次の setup がこけるようです.~/.bashrc を書き換えたら

$ source ~/.bashrc

を忘れずに.

 

そういうわけで setup.py を実行.

$ cd Theano
$ python setup.py develop --prefix=~/python
running develop
running egg_info
creating Theano.egg-info
中略
Finished processing dependencies for Theano==0.6.0

そうすると,~/python/lib/python2.7/site-packages と ~/python/bin/ (こっちのディレクトリは勝手に作成してくれる)の中にいくつかファイルが置かれます.

 

ちゃんとインストールできたか確認.

$ python
>>> import theano
>>> theano.version.full_version
'0.6.0.dev-470218392aa1cba459811428865ea896c6db49f6'
>>> from theano.tensor.signal.downsample import *
>>> help(max_pool_2d)

Help on function max_pool_2d in module theano.tensor.signal.downsample:
max_pool_2d(input, ds, ignore_border=False, st=None)

version 変わってヘルプに st が登場してますのできっとokでしょう. 

 

ちなみに,クローンしたリポジトリの内容を最新のものに同期させるには,

$ cd Theano
$ git pull

したらよいようです.

 

 

というわけで,max_pool_2d が動くかどうか試してみたところ…動くことは動くんですが,超遅い….CPUでかつ ds != st の場合の話です.ds == st の場合は従来通りの速度で動きます.うーむ.GPUの方だけ最適化されてるとか? がんばって調べる気にならへんので,ds != st とした max_pool_2d での実験はまたいつか….