ディープラーニングを始めるときに、どのフレームワークを使用するか迷うと思います。どうせ覚えるならば、将来性がありスタンダードになるものが良いなと思ったり、速度も速い方が良いし、柔軟な記述ができて、でも学習コストは低いものがありがたい、、、等々。
メジャーどころだとTensorFlow、Caffe、Caffe2、Chainer、CNTK。比較的新しいものだとPyTorchやNNablaとか。これ以外にも色々あって、正直、どれが良いのか初学者だと判断が難しいなぁと。そこで簡単に、これらのフレームワークを紹介します。
TensorFlow
- https://www.tensorflow.org/
- 最もメジャーなフレームワーク
- やっぱりGoogleという安心感が大きい。最近はDefine by Runに対応したEagarも。
Caffe
- UC Barkeley, Yangqing Jia
- http://caffe.berkeleyvision.org/
- 古参のフレームワーク
- 癖があって、実装し辛いという声もちらほら。でも高速。
Caffe2
- Facebook, Yangqing Jia
- https://caffe2.ai/
- Caffeよりも高速(らしい)。Mobile用途も意識。
- Caffeの開発者であるYangqing JiaがFacebookに移り、Facebookが発表。
Chainer
- Preferred Networks
- https://chainer.org/
- 日本企業が開発したため、日本のユーザーは多い(らしい)。
- Define by Runの元祖で、柔軟なネットワークを記述しやすい。
- 既に古新聞ですが、2019/12/05にPreferred Networksは研究開発基盤をPyTorchに順次移行し、Chainerはメンテナンスフェーズに移行する、と発表しました。(追記 2020/03/28)
CNTK (The Microsoft Cognitive Toolkit)
- Microsoft
- https://www.microsoft.com/en-us/cognitive-toolkit/
- 高速らしい
PyTorch
- https://pytorch.org/
- 2017年リリースの新参だが、利用者数が急増中
- Chainerからフォークして作られておりDefine by Runをサポート。
- 現在、最もホットと言って良いフレームワークであり、同じFacebook製のCaffe2と融合するというアナウンスもあり。
NNabla (Neural Network Libraries)
- Sony
- https://nnabla.org/
- 利用者数はここで挙げた他フレームワークと比べるとまだまだか
- Neural Network ConsoleというGUIツールがあり、コーディングしなくてもモジュールのドロップ&ドラッグでネットワークを構築可能。この機能は秀逸。
最近は、何か一つのフレームワークだけに限定するのではなく、目的に応じて数種を使い分ければ良いと思っています。ネットワークを各種フレームワーク向けに変換してくれるONNXなどもあるので、2、3のフレームワークを使えるようになれば十分。個人的なおすすめとしては、PyTorchとTensorFlow。PyTorchはユーザーが急激に増えていて最新の研究成果がPyTorchで実装されていることが多いこと、TensorFlowは現時点で最もユーザーが多いことが決め手です。やはりユーザーの数が多いほど、検索できる情報量も増えるし、たくさん使われることでフレームワーク自体が鍛えられていきますからね。群雄割拠の現状においてどれが最終的に生き残るか分からない状況ですが、Facebook、Googleという巨人の肩に乗っかるのも妥当だと思っています。