TensorFlow 2.0.0 リリースノート (翻訳)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 10/01/2019
* 本ページは、github TensorFlow の releases の TensorFlow 2.0.0 を翻訳したものです:
主要な特徴と改良
TensorFlow 2.0 は単純性と使いやすさにフォーカスして、次のようなアップデートを特徴としています :
- Keras と eager execution による容易なモデル構築。
- どのようなプラットフォームにおいても製品レベルの堅牢なモデル配備
- 研究のためのパワフルな実験。
- 重複を減じて deprecated エンドポイントを除去して API 単純化。
2.0 によるベストプラクティスの詳細については、Effective 2.0 ガイド を見てください。
貴方の既存の TensorFlow 1.x モデルをアップグレードするための情報については、アップグレード と マイグレーション ガイドを参照してください。チュートリアルと getting started ガイド のコレクションもまたリリースしました。
ハイライト
- TF 2.0 は Keras をモデルを構築して訓練するために使用される中心的な高位 API として届けます。Keras は素早い iteration と直感的なデバッグのための eager execution とスケーラブルな入力パイプラインを構築するための tf.data とともに、Sequential, Functional とサブクラス化のような幾つかのモデル構築 API を提供します。追加の詳細のために ガイド をチェックしてください。
- 分散ストラテジー : TF 2.0 ユーザは最小限のコード変更で訓練を分散するために tf.distribute.Strategy API を使用することができるでしょう、これは常識を超える良いパフォーマンスをもたらします。それはカスタム訓練ループに加えて Keras model.fit による分散訓練をサポートします。マルチワーカーとクラウド TPU のための実験的サポートとともにマルチ GPU サポートが利用可能です。より多くの詳細のために ガイド を確認してください。
- Functions, not Sessions. グラフを構築して tf.Session を通してそれを実行する伝統的な宣言的プログラミングモデルはやめて (= discouraged)、通常の Python 関数を書くことにより置き換えます。tf.function デコレータを使用すれば、そのような関数はグラフに変更できます、これはリモートに、シリアライズされそしてパフォーマンスのために最適化されて実行可能です。
- tf.train.Optimizers と tf.keras.Optimizers の統一。TF 2.0 のためには tf.keras.Optimizers を使用します。compute_gradients は public API として除去され、そして勾配を計算するためには GradientTape を使用します。
- AutoGraph は Python 制御フローを TensorFlow 式に翻訳し、ユーザに tf.function-decorated 関数内に通常の Python を書くことを可能にします。AutoGraph はまた tf.data, tf.distribute と tf.keras API と共に使用される関数でも適用されます。
- SavedModel への交換 (= exchange) フォーマットの統一。総ての TensorFlow エコシステム・プロジェクト (TensorFlow Lite, TensorFlow JS, TensorFlow Serving, TensorFlow Hub) は SavedModel を受け取ります。モデル状態は SavedModel にセーブされて (SavedModel から) レストアされるべきです。
- API 変更: 多くの API シンボルは名前変更されるか除去され、そして引数名は変更されました。これらの変更の多くは首尾一貫性と明瞭さにより動機づけられています。1.x API は compat.v1 モジュールで利用可能であり続けます。総てのシンボル変更のリストは ここ で見つかります。
- API クリーンアップ、absl-py のために tf.app, tf.flags と tf.logging の除去を含みます。
- tf.global_variables_initializer と tf.get_global_step のようなヘルパー・メソッドによるグローバル変数はもはやありません。
- v2 制御フローを有効/無効にするためにトグル tf.enable_control_flow_v2() と tf.disable_control_flow_v2() を追加します。
- tf.enable_v2_behavior() と TF2_BEHAVIOR=1 の一環として v2 制御フローを有効にします。
- API __init__.py ファイルで相対インポートを使用することに切り替えることによって殆どの TensorFlow API 参照のための autocomplete を修正しました。
- Volta と Turing Tensor Core 上の高速化のために Auto Mixed-Precision グラフ optimizer はモデルを float16 に変換することを単純化します。この特徴は tf.train.experimental.enable_mixed_precision_graph_rewrite() で optimizer クラスをラップすることおにより有効にできます。
- 環境変数 TF_CUDNN_DETERMINISTIC を追加します。”true” or “1” への設定は決定論的 cuDNN convolution と max-pooling アルゴリズムの選択を強制します。これが有効にされたとき、アルゴリズム選択手続き自身もまた決定論的です。
互換性を損なう変更
- API をクリーンアップしてそれらをより一貫性があるようにするために多くの後方非互換な API 変更が行われました。
- Toolchains:
- TensorFlow 1.15 (訳注: 原文ママ) は Ubuntu 16 上 devtoolset7 (GCC7) を使用してビルドされています。これは TensorFlow のより早期のバージョンに対してビルドされた拡張との ABI 非互換性に繋がるかもしれません。
- TensorFlow コードは今では 2 つの異なる pip パッケージを生成します : tensorflow_core、これは総てのコードを含みます (将来的にはそれは private 実装だけを含むでしょう)、そして tensorflow、これは tensorflow_core への forwarding を行なう仮想 pip パッケージです (そして将来的には tensorflow の public API だけを含むでしょう)。これを互換性を損なうとは想定していません、貴方が実装から直接的にインポートしていなければ。freeze_graph コマンドラインツールは除去しました ; frozen グラフの代わりに SavedModel が使用されるべきです。
- tf.contrib:
- tf.contrib は deprecated となりました、そして機能はコア TensorFlow API か、tensorflow/addons や tensorflow/io のようなエコシステム・プロジェクトにマイグレートされたか、あるいは完全に除去されました。
- TF distributions 上の tf.contrib.timeseries 依存性を除去します。
- early_stopping.py で api のために contrib 参照を tf.estimator.experimental.* で置き換えます。
- tf.estimator:
- tf.estimator.DNN/Linear/DNNLinearCombined ファミリの premade estimator は tf.compat.v1.train.Optimizers の代わりに tf.keras.optimizers を使用するようにアップデートされました。optimizer= arg を渡さないか文字列を使用する場合、premade estimator は Keras optimizer を使用します。これはチェックポイント breaking です、何故ならば optimizers は別の変数を持つからです。optimizers を変換するためのチェックポイント converter ツールはリリースと共に含まれていますが、どのような変更も回避することを望む場合には、estimator の v1 バージョン: tf.compat.v1.estimator.DNN/Linear/DNNLinearCombined* に切り替えてください。
- canned Estimators のためのデフォルト aggregation は今は SUM_OVER_BATCH_SIZE です。以前のデフォルトの挙動を維持するためには、loss aggregation メソッドとして SUM を渡してください。
- canned Estimators は API で input_layer_partitioner arg をサポートしません。この arg を持つ場合、tf.compat.v1 canned Estimators に切り替えなければならないでしょう。
- Estimator.export_savedmodel は export_saved_model に名前変更されました。
- SavedModel にセーブするとき、Estimators はデフォルトの op 属性を取り除きます (= strip)。これは殆どいつも正しい挙動です、何故ならばそれはより前方互換であるからです、しかしデフォルト属性をがモデルと一緒にセーブされることを必要とする場合、tf.compat.v1.Estimator を使用してください。
- Feature Columns はより Eager-friendly にそして Keras と一緒に動作するようにアップグレードされました。その結果、tf.feature_column.input_layer は tf.keras.layers.DenseFeatures のために deprecated となりました。v1 feature columns は shared_embedding_columns を除いて v2 の直接的な類似を持ちます、これは v1 と v2 と交差互換ではありません。代わりに tf.feature_column.shared_embeddings を使用してください。
- tf.keras:
- デフォルト Keras config で OMP_NUM_THREADS はもはや使用されません。スレッド数を configure するには tf.config.threading API を使用します。
- tf.keras.model.save_model と model.save は今では TensorFlow SavedModel をセーブすることがデフォルトです。HDF5 ファイルは依然としてサポートされます。
- tf.keras.experimental.export_saved_model と tf.keras.experimental.function は deprecated しました。代わりに tf.keras.models.save_model(…, save_format=’tf’) と tf.keras.models.load_model を使用してください。
- Layer は今では float32 がデフォルトで、それらの入力を自動的に Layer の dtype にキャストします。float64 を使用したモデルを持っていた場合、それは TensorFlow 2 では多分静かに float32 を使用します、そして “Layer <layer-name> is casting an input tensor from dtype float64 to the layer’s dtype of float32” で始まる警告が発行されます。修正するには、tf.keras.backend.set_floatx(‘float64′) でデフォルト dtype を float64 に設定するか、Layer コンストラクタの各々に dtype=’float64’ を渡します。より多くの情報は tf.keras.layers.Layer を見てください。
- tf.lite:
- 2.0 API から lite.OpHint, lite.experimental そして lite.constant を除去しました。
- Tensor はもはや hashable ではありませんが、代わりに == と != で element-wise に比較します。以前の挙動に戻すためには tf.compat.v1.disable_tensor_equality() を使用してください。
- 非互換な shape を持つ Tensor や Variable 上の等値演算の遂行はもはや例外は上げられません。代わりに __eq__ は False を返して __ne__ は True を返します。
- v2 API から tf.string_split を除去しました。
- ResourceVariable で constraint= と .constraint の使用は deprecated しました。
- tf2.0 のための 新しい GRU 実装として UnifiedGRU を追加します。2.0 で GRU のためのデフォルトの recurrent 活性化関数を hard_sigmoid から sigmoid に、そして reset_after を True に変更します。歴史的には recurrent 活性は hard_sigmoid です、何故ならばそれは ‘sigmoid’ より高速だからです。CPU と GPU モード間の新しい統一されたバックエンドでは、CuDNN カーネルが sigmoid を使用していますので、CPU モードのためのデフォルトもまた sigmoid に変更しました。それにより、デフォルト GRU は CPU と GPU カーネルの両者と互換になるでしょう。これは GPU でユーザに CuDNN カーネルをデフォルトで使用することを可能にして訓練で 10x パフォーマンス・ブーストを得ることを可能にします。これはチェックポイント breaking な変更であることに注意してください。ユーザが 1.x 事前訓練されたチェックポイントを使用することを望むのであれば、1.x 挙動に後退するために層を GRU(recurrent_activation=’hard_sigmoid’, reset_after=False) で構築してください。
- CUDNN_INSTALL_PATH, TENSORRT_INSTALL_PATH, NCCL_INSTALL_PATH, NCCL_HDR_PATH は deprecated です。代わりに TF_CUDA_PATHS を使用してください、これは (CUDA ライブラリとヘッダを見つけるために検索される) base パスのカンマ区切りリストをサポートします。
最近の issues と開発進捗への洞察のためには Github 上の public プロジェクト・ステータス・トラッカー と 2.0 でタグ付けされた issues を参照してください。
TF 2.0 を使用する時にどのような引っ掛かり (障害) を経験しても、TF 2.0 Testing User Group で知らせてください。私達は毎週のテスティング・ミーティングに加えてサポート・メーリングリストを持ちます、そして貴方のマイグレーション・フィードバックと質問を聞くことを強く望みます。
バグ修正とその他の変更
(訳注 : 翻訳を省略します、必要であれば 原文を参照してください。)
以上