Translate

2017年6月16日金曜日

TensorFlow 1.2.0 の変更点を翻訳してみる

今朝、自分のTwitterのタイムラインで TensorFlow が 1.2.0 になったことを知った。


前日TensorFlowサイトではたしかに一番上には "API r1.1" だったのが、今みるとたしかに " AIP r1.2" になっている。

TensorFlow DevSummit2017 の動画で、怒涛の更新がかかることは知っていたが、つい昨日動いていたサンプルコードが今日動かない憂き目をここ数ヶ月何度味わったことか..


しょうがないので Release 1.2.0 のところだけ翻訳してみた。
いつもどおり参照するかたは at your own risk でお願いします。

-----

Release 1.2.0


主な機能と改善点


  • WindowsでのPython 3.6をサポートしました。
  • 時空間デコンボリューションのための tf.layers.conv3d_transpose レイヤが追加されました。
  • tf.Session.make_callable() を追加しました。これは、同様のステップを複数回実行するオーバーヘッドを削減します。
  • contrib ibverbs ベースの RDMA サポートが追加されました(Yahoo @junshi15 の黙認により)。
  • RNNCell オブジェクトは、 tf.layers.Layer のサブクラスになりました。 TensorFlow 1.1 リリースで説明されている厳密性はなくなりました。 RNNCell が初めて使用されたときに、そのスコープがキャッシュされます。将来の RNNCell の使用はすべて同じスコープの変数を再利用します。これは TensorFlow バージョン <= 1.0.1 の RNNCells の動作からの大きな変化です。 TensorFlow 1.1 には、古いコードが新しいセマンティクスで正しく機能することを確認するためのチェックがありました。このバージョンでは RNNCell の柔軟な使用が可能になりますが、 TensorFlow <= 1.0.1 のコードを使用すると微妙なエラーにつながる可能性があります。たとえば、 MultiRNNCell([lstm] * 5) と書くと、各層が同じパラメータを共有する5層 LSTM スタックが構築されます。独自のパラメータで5つのレイヤーを取得するには、 MultiRNNCell([LSTMCell(...) for _ in range(5)]) と記述します。全くわからない場合は、最初に TF 1.1 でコードをテストしてください。エラーが発生していないことを確認し、 TF 1.2 にアップグレードしてください。
  • TensorForest Estimator は、サーブ用の SavedModel エクスポートをサポートするようになりました。
  • クライアント提供の ClusterSpec をサポートし、それらをすべてのワーカーに伝播し、動的な TensorFlow クラスタの作成を可能にします。
  • TensorFlow C ライブラリが Windows 用に利用可能になりました。
  • TensorBoard の新しいオープンソース版をリリースしました。
  • SavedModelMetaGraph を調べて実行するための SavedModel CLI ツールの提供。
  • TensorFlow の Android リリースは、アプリケーションへの統合を容易にするため、 jcenter にプッシュされるようになりました。 詳細については、 https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/android/README.md をご覧ください。
  • RNNCells の変数名は、Keras レイヤーとの一貫性のために名前が変更されました。 具体的には、以前の変数名  "weights" と  "biases" がそれぞれ "kernel" と "bias" に変更されました。 このような RNN セルを含む古いチェックポイントに関する後方互換性が損なわれる可能性があります。この場合、ツール checkpoint_convert スクリプトを使用して古いチェックポイントの変数名を変換することができます。
  • 1.0 リリース以前の tf.nn 名前空間にあって、 tf.contrib.rnn に移動された多くの RNN 関数とクラスは、コア名前空間に戻されました。これには、 RNNCell 、 LSTMCell 、 GRUCell 、および他の多くのセルが含まれます。これらは現在 tf.nn.rnn_cell にあります(下位互換性のために tf.contrib.rnn のエイリアスが付いています)。元の tf.nn.rnn 関数は tf.nn.static_rnn になりました。双方向静的スタティック関数と状態保存静的関数も tf.nn 名前空間に戻ります。
  • 注目すべき例外は EmbeddingWrapper 、 InputProjectionWrapper 、 OutputProjectionWrapper です。これはゆっくりと tf.contrib.rnn の非推奨に移行します。これらは非効率的なラッパーで、 rnn の前処理または後処理として embedding_lookup または layers.dense を呼び出すことによって置き換えられることがよくあります。 RNN のデコードでは、この機能は tf.contrib.seq2seq の代替APIに置き換えられました。
  • インテルMKLインテグレーション( https://software.intel.com/en-us/articles/tensorflow-optimizations-on-modern-intel-architecture )。インテルは、数多くの最適化されたディープ・ラーニング・プリミティブを開発しました。行列の乗算とコンボリューションに加えて、これらのビルディング・ブロックには次のものがあります。直接バッチ・コンボリューションプール:最大、最小、平均正規化:LRN、多次元転置(変換)、分割、連結、合計、およびスケール。

廃止

  • TensorFlow 1.2 は、cuDNN 5.1 で構築する最後の機会になります。 TensorFlow 1.3 以降、cuDNN 6.0 を使用して、すべてのビルド済みバイナリをビルドしようとします。 私たちは、ソースコードを cuDNN 5.1 と互換性を保つように努めますが、最善の努力をします。

API の変更点

  • org.tensorflow.contrib.android.TensorFlowInferencefaceは可能な限り例外をスローし、メソッドシグネチャを単純化しました。


Contrib APIの変更

  • tf.contrib.util.create_exampleを追加しました。
  • tf.contrib.imageに双線形補間を追加しました。
  • カスタムのシードコントロールを使用してランダム操作にtf.contrib.statelessを追加します。
  • contrib/distributions/ に追加された MultivariateNormalFullCovariance
  • tensorflow/contrib/rnnは、Kerasレイヤーとの一貫性のためにRNNセル変数の名前を変更します。 具体的には、前の変数名「weights(重み)」と「biases(バイアス)」をそれぞれ「kernel(カーネル)」と「bias(バイアス)」に変更する。 このようなRNNセルを含む古いチェックポイントに関する後方互換性が損なわれる可能性があります。この場合、checkpoint_convertスクリプトを使用して古いチェックポイントの変数名を変換することができます。
  • TensorFlowのprimal(明示的)カーネルメソッドのためのOpsestimatorsを持つtf.contrib.kernel_methodsモジュールを追加しました。


バグ修正、その他の変更

  • Python では、 type 属性の Operation.get_attr は、 protobuf 列挙型ではなく、予想される get_attr ドキュメントに一致する Python DType バージョンの型を返します。
  • iOS ライブラリを構築する際に、 MIN_SDK のバージョンを 8.0 に変更しました。
  • LIBXSMM の統合を修正しました。
  • decode_jpeg/decode_png/ decode_gif がすべてのフォーマットを扱うようにするのは、ユーザーが画像を間違ったタイプとして解読しようとすることが多いからです。
  • 暗黙 broadcasting の低下を改善。
  • GCS/Bigquery クライアントの安定性を向上させます。
  • proto 依存関係を最小限に抑えるために、 OpKernelConstruction::op_def() を削除してください。
  • VectorLaplaceDiag ディストリビューションが追加されました。
  • Android のデモでは libtensorflow_demo.so を実行する必要はありません( libtensorflow_inference.so はまだ必要です)
  • categorical_column_with_vocabulary_file を追加しました。
  • Session::Run() 呼び出しでテンソルをバッチ/アンバッチするための ops を導入します。
  • tf.log_sigmoid(x) = tf.log(tf.sigmoid(x)) = -tf.nn.softplus(-x) を追加します。
  • フックリストを変更不能なタプルに変更しました。これで、関連する引数の任意の反復可能性が可能になりました。
  • TFDecorator を紹介します。
  • 音声機能の生成に Mfcc を追加しました。
  • 改善された DirectSession::Run() オーバーヘッドとエラーチェック。内部エラーを非同期的に発生させる代わりに、間違った型の値を入力すると INVALID_ARGUMENT エラーが同期的に発生するようになりました。間違った型のテンソルを与えるときの(未定義の)振る舞いに依存するコードを更新する必要があるかもしれません。
  • 還元されていない NONE を追加し、損失の MEAN オプションを減らしました。 他の縮小定数から "WEIGHTED_" 接頭辞を削除しました。
  • assertAllClose dicts を処理するようになりました。
  • HloInstructions 用の Gmock マッチャを追加しました。
  • 変数の復元時にエラーに var 名を追加します。
  • オーディオ機能生成用の AudioSpectrogram を追加しました。
  • 損失の削減 arg を追加しました。
  • tf.placeholder は、スカラー形状を表すことができ、部分的に知られています。
  • estimator_spec(mode) 引数を削除してください。
  • オーディオ機能生成用の AudioSpectrogram を追加しました。
  • TensorBoard は、40回以上実行されている場合、デフォルトですべての実行を無効にします。
  • 古いドキュメント生成コードを削除しました。
  • GCS ファイルシステムの統合で、ドメインバケット( gs://bucket.domain.com/path など )がサポートされるようになりました。
  • テキストを TensorBoard に出力するための tf.summary.text を追加します。
  • tfdbg のコマンドラインインターフェースの "run" コマンドは、ノード名、opタイプ、およびテンソルdtypeによるテンソルのフィルタリングをサポートするようになりました。
  • tf.string_to_numberint64 float64 の出力をサポートするようになりました。

 

貢献に対する謝辞


このリリースには、Googleの多くの人々の貢献が含まれていますのでここに感謝の意を表します:

4F2E4A2E, Aaron Schumacher, Abhi Agg, admcrae, Adriano Carmezim, Adrià Arrufat, agramesh1, Akimitsu Seo, Alan Mosca, Alex Egg, Alex Rothberg, Alexander Heinecke, Alexander Matyasko, Alexandr Baranezky, Alexandre Caulier, Ali Siddiqui, Anand Venkat, Andrew Hundt, Androbin, Anmol Sharma, Arie, Arno Leist, Arron Cao, AuréLien Geron, Bairen Yi, Beomsu Kim, Carl Thomé, cfperez, Changming Sun, Corey Wharton, critiqjo, Dalei Li, Daniel Rasmussen, Daniel Trebbien, DaríO Hereñú, David Eng, David Norman, David Y. Zhang, Davy Song, ddurham2, Deepak Subburam, Dmytro Kyrychuk, Dominic Rossi, Dominik SchlöSser, Dustin Tran, Eduardo Pinho, Egil Martinsson, Elliot Saba, Eric Bigelow, Erik Smistad, Evan Klitzke, Fabrizio Milo, Falcon Dai, Fei Gao, FloopCZ, Fung Lam, Gautam, GBLin5566, Greg Peatfield, Gu Wang, Guenther Schmuelling, Hans Pabst, Harun Gunaydin, Huaizheng, Ido Shamay, Ikaro Silva, Ilya Edrenkin, Immexxx, James Mishra, Jamie Cooke, Jay Young, Jayaram Bobba, Jianfei Wang, jinghua2, Joey Meyer, John Maidens, Jonghoon Jin, Julian Villella, Jun Kim, Jun Shi, Junwei Pan, jyegerlehner, Karan Desai, Karel Van De Plassche, Kb Sriram, KhabarlakKonstantin, Koan-Sin Tan, krivard, Kwotsin, Leandro Gracia Gil, Li Chen, Liangliang He, Louie Helm, lspvic, Luiz Henrique Soares, LáSzló Csomor, Mark Wong, Mathew Wicks, Matthew Rahtz, Maxwell Paul Brickner, Michael Hofmann, Miguel Flores Ruiz De Eguino, MikeTam1021, Mortada Mehyar, Mycosynth, Namnamseo, Nate Harada, Neven Miculinic, Nghia Tran, Nick Lyu, Niranjan Hasabnis, Nishidha, Oleksii Kuchaiev, Oyesh Mann Singh, Panmari, Patrick, Paul Van Eck, Piyush Chaudhary, Quim Llimona, Raingo, Richard Davies, Ruben Vereecken, Sahit Chintalapudi, Sam Abrahams, Santiago Castro, Scott Sievert, Sean O'Keefe, Sebastian Schlecht, Shane, Shubhankar Deshpande, Spencer Schaber, Sunyeop Lee, t13m, td2014, Thomas H. P. Andersen, Toby Petty, Umang Mehta, Vadim Markovtsev, Valentin Iovene, Vincent Zhao, Vit Stepanovs, Vivek Rane, Vu Pham, wannabesrevenge, weipingpku, wuhaixutab, wydwww, Xiang Gao, Xiaolin Lin, xiaoyaozhuzi, Yaroslav Bulatov, Yi Liu, Yoshihiro Sugi, Yuan (Terry) Tang, Yuming Wang, Yuxin Wu, Zader Zheng, Zhaojun Zhang, zhengjiajin, ZhipengShen, Ziming Dong, zjj2wry

私たちは、問題提起し、解決するのを助け、質問し、質問に答えたすべての人にも感謝しています。


--------
ここまで。

やはりというか、RNN系のサンプルはまた影響を受ける..というか戻すとかいうのは..正直「えっ」となってしまうよねえ..

このあたりのいじりが多いのは、テキスト操作系のディープラーニングをGoogleが頑張っていると読んで良いのだろうか..

1.2.0 で keras がとりこまれることは DevSummit の動画で知っていた。たしかあのときは tf.keras だったのだけど、 tf.contrib.keras ?まさかまた正式ライブラリとして tf.keras 昇格なんてないだろうな..


0 件のコメント:

FloydHubを使ってKerasのサンプル lstm_text_generation.py を動かしてみる

タイムラインにふらっと入ってきた記事で FloydHubというものを知った。 FloydHub https://www.floydhub.com/ Heroku風の機械学習環境のPaaSとのこと。 .. そもそもHeroku知らない んですけど..というかPyth...