前回、【深属学習】について色んな記事を話しました。
今回の記事はGoogleが2019年初に公開したTensorFlow 2.0について紹介します。
本番リリースではないですが、現在の時点TensorFlow 2.0 Betaです。
リリース日のタイムライン:
2019年3月4日 TensorFlow 2.0 Alphaのリリース
2019年6月日8 TensorFlow 2.0 Betaのリリース
> pip install tensorflow==2.0.0-beta0 |
本記事では、TensorFlow 2.0の変更点についてまとめたいと思います。
Google I/O’19のアナウンスとDesign Documentを参考しました。
TensorFlowのアナウンスにもある通り、TensorFlow 2.0における大きな変更点は以下の4つになります。
1.Eager Modeのデフォルト化
2.Sessionとplaceholder消滅
3.kerasが、TensorFlow標準の高レベルAPIに
4.TensorFlow 2.0の全体構成
1. Eager Modeのデフォルト化
eager executionはDefine-by-runの機能になります。Define by Runでは、計算グラフ(ニューラルネットの構造)の構築とデータを流しながら行います。Define and Runでは、計算グラフを構築してから、そこにデータを流していきます。
従来の tensorflow は Define-and-run で、 PyTorch やChainer は Define-by-run です。
eager execution は tensorflow で Define-by-run を可能にする仕組みです。
Eager Modeを利用する場合、 TensorFlow2.xはenable_eager_executionが必要なくなりました。
TF 1.X | TF 2.0 |
import tensorflow as tf | import tensorflow as tf |
2. Sessionとplaceholderがなくなりました
TensorFlow 1.x では、まずグラフを構築してから、tf.Session.run() でグラフを実行します。TensorFlow2では、Sessionがいりませんでした。
または、TensorFlow 2では、placeholderは入力の値自体と重複して二度手間なコードなので、placeholderも消滅しました。
TF 1.X | TF 2.0 |
W = tf.Variable( | W = tf.Variable( |
3. kerasが、TensorFlow標準の高レベルAPIに
TensorFlow 1.xにおけるtf.kerasを使ったコードは、基本的に何も変更することなく、そのままTensorFlow 2.0でも使えます。ただ、keras の api と tf の api が混在しているのを整理しました。
tf.layers ↔ tf.keras.layers
tf.losses ← tf.keras.losses
tf.metrics ← tf.keras.metrics
…など
さらに、Tensorflow2では、Model Subclassesモードを追加しました。Model Subclassesはクラスの構成でグラフを作成することができます。
TF 1.X、2.0 | TF 2.0 #Model Subclasses |
#For Beginner | #For Exports |
4. TensorFlow 2.0の全体構成
TensorFlow 2.0の全体構成をまとめると、下記の図になります。
左側が訓練(TRAINING)の機能、右側が運用環境へのデプロイ(DEPLOYMENT)の機能です。
まとめ
TensorFlow 2.0 beta版の新機能・主な変更点をまとめました。以前Pytorchとchainerの強みに対して、Eager Modeのデフォルト化のデフォルト化が一番大きな変更ではないでしょうか。Sessionとplaceholder消滅すると作成しやすくになりました。KerasのTensorFlowの強みを強化しました。TensorFlow 2.0の全体構成を整理して使い方法を増やすでしょう。まだbeta版なので、TensorFlow 2.0のリリースを楽しみにしながら待ちたいと思います。