はじめに
最近はChainerからTensorFlowに移りつつあります。
Chainerがバッチ正規化でcudnnに関するエラーを吐くようになり(これはCUDA8.0の7.5へのダウングレードで何とかなりそうだけど)、更にPyTorchが数カ月でChainerを越える圧倒的なgithubのスター数を獲得してしまったため、気分が上がらなかったという誠にいい加減な理由です(動的グラフやりたいならPyTorchの方が既に勢いがあるので、こだわる必要が無くなってしまった)。
まあ、そんなこんなでTensorFlow1.2になったタイミングでChainerから移行を開始しました。そこで色々と参考になる記事を見つけたため、自分のメモ用にも残しておきます。
記事まとめ
TensorFlow1.2.0の変更点
箇条書きで変更点が掲載されています。
APIの変更もあったようです。従来より使っていた人は確認した方が良いでしょう(既にしてるか?)。
IntelによるCPUの最適化
ディープラーニングといえばGPUの利用が欠かせませんが、この現状に老舗CPU会社も黙ってはいないようです。TensorFlowのためにCPUの最適化を試みたようです。ベンチマークがXeonだったので、ハイエンド向けなのでしょうか。Core iXシリーズへの影響はよく分かりません。
以下インストールの手順。
Building and Installing TensorFlow with CPU Optimizations
- Run "./configure" from the TensorFlow source directory, and it will download latest Intel MKL for machine learning automatically in tensorflow/third_party/mkl/mklml if you select the options to use Intel MKL.
- Execute the following commands to create a pip package that can be used to install the optimized TensorFlow build.
- Install the optimized TensorFlow wheel
- bazel-bin/tensorflow/tools/pip_package/build_pip_package ~/path_to_save_wheel
pip install --upgrade --user ~/path_to_save_wheel /wheel_name.whl
LearningTensorFlow.com
以下のサイトに丁寧なチュートリアルがあります。難易度は高くなく、高度なことは載っていません。しかしだからこそ入門するのは公式ドキュメントを使うよりも良いかもしれませんね。こういうサイトがサードパーティから出てくるのがTensorFlowのコミュニティの強さだと思います。
Jupyter Notebookで書かれたチュートリアル
ここの11個のNotebookを眺めていくか写経していけば、TensorFlowの使い方が学べると思います。TensorFlowの使い方から、基本的な回帰、自己符号化器などを扱いつつVAEまで行きます。
いろんなチュートリアルやモデルのまとめ
上記で紹介したチュートリアルも含め、様々なチュートリアルがまとめてあります。TensorFlowがどれだけ世の中で使われているのか絶望的な差を感じました。
Machine Learning with Tensorflowのサポートサイト
には以下の書籍で用いられているサンプルコードなどが載っています。コードは勿論のこと、Jupyter Notebookで実行しながら軽く解説も入っています(もちろん全部解説してたら本の意味ないので、本当に軽く)。
Machine Learning With Tensorflow
- 作者: Nishant Shukla
- 出版社/メーカー: Manning Pubns Co
- 発売日: 2017/08/31
- メディア: ペーパーバック
- この商品を含むブログを見る
TensorFlowを使ったディープラーニングの解説動画
ディープラーニングの基本的手法について解説しながら、その場でTensorflowによるプログラムの実行をしていきます。英語がある程度分かっていて、かつ数式に少しでも齧りつけるのであれば分かる内容だと思います。
ディープラーニング以外の実装
以下は隠れマルコフモデルのTensorFlowによる実装。TensorFlowが純粋に計算グラフによるデータ処理の実装ライブラリであることが実感できる。(Deeplearningは一応用である)
ただ、上記の実装は実は隠れてないマルコフモデルであって、要するにマルコフモデルでした。(なんか言語処理では、普通のマルコフモデルを隠れマルコフモデルっていう風潮あるらしい。まあそういうものなのだろう)。
TensorFlowのHigh-Level API集
tflearn
結構使っている人見ますね。
TensorFlow-Slim
確率プログラミングライブラリedwardではこれが使われてました。その時初めて知った。
Keras
言わずとしれたKerasです。
TensorFlow1.2.0からは(恐らく)Kerasと全く同等のモジュールが同梱されるようになったため、インポートすればKerasを別途インストールしなくても使えるようになりました。
本家Kerasの方はTensorFlowだけでなくTheanoやCNTKなど、マルチに動くように開発が進んでいくようです。
Sonnet
Googleが抱えるディープラーニングの論文生産集団Deepmindが社内で使っているライブラリです。Python2系のみの対応です。
tensorpack
全く知らない!学習速度が良いらしい。
所感
TensorFlow強すぎ
コミュニティの充実具合にびっくりしました。TensorFlowに本格的に集中しようと決めて、初めて本当の力に気づいた気がします。これは確かに雪だるま式に人が増えますね。ブログやGithubなどTensorFlowについて解説しているページがウェブ上にたくさん転がっています。
英語さえ許容すれば、いつでも本格的に勉強できる環境が整っていると言えるでしょう。
脅威のライブラリ達
Kerasはもちろん有名ですし、Sonnetも一度記事ですぐに取り上げました。しかし、他にもどうやらたくさんラッパーはあるみたいですね(ここは共有する上でも、1つに固まって欲しい気もしますが)。
ただ当然ライブラリ毎に粒度が違う感じはするので、ケースバイケースではあります。
すぐに簡易的に実装を行いたい場合はKerasですし、詳細に一から書いていくならTensorFlowを生で使うことになります。処理を自分で書きつつも、ニューラルネットの記述自体は楽にできるという感じなのがSonnetでしょう。SlimやTFLearnは若干Kerasと被り気味の気もします。
Jupyter Notebookは素晴らしい
いろいろなチュートリアルがJupyterNotebookで公開されています。別に自分が使わなくてもチュートリアルを実行していくことはできるのですが、やはり結果をその場で確認しながらコードを書いていけるのは便利です。
JupyterNotebookを更に便利にしたJupyterLabの開発にも注目していきたいです。
以下はJupyter Notebookを使ってデータサイエンスの領域を広く学ぶことのできる書籍です。これから広く触って行きたい人にはおすすめです。既に専門領域を持っている人にとっては、その領域の説明は物足りないかもしれませんが。