New tf.keras
Masao Taketani (竹谷 昌夫)
自己紹介 (Self-Introduction)
名前(name):竹谷 昌夫 (Masao Taketani)
学歴(education):アメリカの大学の理工学部統計学科を卒業 (BS in Statistics)
職業(occupation):ディープラーニングエンジニア (Deep Learning Engineer)
業務では主に画像系を担当するが、業務外では自然言語処理やレコメンドも経験あり
今までの tf.keras
モデル構築がシンプルでPythonicな書き方ができる。ただ、小さなモデル構築用
に作られており、大規模なモデル構築用ではなかった。
tf.estimator
そこで、スケーラビリティを意識したAPIとしてtf.estimatorがあった。
tf.estimatorを使用すれば分散学習も容易に行える。tf.estimatorならWide &
Deep Learning等のモデルもbuilt-inとして備わっており、学習や、本番環境用に
デプロイすることが容易に可能。
新しい tf.keras
TensorFlow 2.0からは、モデルの構築に関しては今までのtf.kerasと同じ書き方
で書けるように標準化し、そこにtf.estimatorも持ってくることでtf.kerasからプ
ロトタイプ作成、分散学習、そして本番環境へのデプロイまでが容易にできるよ
うになった。
古いtf.kerasでのモデルの書き方
新しいtf.kerasでのモデルの書き方
新しいtf.kerasのその他の特徴
● 今までのtf.kerasはグラフ構造を基にし、sessionを走らせることでデータを
投入していたが、新しいtf.kerasではEager modeでデータを投入させること
ができる(Define by Run)。
● データセットのパイプラインはnumpy配列の様に扱うことができ、デバッグ
も楽になる。かつ同時にデータセットも高いパフォーマンスのためにオーバ
ヘッドができるだけかからないように最適化される。
Eagerモード
● Eagerモードでもグラフの利点をそのまま残している。
● Eagerはデバッグやプロトタイプ作成を容易にさせるが、一方でTensorFlow
のランタイムがパフォーマンスやスケーリングの最適化の役割を賄う。
● 「run_eagarly」というフラグを使用することによって、明示的にeagerモー
ドでモデルをステップバイステップに走らせることができる。
多くのAPIをわかりやすく統合
● optimizers、metrics、losses、layersはtf.kerasの下にそれぞれ一つのセッ
トに統合され、eagerモードの使用、単独での学習か分散での学習かによら
ず使用できる。
● built-inにないものを利用したい際も、サブクラスを用いてカスタマイズする
ことができる。
● layersにおいてはkerasのAPI仕様書に書いてあるものはすべて使用可能。
RNNレイヤーの変更
今までのTensorFlowではいくつかのLSTMとGRUのバージョンがあり、cuDNNを
使用する際は実行する前に記載する必要があったが、新しいバージョンでは
LSTMもGRUも一つのバージョンしかなく、CPUを使用するかGPUを使用するか
は利用状況により、ランタイム時に自動で行ってくれる。
tf.kerasからtf.feature_columnが使用可能
tf.feature_columnは生データをestimatorが必要なフォーマットに変換する役目
を担っていたが、TensorFlow 2.0ではtf.kerasで作られたモデルにも
tf.feature_columnが使用できるようになった。
tf.kerasからTensorBoardの使用
● tf.kerasでTensorBoardを使用する際は一行で簡単に書くことができる。
● TensorBoardでaccuracy、loss、モデルの形状等が見れる。
● モデルのパフォーマンスやデバイスの配置確認、学習時のボトルネックを容
易に見つけることができるようなフルプロファイリング機能を追加。
手軽にできる分散学習
● tf.distribute.Strategy APIを使用することで、Kerasの利便性を保ちながら分
散学習のためのスケールアップが容易にできる。
● 下記の例では、変数は複数のGPUにコピーされ、学習時にallreduceを用いて
同期される。
モデルのセーブ/ロード
● 本番環境、スマホ、またはPython以外の言語で利用するために、モデルのセ
ーブやロードも簡単に行える。
● この機能はまだ実験段階(APIの詳細を調整中)だが、TF Serving、TF Lite等に
簡単にエクスポートしたり、再学習のためにリロードできるようになってい
る。
マルチノードでの同期(開発中)
まだ開発中だが、複数のマシーンで同期させて学習を行うための機能も追加予定
であり、現在試すことも可能。
TPUを用いた分散学習(開発中)
● 次のTensorFlowのリリースまで待たなければならないが、TPUの分散学習も
keras上からできるように開発中である。
● リリースされれば、TPUが利用できるGCPやColab上で使用できる。
2.0のファイナルバージョンに向けて
2.0の完成に向けて以下のスケーラビリティをtf.kerasに付け加えようとしている
。
・tf.kerasからのParameterServerStrategyの利用
・tf.kerasからのestimatorのモデル(Wide & Deepモデル等)利用
・巨大なモデルを扱うためのvariable partitioning
tf.thanks!

New tf.keras