Hatena::ブログ(Diary)

shi3zの長文日記 RSSフィード Twitter

2017-06-08

Kerasは便利。Chainerは激しい 06:45

 しかしKeras便利だよなあ

 

 というわけで秋葉原プログラミング教室、AIプログラミングコースでは今月から(早い人は)Kerasの授業が始まります。


 Chainerもいいんだけどこれから四ヶ月に一回のメジャーバージョンアップを行うことが宣言されていて、Chainerの場合、メジャーバージョンアップが意味するところは後方互換性のないAPI変更を伴う更新がバージョンアップなので、四ヶ月に一回は教材を更新しなければならないのかと震えている。頑張り過ぎではないか。

  • We will release a major version each four months. This change enables us to support cutting-edge research more quickly.
  • Instead of releasing a minor version, we will make a pre-release of the upcoming major version each month. Any changes that add new features or change the existing API should be included in these pre-releases.
  • The development of the pre-releases (alpha, beta, and release candidates) are done in the master branch.
  • The development of the stable releases (major and revision updates) are done in the versioned branches named like v2, v3, etc.

https://chainer.org/announcement/2017/06/01/released-v2.html


 とはいってもChainer1.x系からChainer2系へのバージョンアップはPython2からPython3へのバージョンアップくらいの差分しかなかったのでホッとしている部分もあるけど。



 あと、いちおう安定版が用意されるらしいので1.xのときほどバージョンアップの度にノイローゼになることはなさそうだ。1.xの時は「2つ前のバージョンにあったクラスがいきなりなくなった」とか作りながら迷子になる仕様で仕事として使うにはかなり絶望的だった。ほとんど全てのプログラムがバージョンに強く依存して作り捨てみたいなことになったからだ。



 最も激しかった頃のDirectXでさえメジャーバージョンアップは一年に一回だったことを考えると、なんで一年に三回もバージョンアップしたいのかまだ良くわからないんだけど、追加したい機能がそんなにあるんだろうか。まあ今後追加が期待されるのはグラフ畳み込みとかそのあたりかねえ。モジュール一覧(http://docs.chainer.org/en/stable/_modules/index.html)見たらまだconvLSTMはサポートしてないのね。


 そのへんKerasの方が進んではいるんだよなあ。


 ただ、Kerasはn次元畳込みがなくて1Dか2Dか3DしかサポートしてないけどChainerはn次元畳込みをサポートしている。たぶんKerasはCNTKとかTensotFlowとかで表現するのを抽象化するためにそうなってるのかなあ、と思うけど。


 Chainer1.23ではn次元畳込みはサポートされていたけど計算結果にバグがあったっぽいので仕事ではまだalphaだったChainer2を使って事なきを得た。


 ニューラルネットワークはまだ発展途上なので各手法の優先度がなかなか決められない。ConvLSTMをサポートすべきかそうでもないかは微妙なところではあるが個人的にはあって欲しい(だからそういうタスクではいまのところKerasを使う)。



 n次元畳み込みにしても、たしかにn次元の方が自由度高いんだけど今のGPUのメモリから考えてそれが4次元以上になったらそもそもメモリに入らないでしょ、という発想から、まあ現実的には多くて3次元だよね、というKerasの割り切りも理解できる。


 あと、とにかくkerasはサンプルがよく出来てるんだよなあ。悩まなくて済む。

 公式なサンプルコードの数は圧倒的にKerasが多くて、しかもひとつのサンプルが1ファイルになっているので見通しがよく、しかもコードが短いのが素晴らしい。


 ただ、KerasのバックエンドはTensorFlowが標準になったんだけどこいつが重い。死ぬほど重い。ちょっと非力なマシンで動かそうもんなら固まる。Chainerはその点省エネであることが素晴らしい。


 欲を言えばKerasのバックエンドにChainerを使えるともはやKerasを使うべきかChainerを使うべきか悩まなくて済むんだけど、そういうわけにはいかないか