はじめに
TensorFlowのeagerモードがTensorFlow1.5からcontribに出てきました。そのうちcontribから本来に行くのではないでしょうか。
eagerモードではTensorFlowをPyTorchやChainerのようなDefine by Runとして扱うことが可能になります。TreeLSTMのような動的なグラフの類はもちろんのこと、通常の実装においても圧倒的にデバッグが行いやすくなることが想定できます。現状TensorFlowは産業応用においても最も運用がしやすいものだと思われますので、扱いやすさを兼ね備えれば更にTensorFlowへの流れ込みが多くなるのではないでしょうか。
TensorFlowはディープラーニングのみならずベイズ推論や決定木、SVMやFFTなどの幅広い科学技術計算系統を取り揃えています。またデータの一般的な処理や保存にも長けており、もっと広い範囲での利用ができるようになる可能性もあります。また、GPUにシームレスに移行出来ることは大きな利点です。
そのうち自分でもeagerを触ってみようと思いますが、現状公開されているeagerに関する記事をここにまとめておきます。
記事
基本的な計算の仕方
基本的な計算をeagerを使う方法と使わない方法で比較しています。
ニューラルネットワークの話は出てきませんが、numpyライクに使える雰囲気を見ることができます。これがGPUシームレスだと思うと、一般的な計算に関してもなかなか便利なのではないでしょうか。
ネットワークを構築して学習させる
eagerが発表されて割と間もないころ(1.5が公開される前の段階)で上がったアドベントカレンダーの記事。Pytorchとの比較がなされています。
各層にtf.layersを利用できるためネットワークを簡単に記述できます。学習時とテスト時にドロップアウトなど切り替えは明示的にコードで書く必要があるようです(if文を書いている)。
学習のコードは若干見慣れない感じで、微分計算はそのための関数に突っ込んであげる模様。あとはその結果をoptimizerのメソッドの引数に渡してパラメータの更新を行うようです。(まあ、あんまり変わらないけどChainerやPyTorchに比べたら、明示的に関数に渡していく使い方ですね)
Google Research Blogでの紹介
使ってみたも何も本体の話ですが、eagerモードのコード例がいくつか載っています。
実はeagerモードのために特有の機能をたくさん追加したわけではないようです。。
- tf.dataを使うと高速になる
- tf.layersやtf.kerasを使って層を定義する使い方ができる。(もちろんtf.Variableでパラメータを定義もできます)
- 基本的に従来のTensorFlowのAPIを普通に使える(ただし、もともとTensorFlowで扱えない動的なモデルは別)
- 一度tfe.enable_eager_execution()でeagerモードにすると、新しいPythonのセッションを立てなければ従来のモードには戻れないようです。これはJupyter Notebookなどを使うときに注意が必要ですね。