TensorFlow 2.0 Alpha : アップグレード・スクリプトで変換する (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 03/12/2019
* 本ページは、TensorFlow の本家サイトの TF 2.0 Alpha の以下のページを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
アップグレード・スクリプトで変換する
TensorFlow 2.0 は引数の順序変更、シンボルの名前変更そしてパラメータのデフォルト値変更のような多くの API 変更を含みます。これらの変更総てを手動で遂行することは退屈で誤りがちになるでしょう。変更を合理化して貴方の TF 2.0 への移行をできる限りシームレスにするために、TensorFlow チームはレガシーコードを新しい API に移行する手助けをするために tf_upgrade_v2 ユティリティを作成しました。
tf_upgrade_v2 ユティリティは TF 2.0 の pip install で自動的に含まれます。それは既存の TensorFlow 1.x Python スクリプトを TensorFlow 2.0 に変換することにより貴方のアップグレードプロセスを加速します。
変換スクリプトはできる限り自動化しますが、依然としてスクリプトで遂行できない構文的そしてスタイル的な変更があります。
互換モジュール
特定のある API シンボルは文字列置換の単純な使用ではアップグレードできません。貴方のコードが TensorFlow 2.0 で依然としてサポートされることを確実にするため、アップグレード・スクリプトは compat.v1 モジュールを含みます。このモジュールは tf.foo のような TF 1.x シンボルを等値な tf.compat.v1.foo 参照で置き換えます。互換モジュールが素晴らしい一方で、置き換えを手動で校正してそれらを tf.compat.v1.* 名前空間の代わりに tf.* 名前空間の新しい API に出来る限り迅速に移行することを推奨します。
TensorFlow 2.x モジュールの deprecation (例えば、tf.flags と tf.contrib) により、幾つかの変更は compat.v1 への切り替えでは対応できません。このコードのアップグレードは追加ライブラリ (例えば、absl.flags) の使用や tensorflow/addons のパッケージへの切り替えが必要かもしれません。
アップグレード・スクリプト
貴方のコードを TensorFlow 1.x から TensorFlow 2.x へ変換するためには、これらの手順に従ってください :
pip パッケージからスクリプトを実行する
最初に、tensorflow==2.0.0-alpha0 か tensorflow-gpu==2.0.0-alpha0 パッケージを pip install します。
Note: tf_upgrade_v2 は TensorFlow 1.13 と (nightly TF 2.0 ビルドを含む) それ以後のために自動的にインストールされます。
アップグレード・スクリプトは単一の Python ファイル上で実行できます :
tf_upgrade_v2 --infile tensorfoo.py --outfile tensorfoo-upgraded.py
スクリプトはコードのための fix を見つけられない場合にはエラーをプリントします。ディレクトリ・ツリー上でそれを実行することもできます :
# upgrade the .py files and copy all the other files to the outtree tf_upgrade_v2 --intree coolcode --outtree coolcode-upgraded # just upgrade the .py files tf_upgrade_v2 --intree coolcode --outtree coolcode-upgraded --copyotherfiles False
詳細レポート
スクリプトはまた詳細な変更のリストも報告します、例えば :
'tensorflow/tools/compatibility/testdata/test_file_v1_12.py' Line 65 -------------------------------------------------------------------------------- Added keyword 'input' to reordered function 'tf.argmax' Renamed keyword argument from 'dimension' to 'axis' Old: tf.argmax([[1, 3, 2]], dimension=0)) ~~~~~~~~~~ New: tf.argmax(input=[[1, 3, 2]], axis=0))
この情報の総ては report.txt ファイルに含まれます、それは貴方のカレント・ディレクトリにエクスポートされます。ひとたび tf_upgrade_v2 が実行されて貴方のアップグレードされたスクリプトがエクスポートされれば、貴方のモデルを実行して出力が TF 1.x に類似していることを確実にするためにチェックできるでしょう。
警告 (= Caveats)
- このスクリプトを実行する前に貴方のコードの一部を手動でアップデートしないでください。特に、tf.argmax や tf.batch_to_space のように引数を順序変更した関数はスクリプトに (貴方の既存のコードをミスマップする) 正しくないキーワード引数を追加させる原因になります。
- このスクリプトは引数の順序変更をしません。代わりに、スクリプトは (引数を順序変更した) 関数にキーワード引数を追加します。
以上