毎年度恒例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 での実験はまたいつか….