Translate

2017年10月17日火曜日

TensorFlow 1.4.0 rc0 がリリースされていた

タイムラインにTensorFlow1.4.0 rc0 のリリース案内が流れてきました。
ので、何処が変わったかGitHubのREADMEを翻訳してみました。

以下、参照される場合は、at your own risk でお願いします。

-------

TensorFlow 1.4.0-rc0


リリース 1.4.0


主要な機能および改善点


  • tf.dataはコアTensorFlow APIの一部になりました
  •  APIは現在、下位互換性の保証を受けています。
  •  tf.contrib.data APIから移行する方法については、README参照のこと。
  •  主な新機能には、Dataset.from_generator() (Pythonジェネレータからの入力パイプラインを構築するため)、カスタム変換関数を適用するための Dataset.apply()メソッドがあります。
  •  tf.contrib.data.batch_and_drop_remainder()tf.contrib.data.sloppy_interleave() などいくつかのカスタム変換関数が追加されました。
  • 単純な分散Estimatorトレーニングのための train_and_evaluate を追加しました。
  • DCT-IIを計算するためのtf.spectral.dctを追加しました。
  • Mel-Frequency Cepstral Coefficientのサポートのために tf.contrib.signalを追加しました(GPUおよびグラディエントサポートあり)。
  • Windows DLLの問題のために import tensorflow 処理時セルフチェックを追加しました。
  • GPU上での tf.depth_to_space にNCHWサポートを追加しました。
  • contrib.distributions SinhArcsinh (スカラー)分布を追加しました。
  • GANEstimator オープンソースを構築しました。
  • Estimator.export_savedmodel() にすべての有効なサービスシグネチャが含まれるようになりました。
  • Estimator.export_savedmodel() には、サービング入力レシーバと利用可能なすべての ExportOutputs から構築できるすべての有効なサービングシグネチャが含まれるようになりました。 例えば、分類器は、分類フレーバな出力に加えて、回帰および予測フレーバな出力を提供することができます。これらからシグネチャを構築することで、 TF サービングはさまざまな API(ClassifyRegress、および Predict) を使用してリクエストを尊重することができます。 さらに、 serving_input_receiver_fn() は入力として機能するノードの代替サブセットを指定できるようになりました。 これは、例えば、直列化された tf.Example の代わりに生の Tensors を受け入れる分類子の予測シグネチャを生成することを可能にします。
  • tf.contrib.bayesflow.hmc を追加しました。
  • tf.contrib.distributions.MixtureSameFamily を追加しました。
  • Dataset.shuffle() は、デフォルトで各繰り返しの後に常に再シャッフルされます。
  • tf.contrib.bayesflow.metropolis_hastings を追加しました。
  • tf.contrib.distributions.Poissonlog_rate パラメータを追加しました。
  • tf.contrib.distributions.bijector API を拡張して非注入のものを処理
  • いくつかの非注入変換をハンドル
  • Java:
  •  型安全性を向上させるジェネリックス(Tensor など)(@andrewcmyers の好意より)。
  •  多次元ストリングテンソルのサポート。
  •  Linux および OS X上でカスタム操作(たとえば、tf.contribの多く)の読み込みをサポート。

バグフックスおよびその他変更


  • tf.nn.rnn_cell.DropoutWrapperは、LSTM状態を取り除くことに、今より注意が必要です。 具体的には、LSTMStateTuplec(メモリ)状態を削除することはなくなりました。 新しい動作により、LSTMとスタックされたLSTMの適切なドロップアウト動作が実現します。 このバグ修正は、公開された文献の推奨事項に従いますが、動作上の変更です。 状態のドロップアウト動作は、新しいdropout_state_filter_visitor引数を使用してカスタマイズできます。
  • tf.contrib.training.python_inputを削除しました。 新しいtf.contrib.data.Dataset.from_generatorメソッドを使用すると、より柔軟で再現性の高いパッケージで同じ動作を利用できます。
  • tf.contrib.distributions.Affineを間違ってlog-det-jacobianを修正しました。
  • tf.random_gammaが非バッチ、スカラー描画を誤って処理するのを修正しました。
  • TensorForest TreePredictionsV4Opの競合状態を解決しました。
  • Google Cloud StorageファイルシステムとHadoopファイルシステムのサポートはデフォルトビルドオプションになりました。

APIの変更点


  • tf.contrib.data.rejection_resample() 関数のシグネチャが変更されました。 これで、Dataset.apply() の引数として使用できる関数が返されます。
  • tf.contrib.data.Iterator.from_dataset() メソッドを削除します。 代わりに Dataset.make_initializable_iterator() を使用してください。
  • まれに使用され、不要な tf.contrib.data.Iterator.dispose_op() を削除します。
  • いくつかの TFGAN 損失関数を後方互換性のない方法で並べ替えます。

貢献者への謝辞


このリリースには、Googleの多くの人々からの寄付と次のものが含まれています。

  • 4d55397500, Abdullah Alrasheed, abenmao, Adam Salvail, Aditya Dhulipala, Ag Ramesh,
  • Akimasa Kimura, Alan Du, Alan Yee, Alexander, Amit Kushwaha, Amy, Andrei Costinescu,
  • Andrei Nigmatulin, Andrew Erlichson, Andrew Myers, Andrew Stepanov, Androbin, AngryPowman,
  • Anish Shah, Anton Daitche, Artsiom Chapialiou, asdf2014, Aseem Raj Baranwal, Ash Hall,
  • Bart Kiers, Batchu Venkat Vishal, ben, Ben Barsdell, Bill Piel, Carl Thomé, Catalin Voss,
  • Changming Sun, Chengzhi Chen, Chi Zeng, Chris Antaki, Chris Donahue, Chris Oelmueller,
  • Chris Tava, Clayne Robison, Codrut, Courtial Florian, Dalmo Cirne, Dan J, Darren Garvey,
  • David Kristoffersson, David Norman, David RöThlisberger, DavidNorman, Dhruv, DimanNe,
  • Dorokhov, Duncan Mac-Vicar P, EdwardDixon, EMCP, error.d, FAIJUL, Fan Xia,
  • Francois Xavier, Fred Reiss, Freedom" Koan-Sin Tan, Fritz Obermeyer, Gao, Xiang,
  • Guenther Schmuelling, Guo Yejun (郭叶军), Hans Gaiser, HectorSVC, Hyungsuk Yoon,
  • James Pruegsanusak, Jay Young, Jean Wanka, Jeff Carpenter, Jeremy Rutman, Jeroen BéDorf,
  • Jett Jones, Jimmy Jia, jinghuangintel, jinze1994, JKurland, Joel Hestness, joetoth,
  • John B Nelson, John Impallomeni, John Lawson, Jonas, Jonathan Dekhtiar, joshkyh, Jun Luan,
  • Jun Mei, Kai Sasaki, Karl Lessard, karl@kubx.ca, Kb Sriram, Kenichi Ueno, Kevin Slagle,
  • Kongsea, Lakshay Garg, lhlmgr, Lin Min, liu.guangcong, Loki Der Quaeler, Louie Helm,
  • lucasmoura, Luke Iwanski, Lyndon White, Mahmoud Abuzaina, Marcel Puyat, Mark Aaron Shirley,
  • Michele Colombo, MtDersvan, Namrata-Ibm, Nathan Luehr, Naurril, Nayana Thorat, Nicolas Lopez,
  • Niranjan Hasabnis, Nolan Liu, Nouce, Oliver Hennigh, osdamv, Patrik Erdes,
  • Patryk Chrabaszcz, Pavel Christof, Penghao Cen, postBG, Qingqing Cao, Qingying Chen, qjivy,
  • Raphael, Rasmi, raymondxyang, Renze Yu, resec, Roffel, Ruben Vereecken, Ryohei Kuroki,
  • sandipmgiri, Santiago Castro, Scott Kirkland, Sean Vig, Sebastian Raschka, Sebastian Weiss,
  • Sergey Kolesnikov, Sergii Khomenko, Shahid, Shivam Kotwalia, Stuart Berg, Sumit Gouthaman,
  • superzerg, Sven Mayer, tetris, Ti Zhou, Tiago Freitas Pereira, Tian Jin, Tomoaki Oiki,
  • Vaibhav Sood, vfdev, Vivek Rane, Vladimir Moskva, wangqr, Weber Xie, Will Frey,
  • Yan Facai (颜发才), yanivbl6, Yaroslav Bulatov, Yixing Lao, Yong Tang, youkaichao,
  • Yuan (Terry) Tang, Yue Zhang, Yuxin Wu, Ziming Dong, ZxYuan, 黄璞

問題を提起した人、解決を助けた人、、質問した人、質問に答えてくれた人に感謝しています。

ダウンロード


-----

ざっとながめると、新機能というより Contrib の組み入れが中心なかんじか。

新しいモデルなどはまだついていけてないのでよくわからないし..


ちなみにDocker Hubのほうも既に更新されていて tensorflow/tensorflow のlatestはすでに1.4.0-rc0になっていた。


2017年10月12日木曜日

コカコーラのTensorFlow活用紹介ブログ記事を翻訳してみた


これもタイムラインに流れてきたのだけど、
コカコーラ社でTensorflowを活用した事例が書かれた記事のリンク

How Machine Learning with TensorFlow Enabled Mobile Proof-Of-Purchase at Coca-Cola
https://developers.googleblog.com/2017/09/how-machine-learning-with-tensorflow.html



が私のところにながれついた。


ので翻訳してみた。
..というか、最近はほぼGoogle翻訳のままでイケてるので、ブラウザで翻訳させたほうが良いかもしれないけど..

以下の日本語訳を読む方は at your own risk でお願いします。

----------

いかにして Coca-Cola社が購入証跡を TensorFlow エンベデッドモバイルを使って機械学習させたか

木曜日、9月21日、2017



コカ・コーラ社のパトリック・ブランデ氏は、AIとTensorFlowを使って、摩擦のない購入証明をどのように利用しているのかを説明しています。
2006年にMyCokeRewards.comとして開始されたコカ・コーラのコアロイヤルティプログラム。「MCR.com」プラットフォームには、20オンスボトルで販売されるコカコーラ、スプライト、ファンタ、パワー・ド・プロダクト、および食料品店やその他の小売店で購入可能な段ボール「冷蔵庫パック」用のユニークな製品コードの作成が含まれていました。ユーザーは、MyCokeRewards.comでこれらの製品コードを入力して、プロモーションキャンペーンに参加することができます。



2016年の振り返り:コークスのロイヤルティプログラムは、プロモーションや懸賞のために数百万の製品コードが登録され、依然として非常に人気があります。しかし、モバイルブラウジングは、2006年に存在しなかったものから2016年末までに50%以上のシェアになりました。 (「MCR.com」の代わりに)「 Coke.com 」を立ち上げたのは、ブラウジング行動の変化に対する応答でした。モバイルデバイスに14文字のコードを大文字で入力すると、プログラムの成功に影響を及ぼすのに十分なユーザーエクスペリエンスが得られません。私たちはモバイルユーザーに最高の体験を提供したいと考えています。最近の人工知能の進歩は新しい機会をもたらしました。

摩擦のない証拠の探求



何年もの間、Coke は既製の光学式文字認識(OCR)ライブラリとサービスを使用しても、製品コードをほとんど読み取れませんでした。当社の印刷プロセスでは、通常、低解像度のドットマトリックスフォントを使用し、プリントヘッドの下で実行されるキャップまたは冷蔵庫の媒体を非常に高速で使用します。これはすべて、既製のOCR製品を凌駕する忠実度の低い文字列に変換されます(人間の目でも読みにくいことがあります)。OCRは、モバイルユーザーのコード入力プロセスを単純化する上で非常に重要です。コードの写真を撮って、自動的にプロモーションエントリ用に購入を登録する必要があります。私たちは、製品コードを認識するための専用のOCRシステムが必要でした。


ボトルキャップと冷蔵庫パッケージの例

私たちの研究により、有望なソリューション、Convolutional Neural Networksが実現しました。CNNは、近代的な人工知能製品の中心にある「ディープラーニング」ニューラルネットワークのファミリーの1つです。GoogleはCNNを使用してStreetView画像から住所番を抽出しています。CNNは、手書き数字の認識においても非常によく機能します。これらの数字認識ユースケースは、私たちが解決しようとしていた問題のタイプの完璧な代替となります。小さな文字セットを含むイメージから文字列を抽出し、文字の外観に大きなばらつきがあります。


TensorFlowのCNN


過去には、利用可能な訓練および推論ライブラリの複雑さのために、CNNのようなディープニューラルネットワークの開発が課題でした。2015年11月にGoogleがオープンソースとした機械学習フレームワークであるTensorFlowは、深いニューラルネットワークの開発を簡素化するように設計されています。

TensorFlowは、さまざまな種類のニューロン層と一般的な損失関数に高レベルのインターフェイスを提供します。これにより、異なるCNNモデルアーキテクチャを実装するのが容易になります。さまざまなモデルアーキテクチャを素早く反復する能力は、CokeカスタムOCRソリューションを構築するために必要な時間を劇的に短縮しました。数日間で異なるモデルを開発し、訓練し、テストすることができるからです。TensorFlowモデルも移植可能です。フレームワークは、モバイルデバイス(「エッジ上のAI」)またはクラウド内でリモートでホストされているサーバー上でモデルの実行をネイティブにサポートします。これにより、Webベースやモバイルなど、さまざまなプラットフォーム間でモデルを実行できる「一度作成、どこでも実行(create once, run anywhere)」アプローチが可能になります。


機械学習:訓練が完璧を作る(practice makes perfect)


どのニューラルネットワークも、それを訓練するために使用されたデータと同じくらい重要です。私たちは、パフォーマンス目標を達成するCNNを育成するために、大量の製品コードイメージを必要としていることを知っていました。私たちのトレーニングセットは3つのフェーズで構築されます:

  1. 事前起動シミュレーション画像
  2. 実際の画像をプレランチ
  3. でユーザによってラベル付けされた製品の画像

launch前のトレーニング段階は、プログラムされた数百万のシミュレートされた製品コード画像を生成することから始まりました。これらのシミュレートされた画像には、傾斜、照明、陰影、およびぼやけの変化が含まれていました。シミュレーションの画像のみを使用してモデルを訓練した場合、予測精度(すなわち、上位10の予測内で14文字すべてが正確に予測された頻度)は、実世界の画像に対して50%でした。これは転送学習のベースラインを提供しました。シミュレーションされた画像で最初に訓練されたモデルは、実際の画像に対して訓練されるより正確なモデルの基礎でした。

現在の課題は、実績のある目標を達成するのに十分な現実世界の画像でシミュレートされた画像を豊かにすることに変わっています。私たちは iOS と Android デバイス用の専用のトレーニングアプリを作成し、「トレーナ」がコードの写真を撮りラベルを貼ることができるようにしました。これらのラベル付けされた画像は、訓練のためにクラウドストレージに転送されます。ボトルキャップと冷蔵庫パッケージで数千の製品コードを生産し、アプリを使って最初の実世界のトレーニングセットを作成した複数のサプライヤに配布しました。

強化された豊富なトレーニングセットがあっても、さまざまな環境条件でエンドユーザーによって作成されたイメージを代替することはできません。スキャンでコードの予測が不正確になることがあるため、ユーザーがこれらの予測を迅速に修正できるユーザーエクスペリエンスを提供する必要がありました。この経験を提供するためには、2006年にオリジナルのロイヤルティ・プラットフォーム(予測コードが実際のコードであることを検証するため)の開始以来使用されてきた製品コード検証サービスと、回帰を実行する予測アルゴリズムが14文字の位置のそれぞれで文字当たりの信頼度を決定します。予測されたコードが無効である場合、各文字の最上位予測および信頼レベルがユーザインターフェースに戻されます。


エラー訂正UIにより、ユーザは無効な予測を訂正し、有用な訓練データを生成できる


このユーザインターフェイスの革新により、積極的な学習プロセスが可能になりました。フィードバックループを使用すると、補正された予測をトレーニングパイプラインに戻すことでモデルを徐々に改善することができます。このようにして、ユーザは時間の経過とともに文字認識モデルの精度を有機的に改善することができるのです。



最大限のパフォーマンスを得るための最適化


パフォーマンスに関するユーザーの期待に応えるために、製品コードOCRパイプラインのいくつかの野心的な要件を確立しました。

  • より速く:製品コードイメージがOCRパイプラインに送られた後、平均処理時間が1秒とすることが必要。
  • より正確に:私たちの目標は、積極的な学習により、起動時に95%の文字列認識の精度を達成すること。
  • より小さく:OCRパイプラインは、モバイルアプリケーションに直接配布され、時間の経過とともにモデルが改善されると、無線アップデートを収容するのに十分小さい必要がある。
  • よりおおくの製品コードデバイスをハンドルできるように:フォント・タイプ、ボトル・キャップ、厚紙のフライディ・パック・メディアなど、数多くの異なる組み合わせの製品コード・メディアを扱う必要がある。

最初に、すべての製品コードメディアに単一のCNNを使用したアーキテクチャを検討しました。このアプローチでは、モバイルアプリに配布するには大きすぎるモデルが作成され、実行時間が必要以上に長くなっていました。  Quantiphi Inc. の我々の適用されたAIパートナは、 異なるモデルアーキテクチャで反復を開始し、最終的に複数のCNNを使用したものに到達しました。



この新しいアーキテクチャは、精度を犠牲にすることなくモデルサイズを劇的に縮小しましたが、モバイルアプリケーションへの無線アップデートをサポートするために必要なものの最高水準でした。次に、接続されたニューロン間の重みの忠実度を減らすことによってモデルのサイズを縮小するために、TensorFlowの事前構築された量子化モジュールを使用しました。量子化は、モデルサイズを4倍に縮小しましたが、Quantiphiが SqueezeNet という新しいアプローチを使用して画期的な進歩を遂げたときに、モデルサイズが大幅に縮小されました。

SqueezeNet モデルは、2016年の11月にUC Berkeleyとスタンフォードの研究者チームによって発表されました。このモデルは、 Imageet などの一般的なベンチマークに対して、より大きなモデルと同等の精度レベルを達成するために、小さく複雑です。 SqueezeNet CNN を使用するために文字認識モデルを再構築した後、 Quantiphi は特定のメディアタイプのモデルサイズを100倍に減らすことができました。 SqueezeNet モデルは本質的に小さく、豊富な特徴量検出アーキテクチャを構築できました。 SqueezeNet なしで訓練された最初のバッチモデルと比較して、はるかに小さなサイズではるかに高い精度を実現しました。現在、リモートデバイスで簡単に更新できる高精度なモデルが用意されています。能動的学習前の最終モデルの認識成功率は96%に近く、これは99.7%の文字認識精度(1000文字の予測ごとにわずか3回のミス)に相当します。


さまざまなタイプのオクルージョン(隠れ領域)、翻訳、およびカメラフォーカスの問題を伴う有効な製品コード認識の例


AIとの境界を越えて


人工知能の進歩と TensorFlow の成熟により、私たちは長期にわたって求められていた購入証明機能を最終的に達成することができました。2017年2月下旬より発売されて以来、当社の製品コード認識プラットフォームは、十数以上のプロモーションを促進し、18万件以上のスキャンコードをもたらしました。現在、コカ・コーラ北米のウェブベースのプロモーションのすべてのコアコンポーネントとなっています。

AI対応の製品コード認識プラットフォームへの移行は、2つの重要な理由から価値があります。

  • モバイルファーストマーケティングプラットフォームへの全般的な移行に対応して、摩擦のない購入証明がタイムリーに使用可能になりました。
  • Coke は、既存の既製のOCRソフトウェアで動作するより忠実なフォントをサポートするために、生産ラインのプリンタを更新する必要性を避けることによって、何百万ドルも節約できました。

当社の製品コード認識プラットフォームは、コカコーラ内でスケールアップされた新しいAI対応機能の最初の実行です。現在、新製品開発から電子商取引小売の最適化まで、複数の事業部門にわたってAIアプリケーションを検討しています。

----------

上記記事を読む際の、参考リンクとしては、以下のあたり。


TensorFlowサイトを探っていた頃は "量子化" のあたりなんで突然現実的な話がでてきたんだろうか、と不思議に思っていたがおそらく米国でコカ・コーラ社との事案が実際に動いていたのだと思う。技術的にではなく、論理的に繋がった。


で、なんでこの記事を紹介したのかというと...

前の記事で紹介したkeras.js のサンプルにたしか SqueezeNet のやつあったよなあ..
じゃあそれをつなげれば、TensorFlow Mobileを使わないでAndroidのWebPanelだけで
似たようなアプリできるんじゃないのかなあ..と。


Keras.js の README.md を翻訳してみた

タイムラインに keras.js なる単語がでてきた。

..Kerasに JavaScript ライブラリがあるのか..とおもい検索すると

GitHub に以下のページが見つかった。

[GitHub] Keras.js
https://github.com/transcranial/keras-js


ということでトップページの README.md を翻訳してみた。
以下、勝手翻訳なので、参照の際は at your own risk でお願いします。

-----

Keras.js


ブラウザでGPUをサポートしているル(Tensorflowバックエンドを使って訓練済みの)Kerasモデを実行します。モデルは、対応するHDF5ファイルから直接シリアル化されたウェイトを使用して、Keras JSON形式設定ファイルから直接作成されます。nodeでも動作しますが、CPUモードでのみ動作します。

現在、このライブラリの焦点は順方向推論のみです。

テンソル操作は、ndarrayライブラリの上で拡張されます。GPUのサポートは、WebGLを介してWebGLによってサポートされています。

ライブラリバージョンの互換性:


  • Keras 2.0.4
  • TensorFlow 1.1.0


インタラクティブなデモ

  • MNISTで訓練された基礎的な埋め込みネット
  • MNISTで訓練された畳み込み変分オートエンコーダ
  • MNIST上の補助分類子生成的敵対ネットワーク(AC-GAN)
  • ImageNetで訓練された50層の残存ネットワーク
  • ImageNetで訓練された Inception v3 モデル
  • ImageNetで訓練された SqueezeNet v1.1
  • IMDBセンチメント分類の双方向LSTM

使い方


demos/src/ にある vue.js で書かれた実際のサンプルのソースコードを参照してください。


1. Model、Sequential クラスベースでともに動作します:
model = Sequential()
model.add(...)
 ...

...
model = Model(input=..., output=...)

 訓練を終えたら、ウェイトを保存し、モデルアーキテクチャの設定をエクスポートします。

model.save_weights('model.hdf5')
with open('model.json', 'w') as f:
    f.write(model.to_json())
詳細については、デモの Jupyter note (demos/notebooks/)を参照してください 。たとえば、ResNet50に必要なものは次のとおりです:

from keras.applications import resnet50
model = resnet50.ResNet50(include_top=True, weights='imagenet')
model.save_weights('resnet50.hdf5')
with open('resnet50.json', 'w') as f:
    f.write(model.to_json())

2. エンコーダスクリプトをHDF5 ウェイトファイルで実行します。

$ python encoder.py /path/to/model.hdf5

 HDF5 ウェイトファイルと同じフォルダに2つのファイル model_weights.buf model_metadata.json が作成されます。


3. Keras.jsに必要な3つのファイルは次のとおりです。

  • モデルファイル: model.json
  • ウェイトファイル: model_weights.buf 
  • ウェイトメタデータファイル: model_metadata.json

4. keras,js をインクルードします。



 もしくは node(バージョン4以降が必須):

$ npm install keras-js --save
# もしくは
$ yarn add keras-js

// 名前空間
const KerasJS = require('keras-js')
// nodeの場合は
import * as KerasJS from 'keras-js'

// 名前空間なし
const Model = require('keras-js').Model
// nodeの場合は
import { Model } from 'keras-js'

5. 新規モデルを作成します。

 インスタンス化では、XHR(同じドメインまたはCORSが必要)を使用してデータがロードされ、レイヤーは有向非循環グラフとして初期化されます。



// ブラウザ内では相対/絶対URLを指定できます
const model = new KerasJS.Model({
  filepaths: {
    model: 'url/path/to/model.json',
    weights: 'url/path/to/model_weights.buf',
    metadata: 'url/path/to/model_metadata.json'
  },
  gpu: true
})

// nodeでは gpu フラグはoffに
// パスはファイルシステムパスもしくは絶対URLを指定
// ファイルシステムパスの場合以下のように指定します
const model = new KerasJS.Model({
  filepaths: {
    model: 'path/to/model.json',
    weights: 'path/to/model_weights.buf',
    metadata: 'path/to/model_metadata.json'
  },
  filesystem: true
})


 クラスメソッドready()は、これらのステップが完了したときに解決するPromiseを返します。次に、predict()モデルを通じてデータを実行し、Promiseを返します。

model.ready()
  .then(() => {
    // 入力レイヤの名前でキー入力された入力データオブジェクト、
    // またはシーケンシャルモデルの場合は `input` です。
    // 値は平坦化された Float32Array データです
    // (入力テンソルの形状はモデルの設定で指定されています)
    const inputData = {
      'input_1': new Float32Array(data)
    }

    // 推論します
    return model.predict(inputData)
  })
  .then(outputData => {
    // outputData は出力レイヤーの名前をキーとするオブジェクトであり、
    // Sequential モデルの場合は `output` です
    // e.g.,
    // outputData['fc1000']
  })
  .catch(err => {
    // ハンドルエラー
  })


 あるいは、async/await を使用することもできます。

try {
  await model.ready()
  const inputData = {
    'input_1': new Float32Array(data)
  }
  const outputData = await model.predict(inputData)
} catch (err) {
  // ハンドルエラー
}


使用可能なLayer

  • core: Dense, Activation, Dropout, SpatialDropout1D, SpatialDropout2D, SpatialDropout3D, Flatten, Reshape, Permute, RepeatVector 
  • convolutional: Conv1D, Conv2D, SeparableConv2D, Conv2DTranspose, Conv3D, Cropping1D, Cropping2D, Cropping3D, UpSampling1D, UpSampling2D, UpSampling3D, ZeroPadding1D, ZeroPadding2D, ZeroPadding3D
  • pooling: MaxPooling1D, MaxPooling2D, MaxPooling3D, AveragePooling1D, AveragePooling2D, AveragePooling3D, GlobalMaxPooling1D, GlobalMaxPooling2D, GlobalMaxPooling3D, GlobalAveragePooling1D, GlobalAveragePooling2D, GlobalAveragePooling3D
  • recurrent: SimpleRNN, LSTM, GRU
  • embeddings: Embedding
  • merge: Add, Multiply, Average, Maximum, Concatenate, Dot
  • advanced activations: LeakyReLU, PReLU, ELU, ThresholdedReLU
  • normalization: BatchNormalization
  • noise: GaussianNoise, GaussianDropout
  • wrappers: Bidirectional, TimeDistributed
  • legacy: Merge, MaxoutDense, Highway

実装レイヤ

  • core: Lambda
  • local: LocallyConnected1D, LocallyConnected2D

注意


WebWorkersとその限界

Keras.js は、メインスレッドとは別の WebWorker で実行できます。Keras.js は多くの同期計算を実行するため、UI が推論処理の影響を受けるのを防ぐことができます。しかし、WebWorkers の最大の制限の1つは、 (の元であるWebGL) アクセスできない点です。したがって、別のスレッドで Keras.js を実行することによって得られる利点は、CPUモードでのみ実行が必要なことと相殺されます。言い換えれば、GPUモードで Keras.js をメインスレッド上でのみ実行することができます。これは永遠に続くことはありません



WebGL MAX_TEXTURE_SIZE

GPU モードでは、テンソルオブジェクトは計算に先立って WebGL テクスチャとしてエンコードされます。これらのテンソルのサイズ gl.getParameter(gl.MAX_TEXTURE_SIZE) は、ハードウェア/プラットフォームで異なります。典型的な期待値については、ここを参照してください。この値が任意の次元を超えてテンソルを含む操作の場合、その操作は CPU に戻されます。


特定のプラットフォーム(特に macOS、おそらく他のプラットフォーム)の Firefox は、依然としてテクスチャサイズの制限がハードコードされています。最新の GPU であっても、この制限は低すぎる可能性があります。これは既知の問題です。この場合、 Keras.js が CPU を使用するように正常にダウングレードされますが、計算パフォーマンスが低下します。これを回避する1つの方法は、ブラウザに移動し about:config にて gfx.work-around-driver-bugs false に変更してブラウザを再起動することです。これにより、最大テクスチャサイズが通常に戻されます。


開発/テスト

実装されたlayerごとに広範なテストが行われています。  これらすべてのテストのデータを生成する Jupyter notebooks (notebooks/) を参照してください。


$ npm install
 # または
$ yarn

すべてのテストを実行するには npm run server して http://localhost:3000/test/ を開くだけです。すべてのテストが自動的に実行されます。追加のテストデータ情報については、ブラウザの開発ツールを開きます。

開発者は次を実行してください:


$ npm run watch

src/ のファイルを編集すると webpack の dist/keras.js が更新されます。

プロダクション UMD webpack ビルドを作成するには、次のように dist/keras.js を出力します:


$ npm run build:browser

デモ用のデータファイルは demos/data/ にあります。大きなサイズのため、このフォルダは git によって無視されます。 keras-js-demos-data リポジトリをクローンし、内容を demos/data/ へコピーします。


ライセンス


MIT

---------

ブラウザの動くPCをのGPUが使えるんだ..
でも node で動かす場合はCPUのみか..

WebWorkerのマルチスレッド..そろそろJavaScript自体の実行エンジンについても本気で勉強してないかないと、ついていけなくなるよな..

Webでぐいんぐいん動くゲームアプリも出だしたからなあ、このあたりの技術がガンガン上がってるんだよなあ..

アプリケーションサーバでなくブラウザのエンジンへ開発の主流がうつっていったんだけど、Webアプリ屋がフレームワークの上で踊っている間に、じだいがかわっちゃったかな..

なんでか知らないけど、Java屋ってJavaScriptをパチもんだと勘違いして小馬鹿にしていたから、そのツケを今払わされている感じがする..

モデルファイルのエンコードツールっていうのは、圧縮とかも考えてのことなのかな..

HDF5のファイルってTensorFlow側で作れたんだっけ..
もしだめならKeras実装モデルでないと動かないのかもしれないなあ..


deeplearning.js もあるし、そろそろ考えないとなあ..









2017年9月27日水曜日

FloydHub で Jupyter をあげてtornadoでWebアプリを起動しようとしたらできなかった件


先の記事の経緯ではじめたFloydHub

FloydHub はとっても簡単だ。

  • FloydHub サイトで、アカウントを作成
  • FloydHub サイトで、新規プロジェクト構築
  • ローカルPCのPython環境で、以下のコマンドを実行
pip install floyd-cli
cd hogehoge
floyd login
  • ローカルPC上でブラウザがあがり、トークンが表示されるのでコピー
  • ローカルPCのPython環境で、トークンをペーストしてEnter
  • ローカルPCのPython環境で、以下のコマンドを実行
floyd init プロジェクト名
  • ローカルPCのPython環境で、以下のコマンドを実行
floyd run --mode jupyter --env tensorflow-1.3
  • ローカルPC上でブラウザがあがり、Jupyter notebookが起動
ローカルPC環境のPythonが自分のPC以外のDocker環境上からfloydした場合でも、コンソールにURLが表示されるので、コピペしてアクセスすれば使える。


最後の floyd run コマンドに --gpu をつければGPU環境が使える(Freeは2時間まで)。

DataSetsというやつでよく使うコーパスを保存しておいて、最後の floyd run コマンドに --data アカウント名/datasets/データセット名/数字:/store をつけると、/store にマウントされる仕組みだ。floyd run 実行時、カレントディレクトリ内のファイルをアップロードするのだけど、毎回大量データをアップするのは時間の無駄だ。そういうときに--dataを使えばいい。

jupyter notebook 環境でさすがにTerminalは使えないだろうと思っていたら、きっちり使えるようになっていた..

で、調子に乗って tornado ベースのWebアプリを立ち上げてみようとしたけど..

上がるには上がったけど..URLは..どこ?!

いろいろやってみたがダメだった..
floyd logs プロジェクト名 でログが見えるが、先頭のほうでDockerコンテナらしき記述があった。

--portを指定していないはずなので使えんわなあ..


どうも--mode server にすれば、Flaskのみポート5000番限定で使えるようになるらしい..

..ようは推測アプリをFlask のREST APIで組むなら、使ってもいいよということらしい。
起動をapp.pyにしてポートを5000で固定実装すれば..とおもったが、pipできない..

通常のコマンドなら floyd_requirements.txtパッケージ名を箇条書すれば良いんだけど..
ぐぬぬ..









とはいえ、機械学習限定のPaaSかあ...

もうちょっと、つかってみよ..




p.s.

重要なことをわすれていた。

FloydHub で Jupyter notebookとして使った場合、ブラウザを閉じるだけではなく、かならずプロジェクトをストップしておくこと。FloydHubの管理コンソールでもいいし、コマンドラインなら floyd stop アカウント名/projects/プロジェクト名/番号 を実行すること。

そうしてないとFreeでもらった時間をゴリゴリ削ってしまう。
しかも課金していようものなら..月単位らしいからそれほどシビアに管理しなくてもいいのかもしれないけど、ついうっかり動かしたまんまで、長期出張やら休暇なんかににでちゃったら..

裏でカキンカキンされちゃう..


p.s.2

今朝ジョブがTimeoutで落ちていた。
ログを見ても最後までやっている状態ではないらしい.....

でドキュメントを検索してきたら、
すぐにこんなのが見つかった。

Why did my job timeout after 1 hour?
 
You are likely in the Free Trial Plan. Jobs run in the trial plan have a maximum runtime of 1 hour. It will automatically timeout after that.
You can upgrade to the Paid Plan to overcome these limits.

なぜ私のジョブは1時間後にタイムアウトしたのですか?
あなたは無料トライアルプランの可能性が高いです。 トライアルプランで実行されるジョブの実行時間は最大1時間です。 その後、自動的にタイムアウトになります。
これらの制限を克服するために有料プランにアップグレードすることができます。
..そんな、甘い話、ないかあ..
1時間でぶち切られるなら、なかなか難しいぞ..

2017年9月26日火曜日

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

タイムラインにふらっと入ってきた記事で FloydHubというものを知った。
FloydHub
https://www.floydhub.com/

Heroku風の機械学習環境のPaaSとのこと。

..そもそもHeroku知らないんですけど..というかPythonを使いだしたのも今年からだし..


どうも100時間無料らしいし、
AWSのように事前カード情報登録も要求されないらしい
(今のところ..かもしれないが..)ので
ためしに使ってみることにした。


サンプルコードは

lstm_text_generation.py :ニーチェの著作からテキスト生成
https://github.com/fchollet/keras/blob/master/examples/lstm_text_generation.py

のニーチェデータをダウンロードするところを

青空文庫
http://www.aozora.gr.jp/

の著作権が問題なさそうな日本語テキストを使った。

ここのサイトは数少ない日本語データサイトで、
太宰治の人間失格や宮沢賢治の風の又三郎、
夏目漱石の坊っちゃんなどがコーパスとして使えたりする。


ルビ付きテキストデータは、
先頭とお尻にメタ情報があるのでこれを外す必要がある。
あと《.. 》でルビを降っている部分と
[#..]で入力注がある部分は正規表現でカットして
Shift_JISをUTF-8にして、改行をLFのみにする。

このファイルを読み込んで動くように lstm_text_generation.py
修正しておく。

データ含め全部同じディレクトリへ置いておく。


JupyterコンソールのTerminal から

pip3 install floyd-cli

を実行してfloydコマンドを使えるようにする。


最初に実行する

floyd login

を実行するとローカルのブラウザ上げるぞみたいなメッセージが出てあせった。
キー情報をブラウザ上二表示するからコピペせよといってくるのだ。

Dockerコンテナで動かしているJupyter notebookなので
ブラウザ以前にXなんかも当然入っていない..

が、FloydHubサイトへログインして Setting>CLI Auth Tokenへいくと
取得できるようになっているので大丈夫だった..

次にサイト上でProjects>NewProjectで
適当なプロジェクト名入れて新規プロジェクトを立ち上げる。



再度Terminalで先程用意したデータとPythonファイルのある
ディレクトリへもどり

floyd init <プロジェクト名>

を実行して


floyd run --env tensorflow-1.3 "python <修正したPythonファイル名>"


を実行する。



しばらくアップロードしてそうな情報が出て動き出すが
プロンプトは帰ってくる。

floyd logs <プロジェクト名>

でコンソールを参照できるのだけど
一部だけしか見れないのでサイトの該当プロジェクトのConsoleへいくと
以下のように見ることができる。




40文字をインプットにして次の1文字を予測するLSTMモデル(128セル)なのだけど..
今のところ、完全な日本語になって無いところのほうが多い..

あ、ローカル環境で動かしていたのでiterationを40にしちゃっていたよ..

なんか重くなりそうだったからコールバック関数は一切仕込んでなかったけど
PaaSなら誰にも迷惑かからないから仕掛けていても良かったか..



無料環境はCPUのみなので floyd run --gpu を付けるとエラーになる

..コンソールの更新がひどく遅い...

GPU(有償ユーザ)になったらもっとヌルヌル流れていくのだろうか..



..そういや、生成している文章の著作権って..誰のになるんだろう..

..太宰?、サンプルコード作者?修正した私も少し権利ある?...







..2時間位まわしていたら、Consoleに

Your logs have exceeded our length guidelines for Running jobs.
Please refresh the page or download logs to view your current job's logs.


ログが実行ジョブの長さガイドラインを超えました。
現在のジョブのログを表示するには、ページを更新するか、ログをダウンロードしてください。

と出てログが更新されなくなった。
ブラウザの更新ボタンを押したが、上記メッセージが最後に出てその後一切出てこなくなった..
Console右上にあるダウンロードボタンを押せば見えるけど..
....毎回ファイルにダウンロードしないとダメなの?


生成したテキストをファイル化するように加工しとけばよかったか..


2017年9月7日木曜日

NVIDIA Tesla K20C で Tensor2Tensor を動かしてみた

ふとしたことで一時的にNVIDIA Tesla K20Cが使える機会ができた。

(TeslaはVoltaが出だした今からだと5世代前(2008年ころ)のアクセラレータです)

ので、ココぞとばかりに前に動かしたTransformerモデルの
実装サンプル Tensor2Tensor をオプションなしで動かしてみた。



ただワークフローは英独翻訳になっていて
日本語がない...

T2Tの実装サンプルを拡張しない限り
日本語コーパスがないので
ワークフロー通り日独翻訳をやるしかない..

そこで、
原文の英語と翻訳後のドイツ語をGoogle翻訳にかけて
日本語にして比較してみた。

上段:原文をOSSで翻訳したものをGoogle翻訳で日本語に
下段:原文をそのままGoogle翻訳で日本語に

------
もしもし
こんにちは世界

さよなら世界
さようなら世界

私は私が何になるのか分からない。
私は私が使用するものではありません。


注:「私は昔の私ではありません。」が正解

夏には父は私たちをビーチに連れて行きます。
夏には父は私たちをビーチに連れて行きます。

みなさんこんにちは。
皆さんこんにちは 。

私の名前はMaile Johnsonです。
私の名前はMaile Johnsonです。

私はトルクメニスタンの大学の講師です。
私はハワイの高校生です。

去年の夏、私は17歳の日本人学生、Sayuriに会いました。
去年の夏、私は17歳の日本人学生、Sayuriに会いました。

彼女の夏休み中、彼女は市を訪れ、市を訪問し、彼女を英語で訪問する
彼女は夏休み中にハワイを訪れ、英語を勉強しました。

彼女は地元の学生として2週間家にいました。
彼女はホームステイの学生として2週間滞在しました。

私たちはとても良い友達になった。
私たちはとても良い友達になった。

ある日、彼女は私に言った。「あなたの父親はしばしばアロハシャツを着ています。私は彼らが好きです。彼らはとてもハワイ人です。
ある日、彼女は私に言った、 "あなたの父親はしばしば仕事にアロハシャツを着ます。(以下、翻訳を無視)
注:Google翻訳はたまにセンテンスを無視することがあります。上記上段のハワイアン~のくだりが下段にないのはそのためです。

私は答えた日本の着物に興味があります。
「日本の着物に興味があります」と私は答えました。

最初のアロハシャツはアジアの人々が作ったものです。
実際、ハワイの最初のアロハシャツはアジアの人々によって作られたものです。

彼らは日本の着物から来ます
彼らは日本の着物から作られました。

私はこの話をSayuriに語った。
私はこの話をSayuriに語った。

彼女は好奇心をそそられた。
彼女は好奇心をそそられた。

「日本からトルクメニスタンへの着物はどうでしたか?(以下、無視)
「日本からハワイに着物はどのように届いたのですか?」と彼女は尋ねた。

注:これもGoogle翻訳の無視

今日、ハワイの文化の例として世界中で知られているアロハシャツです。
今日、ハワイの文化の例として世界中で知られているアロハシャツです。

あなたはそれらを多くの場所で見ることができます。
あなたはそれらを多くの場所で見ることができます。

文化は混在し、世界はますます小さくなっています。
文化は混じり合い、世界はより小さくなっています。

それはとても良いことではありませんか?
それは素晴らしいことではありませんか?


------

  • T2T_v1.2.0:Apache2 License
  • TensorFlow_1.3.0:Apache2 License
  • Python_3.5.2:Python Software License
  • Copus:WMT Dataset 14
  • GPU(NVIDIA K20C)でまる2日間学習


..一昔前の翻訳サイトに少し劣るくらいのレベル..かな?

独自のコーパスを追加してもうちょっと学習させれば
もうすこしは良い性能を出せるかもしれないけど..

Google翻訳も、
語句や場合により1文
まるまるをガッツリなかったかのように
無視を決める事があるので厄介だ...



こうなると、英日コーパスが欲しくなるところなのだけど..


p.s.

ちなみにUbuntu上での環境構築は
GeForceより簡単だった。

5世代前のくせにPascalのGeForce1050Tiとは全然速度が違う。
結局GPU側のメモリ量なのかもしれないなあ..

2017年8月28日月曜日

TensorFlow1.3.0 になってからTensorBoardがデフォルトでインストールされなくなった



もうタイトルで言いたいことを書いてしまったのだけど..

rcのないTensorFlow1.3.0をDockerイメージで立ち上げたのだけど
デフォルトでTensorBoardが入らなくなってしまった..

pip3 install tensorflow-tensorboard を実行すればインストールされる。


あとでRelease Noteみたら

先頭にちょこっとTensorBoardはココを見ろとか書かれていて
リンクを踏むと、いつのまにかTensorBoardだけ別プロジェクトになってて
ReleaseNoteが個別になっていた..


TensorBoardは別のpipパッケージtensorflow-tensorboard[1]としてリリースされました。 TensorFlowはこのパッケージに依存しているため、ユーザの操作は必要ありません。 TensorBoard 0.1.xシリーズはTensorFlow 1.3.xに対応しています。


..しっかり英語のドキュメントを読みなさいってことね..


..にしても、TesnorFlowのBrainチームって、日本人には冷たいねえ..


 以下、TensorBoard0.1.4ののこりのReleaseNoteドキュメントを勝手翻訳したものです。
翻訳内容at your own riskで参照してください。
--------

機能


  • TensorBoardには完全な機能を備えたプラグインシステムが追加されました。 既存のファーストパーティのダッシュボードはこのAPIを使用するように変換されているため、任意のサードパーティのプラグインよりも特権がありません。 詳細は https://github.com/tensorflow/tensorboard-plugin-example をご覧ください。
  • ビジュアライゼーションのページが変更され、大規模なデータセットによるCPUのロックが防止されます。
  • 私たちは現在、色盲ユーザにとってより使いやすくなっています。 彼の助けを借りて Paul Tol に感謝します。 #288を参照のこと
  • グラフエクスプローラで、TensorFlow関数(function.Defun)を表すノードを展開できるようになりました。
  • グラフエクスプローラでは、モデルがテンソル処理単位で実行できるかどうかを明確にするTPU互換性によってノードを色付けできます。
  • メインメニューにはアクティブなダッシュボードしか表示されないため、混乱が少なくなり、特に小さな画面で役立ちます。 



バグ修正と改善


  • TensorBoardは、より少ないHTTP要求で、ネットワーク経由でより高速にロードされるようになりました。
  • スムージングが無効になっている場合、スカラーチャートのツールチップに誤解を招くような値が表示されることはなくなりました。
  • 画像ダッシュボードには、実際のサイズで画像を表示するためのダッシュボード全体の切り替えが用意されました。
  • グラフエクスプローラからグラフをダウンロードすると、小さな画像が表示されなくなりました。
  • ログ出力がより良くなりました。


 既知の問題点


  • 関数 tensorboard.util.encode_wav とモジュール tensorboard.plugins.audio.summary は最新のNightlyバージョンのTensorFlowに依存し、TensorFlowバージョン1.3.0では動作しません。

[1] 将来的にPyPi上でtensorboardという名前に変更されます。 いまのところはtensorflow-tenmsorboardでインストールしてください。

2017年8月22日火曜日

DockerコンテナでTensorFlow環境上げる場合、ホスト側はNVIDIAドライバだけで良いことに気づく

TensorFlowが1.3.0正式版になっとる..
しかもCUDA Toolkitのバージョンが5.1では動かないらしい..

環境をつくりなおさんと..
と思っていたらちょうど
他部署で使用していない Telsa K20c搭載マシンが余ったので
使わせてもらうことになった。

Ubuntu Server 16.04 LTS を最小構成+OpenSSH Serverでインストールして
以下のNVIDIAサイトでドライバをダウンロードする。

NDIVIAドライバダウンロードサイト:
http://www.nvidia.co.jp/Download/index.aspx?lang=jp

製品のタイプ:Telsa
製品シリーズ:P-Series
製品ファミリ:Telsa P100
OS:Linux 64-bit Ubuntu 16.04
CUDA Toolkit: 8.0
言語: Japanese


で検索、上記K20cではないが製品サポートリストに "Telsa K20c" があることを確認。

deb ファイルが落とせるようになるのでこれを落とす。
そして追加情報タブに書かれた手順でドライバをインストールする。


このあとcuDNN..と思ったのだけど、NVIDIAのサイトで以下のページを見つけた。


GPU を搭載した Docker コンテナ
http://www.nvidia.co.jp/object/docker-container-jp.html

どうも
https://github.com/NVIDIA/nvidia-docker
README.mdを日本語訳したものらしい..

で、絵をあらためて眺めてみると..

nvidia-docker環境だったら、
ホスト側 CUDA Dirverまででいい

ことに今頃気づく!


TensorFlowのバージョンでcuDNNのバージョン指定があったりするけど
Dockerコンテナで動作させている限りcuDNNは無視して良いわけだ..


..やっぱり、Dockerコンテナだな、TensorFlow動かすのは..


2017年8月8日火曜日

TensorFlow Serving 1.0 リリースのブログ記事を翻訳してみた


今朝、Twitterをみると、こんな記事がながれてきた。


ので、ちょっと翻訳してみることにした。
参照の場合はat your own risk でお願いします。

r0.12のころに読んだServingは、
訓練サーバと予測サーバ(プロダクト側)をgRPCでつなぐ実装例みたいに
とらえていたのだけど、1.0ってことはそのあたりの仕組みもTesnorFlowで
もってくれるってことなのかもしれない。

とりあえず、読んで見る。
----

TensorFlow Serving 1.0


Kiril Gorovoy, ソフトウェアエンジニア

TensorFlow Servingは、プロダクト環境向けに設計された機械学習モデル用の高性能サービングシステムで、2016年2月の最初のオープンソースリリース以来、我々は長い道のりを歩んできました。今日、TensorFlow Serving 1.0のリリースをお知らせいたします。 バージョン1.0は、TensorFlow 最新版以降のバージョンで構築されています。

システムの概要については、Google I / O 2017のNoah Fiedelの講演をご覧ください。



プロジェクトを最初にセットアップしたとき、モデルのライフサイクルを管理し、推論要求を処理するためのコア機能を提供する一連のライブラリでした。 その後、Predict APIを使用したgRPC Model Serverバイナリと、Kubernetesに展開する方法の例を紹介しました。 それ以来、さまざまなユースケースに合わせて機能を拡張し、ユーザーのニーズを満たすためにAPIを安定させるように努めました。 現在、Googleでは、TensorFlowサービングをプロダクションで使用する800以上のプロジェクトがあります。 安定した、堅牢で高性能な実装でサーバーとAPIをテストしました。

apt-get installを使って、事前ビルドされたバイナリを入手することができました。 さて、TensorFlowを使い始めるには、コンパイルに時間を費やすことなく、簡単にインストールして実行できます。 いつものように、Dockerを使って、Linux以外のシステムにLinuxサーバーをインストールすることができます。

このリリースでは、TensorFlow Servingも従来のSessionBundleモデルフォーマットのサポートを正式にdeprecateし、中止しています。 SavedModelでは、TensorFlow 1.0の一部としてのTensorFlowのモデル形式が正式にサポートされた形式になりました。

開始するには、プロジェクトとチュートリアルのドキュメントを参照してください。 TensorFlow 1.0をお楽しみください!


-----
aptだけでなくDockerfileも公開したよ、ということでのぞいてみたけど..

SavedModel云々のくだりから推測するに、どうもr0.12のころからは実装が変わっている様子だが..

ためしてみるか..

なお、上のDockerリンクはCPUのみ版で、GPU版もちゃんとあるようだ。




2017年7月21日金曜日

TensorFlow 1.3.0 rc0 がリリースされたことを知る

今朝、Twitterのタイムラインに

があがっていたので、リリースノートを勝手翻訳してみた。
以下参考にする方は at your own risk で参照のこと。

-----
TensorFlow 1.3.0-rc0


Release.1.3.0


主な機能と改善点



  • Tensorflowライブラリにcanned estimatorを追加。追加されたestimatorsのリスト:DNNClassifier、DNNRegressor、LinearClassifer、LinearRegressor、DNNLinearCombinedClassifier、DNNLinearCombinedRegressor
  • すべての組み込みバイナリをcuDNN 6でビルド。
  • GCSファイルシステムにファイルキャッシュを追加し、ファイル内容の設定を最大限に変更可能に。これにより、ファイルの内容をクローズ/オープン境界でキャッシュ可能に。
  • tf.gatherに軸パラメータを追加。
  • tf.padにconstant_valuesキーワードを追加。
  • データセットのインタリーブ変換を追加。
  • ConcatenateDatasetを追加して、2つのデータセットを連結。
  • Poetsトレーニングスクリプト用のTensorFlowにMobilenetサポートを追加。
  • 設定可能なブロックサイズとカウントでブロックキャッシュをGCSファイルシステムに追加。
  • SinhArcSinh bijectorが追加。
  • Dataset.list_files APIを追加。
  • Cloud TPUの新しい操作とPythonバインディングを紹介。
  • tensorflow-androidとの対称性のためのTensorFlow-iOS CocoaPodの追加
  • ClusterResolversの基本的な実装を紹介。
  • TensorShapeとPartialTensorShapeのメモリ表現を統一。その結果、テンソルの最大寸法は255でなく254に。
  • バージョン1.8.1を使用するようにLIBXSMMへの参照を変更。
  • TensorFlow Debugger(tfdbg):数値テンソル値のサマリーを-sフラグで表示して、print_tensorまたはptをコマンド。
  • 統計配布ライブラリtf.distributionsの初期リリース。
  • unary tf.whereとtf.nn.top_kのGPUカーネルと速度の改善。
  • 単調 Attentionラッパ が tf.contrib.seq2seq に追加。


APIの変更点



  • tf.RewriterConfigは1.2のリリース候補で利用可能になった後、Python APIから削除(これは実際のリリースではない)。 グラフの書き換えは、tf.RewriterConfigとしてではなく、利用可能。 代わりに、明示的なインポートを追加。
  • ネストされた構造を必要とする tf.contrib.data.Dataset APIへの変更を打ち切り。 リストは暗黙的に tf.Tensor に変換される。 既存のコードでリストの使用をタプルに変更する必要があるかもしれない。 さらに、 dicts はネストされた構造としてサポート。


contrib APIへの変更



  • ランク損失を改善可能な sampled-softmax variantを含む tf.contrib.nn.rank_sampled_softmax_lossを追加。
  • tf.contrib.metrics.{streaming_covariance, streaming_pearson_correlation} は、1単位の質量以下を見たときに nan を返すように変更。
  • contrib に時系列モデルを追加。 詳細は contrib/timeseries/ README.md を参照のこと。
  • tensorflow/contrib/lite/schema.fbs に完全一致を追加。


バグ修正とその他の変更


  • Pythonでint64 Tensorインデックスを使用してスライスすると、 'strides' と 'begin' dtype の不一致を修正。
  • 改良された畳み込みパディングのドキュメント。
  • タグ定数 gpu をGPUサポート付きのグラフに追加。
  • saved_model.utils は SparseTensors を透過的にサポートするように。
  • 非最大抑制のより効率的な実装。
  • 既にサポートしているオンライン L2 に加えて、 FtrlOptimizer に縮小タイプの L2 のサポートを追加。
  • モーメント計算における負の分散を修正。
  • UniqueOp ベンチマークテストを展開し、より多くの衝突のケースをカバー。
  • Mac上のGCSファイルシステムの安定性を向上。
  • HloCostAnalysis に時間推定を追加。
  • Estimator のコンストラクタの params がユーザー提供のパラメータの deepcopy ではないというバグを修正。このバグにより、誤って Estimator を作成した後にパラメータを変更して、未定義の動作が発生する可能性があった。
  • saver.restoreのsave_path のチェックを追加。
  • device_mgr のレガシ名でデバイスを登録すると、クラスタスペックで伝播された設定への移行が容易に。
  • VectorExponential がディストリビューションに追加。
  • bitwise_and 、 bitwise_or 、 bitwise_xor 、および invert 関数を含むビット単位のモジュールを追加。
  • 固定グリッドODE統合ルーチンを追加。
  • ScipyOptimizerInterface に境界を渡すことを許可。
  • fft_length パラメータの tf.spectral.rfft&tf.spectral.irfft を修正。
  • 'predict' メソッドを使用してエクスポートされたモデルシグネチャでは、入力キーと出力キーが無視され、  'inputs' と 'outputs' に書き換えられなくなった。モデルが1.2より前に異なる名前でエクスポートされ、テンソルフロー/サービングで提供されたモデルは、 'inputs' と 'outputs' を使用してリクエストを受け入れる。 1.2から、そのようなモデルはエクスポート中に指定されたキーを受け入れる。したがって、 'inputs' と 'outputs' を使った推論要求が失敗することがある。これを修正するには、トレーナコードで使用される実際の入力および出力キーを使用して要求を送信するように推論クライアントを更新するか、逆にトレーナコードを更新して入力および出力Tensorsの入力と出力をそれぞれ指定する。 'classify' と 'regress' メソッドを使用するシグネチャは、この変更の影響を受けない。入力キーと出力キーを以前と同じように標準化し続ける。
  • データセットAPIにメモリ内キャッシュを追加。
  • データセットイテレータのデフォルトの end_of_sequence 変数を false に設定。
  • [パフォーマンス] nn.bias_add を使用して use_bias = True に 2x を設定すると、 tf.layers.con2d のパフォーマンスが向上する。
  • iOSのサンプルを更新してCocoaPodを使用し、 tensorflow/examples/ios に移動。
  • tf.summary ops に family= attribute を追加して、Tensorboard で使用されるタブ名を制御して要約を整理できるように。
  • GPUが設定されている場合、 --config = cuda は不要に。代わりに、 configure スクリプトでGPUが要求されている場合は自動的にGPU用に構築される。
  • CPU/GPU多項式における小さな確率の誤ったサンプリングを修正。
  • セッション内で list_devices() APIを追加して、クラスタ内のデバイスを一覧表示。さらに、この変更により、 ListDevices マスタAPIがセッションの指定をサポートするように。
  • パラメータ化された分離可能な畳み込みの使用を許可。
  • TensorForest重回帰バグ修正。
  • フレームワークは現在 armv7 をサポート、 cocoapods.org は正しいページを表示するようになった。
  • CocoaPods用のiOSフレームワークを作成するためのスクリプト。
  • TensorFlowのAndroidリリースは、アプリケーションへの統合を容易にするため、 jcenter にプッシュされるように。詳細については、 https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/android/README.md を参照のこと。
  • マルチGPU設定で tfdbg が機能しなくなるバグを修正。
  • tf.Session.make_callable で tfdbg が動作しないバグを修正。

貢献者の方々への謝辞


このリリースには、Googleの多くの人々からの寄付と次のものが含まれています:

4F2E4A2E, Adriano Carmezim, Adrià Arrufat, Alan Yee, Alex Lattas, Alex Rothberg, Alexandr Baranezky, Ali Siddiqui, Andreas Solleder, Andrei Costinescu, Andrew Hundt, Androbin, Andy Kernahan, Anish Shah, Anthony Platanios, Arvinds-Ds, b1rd, Baptiste Arnaud, Ben Mabey, Benedikt Linse, Beomsu Kim, Bo Wang, Boyuan Deng, Brett Koonce, Bruno Rosa, Carl Thomé, Changming Sun, Chase Roberts, Chirag Bhatia, Chris Antaki, Chris Hoyean Song, Chris Tava, Christos Nikolaou, Croath Liu, cxx, Czxck001, Daniel Ylitalo, Danny Goodman, Darren Garvey, David Brailovsky, David Norman, DavidNorman, davidpham87, ddurham2, Dhruv, DimanNe, Drew Hintz, Dustin Tran, Earthson Lu, ethiraj, Fabian Winnen, Fei Sun, Freedom" Koan-Sin Tan, Fritz Obermeyer, Gao, Xiang, Gautam, Guenther Schmuelling, Gyu-Ho Lee, Hauke Brammer, horance, Humanity123, J Alammar, Jayeol Chun, Jeroen BéDorf, Jianfei Wang, jiefangxuanyan, Jing Jun Yin, Joan Puigcerver, Joel Hestness, Johannes Mayer, John Lawson, Johnson145, Jon Malmaud, Jonathan Alvarez-Gutierrez, Juang, Yi-Lin, Julian Viereck, Kaarthik Sivashanmugam, Karl Lessard, karl@kubx.ca, Kevin Carbone, Kevin Van Der Burgt, Kongsea, ksellesk, lanhin, Lef Ioannidis, Liangliang He, Louis Tiao, Luke Iwanski, LáSzló Csomor, magixsno, Mahmoud Abuzaina, Marcel Hlopko, Mark Neumann, Maxwell Paul Brickner, mdfaijul, MichaëL Defferrard, Michał JastrzęBski, Michele Colombo, Mike Brodie, Mosnoi Ion, mouradmourafiq, myPrecious, Nayana Thorat, Neeraj Kashyap, Nelson Liu, Niranjan Hasabnis, Olivier Moindrot, orome, Pankaj Gupta, Paul Van Eck, peeyush18, Peng Yu, Pierre, preciousdp11, qjivy, Raingo, raoqiyu, ribx, Richard S.Imaoka, Rishabh Patel, Robert Walecki, Rockford Wei, Ryan Kung, Sahil Dua, Sandip Giri, Sayed Hadi Hashemi, sgt101, Shitian Ni, Shuolongbj, Siim PõDer, Simon Perkins, sj6077, SOLARIS, Spotlight0xff, Steffen Eberbach, Stephen Fox, superryanguo, Sven Mayer, Tapan Prakash, Tiago Morais Morgado, Till Hoffmann, Tj Rana, Vadim Markovtsev, vhasanov, Wei Wu, windead, Yan (Asta) Li, Yan Chen, Yann Henon, Yi Wang, Yong Tang, yorkie, Yuan (Terry) Tang, Yuxin Wu, zhengjiajin, zhongzyd, 黄璞

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


ダウンロード




-----

canned estimatorってたしかDevSummitでいっていた、学習済みモデルのことだとおもっていたが分類器と回帰で学習済みってことはなさそうだけど..

さわってみないと、わからんか..


あと、これみよがしに

Monotonic Attention wrappers added to tf.contrib.seq2seq.

と書いてあるってことは、MonotonicでないMulti Head Self-AttentionT2Tを見てねってことなのだろう..

なお、もちろんDocker Hubのtensorflow/tensorflowlatest1.3.0-rc0になっていた。


p.s.
2017年8月7日現在は、rc2がでています。

https://twitter.com/tensorflow/status/893593513954344960

2017年7月10日月曜日

Tensor2Tensor Transformers の README.md を翻訳してワークフローを動かしはじめた



今日、Twitterに流れてきたリンク

T2T: Tensor2Tensor Transformers
https://github.com/tensorflow/tensor2tensor

で T2T なるOSSがあることを知った。
Google正規プロジェクトモノではないらしいが..

ということで GitHub の README.md を翻訳してみた。
以下、翻訳内容だが、参照の際は at your own risk でお願いします。

-----

T2T: Tensor2Tensor Transformers


T2T はモジュール化された拡張可能なライブラリで、TensorFlowを使用した教師あり学習とSequneceタスクのサポートのためのバイナリです。 Google Brainチーム内の研究者やエンジニアが積極的に使用し維持しています。 Tensor2Tensorについて詳しくは、 最近のGoogle Research Blogの記事 をご覧ください。

私たちはT2Tを拡張する上であなたと協力したいと思っていますので、 GitHubでIssueを開  いたり、プルリクエストを送信してデータセットやモデルを追加してください。 詳細と未解決の問題については、弊社の貢献文書  をご覧ください。 そして、Gitterで我々や他のユーザたちとチャットしてください。



ウォークスルー


ここでは、論文 "Attention Is All You Need" にある WMTデータ上でTransformerモデルを使用して、英語からドイツ語への翻訳モデルをトレーニングするウォークスルーを紹介します。



pip install tensor2tensor

#どの問題、モデル、およびハイパーパラメータセットが利用可能かを確認すること。
#それらの間を簡単に入れ替えることができます(新しいものを追加することも可能)。

t2t-trainer --registry_help

PROBLEM=wmt_ende_tokens_32k
MODEL=transformer
HPARAMS=transformer_base_single_gpu

DATA_DIR=$HOME/t2t_data
TMP_DIR=/tmp/t2t_datagen
TRAIN_DIR=$HOME/t2t_train/$PROBLEM/$MODEL-$HPARAMS

mkdir -p $DATA_DIR $TMP_DIR $TRAIN_DIR

# データ生成
t2t-datagen \
  --data_dir=$DATA_DIR \
  --tmp_dir=$TMP_DIR \
  --num_shards=100 \
  --problem=$PROBLEM

cp $TMP_DIR/tokens.vocab.* $DATA_DIR

# トレーニング
# out of memoryとなる場合は、
# --hparams='batch_size=2048' (もしくは1024)を追加してください。
t2t-trainer \
  --data_dir=$DATA_DIR \
  --problems=$PROBLEM \
  --model=$MODEL \
  --hparams_set=$HPARAMS \
  --output_dir=$TRAIN_DIR

# デコード

DECODE_FILE=$DATA_DIR/decode_this.txt
echo "Hello world" >> $DECODE_FILE
echo "Goodbye world" >> $DECODE_FILE

BEAM_SIZE=4
ALPHA=0.6

t2t-trainer \
  --data_dir=$DATA_DIR \
  --problems=$PROBLEM \
  --model=$MODEL \
  --hparams_set=$HPARAMS \
  --output_dir=$TRAIN_DIR \
  --train_steps=0 \
  --eval_steps=0 \
  --decode_beam_size=$BEAM_SIZE \
  --decode_alpha=$ALPHA \
  --decode_from_file=$DECODE_FILE

cat $DECODE_FILE.$MODEL.$HPARAMS.beam$BEAM_SIZE.alpha$ALPHA.decodes



インストール




# tensorflowまたはtensorflow-gpuがインストールされていると仮定
pip install tensor2tensor

# tensorflow-gpuの場合
pip install tensor2tensor[tensorflow_gpu]

# tensorflow(cpu)の場合
pip install tensor2tensor[tensorflow]
 


バイナリ:
# データ生成
t2t-datagen

# トレーナー
t2t-trainer --registry_help
 
 
ライブラリの使い方:
python -c "from tensor2tensor.models.transformer import Transformer"



機能



  • 多くの最先端のモデルとベースラインモデルが組み込まれており、新しいモデルを簡単に追加できます(問題を開くかプルリクエストしてください)。
  • モダリティ(テキスト、オーディオ、画像)の生成と使用が可能な多くのデータセット、および新しいものを簡単に追加できます(Issueを開くか公開データセットを pull request !)。
  • モデルは、任意のデータセットおよび入力モード(または複数のモード)で使用できます。すべてのモダリティ固有の処理(例えば、テキストトークンのためのルックアップの埋め込み)は、データセット/タスク仕様の特徴ごとに指定された Modality オブジェクトで行われます。
  • マルチGPUマシンと同期(1マスター、多くのワーカー)および非同期(パラメタサーバーを介して同期する独立したワーカー)分散トレーニングをサポート。
  • データ生成スクリプト t2t-datagen とトレーニングスクリプト t2t-trainer を使用して、コマンドラインフラグでデータセットとモデル間を簡単にスワップします。

T2T 概要

データセット

データセット はすべて tensorflow.Exzample プロトコルバッファの TFRecord ファイルで標準化されています。すべてのデータセットは データジェネレータ  で登録および生成され、多くの共通シーケンスデータセットはすでに生成および使用可能です。



問題およびモダリティ


問題 は、主に入出力 モダリティ (記号、画像、音声、ラベルなど)とボキャブラリ(該当する場合)を設定することによって、データセットとタスクのトレーニング時のハイパーパラメータを定義します。 すべての問題は problem_hparams.py で定義されています。 modality.py で定義されている モダリティ は、モデルがモダリティに依存しないテンソルを扱うように入出力データ型を抽象化します。



モデル


T2TModels は、入力/出力モダリティまたはタスクとは独立したコア tensor-to-tensor 変換を定義します。 モデルは高密度のテンソルを取り込み、高密度のテンソルを生成し、タスクに依存するモダリティ(例えば、最終的な線形変換を介して与えられ、クラスに対するソフトマックスの logits を生成する)によって最後のステップで変換される。 すべてのモデルは models.py にインポートされ、 t2t_model.py で定義された T2TModel から継承されます。


  • そして、 @registry.register_modelで登録されてます。



ハイパーパラメータセット


ハイパーパラメータセット は、 @registry.register_hparams で定義され、コードで登録され、 tf.contrib.training.HParams オブジェクトにエンコードされます。 HParam は問題仕様とモデルの両方に対応しています。 ハイパーパラメータの基本セットは common_hparams.py で定義され、ハイパーパラメータセット関数は他のハイパーパラメータセット関数を構成することができます。



トレーナ


トレーナ バイナリは、トレーニング、評価、および推論の主要なエントリポイントです。 --model --problems --hparams_set フラグを使用することで、ユーザは問題、モデル、およびハイパーパラメータセットを簡単に切り替えることができます。 特定のハイパーパラメータは、 --hparams フラグで上書きすることができます。 --schedule   および関連フラグは、ローカルおよび分散トレーニング/評価( "分散トレーニングドキュメント"  )を制御します。



コンピュータの追加


T2Tのコンポーネントは、簡単に新しいものを追加し、コマンドラインフラグで簡単に交換できる中央登録メカニズムを使用して登録されます。 t2t-trainerに--t2t_usr_dirフラグを指定することで、T2Tコードベースを編集せずに独自のコンポーネントを追加できます。

現在、モデル、ハイパーパラメータセット、およびモダリティでこれを行うことができます。 あなたのコンポーネントが他の人にとって役に立ちそうな場合はプルリクエストを提出してください。

新しいハイパーパラメータセットを使用した例を次に示します:


# ~/usr/t2t_usr/my_registrations.py 内

from tensor2tensor.models import transformer
from tensor2tensor.utils import registry

@registry.register_hparams
def transformer_my_very_own_hparams_set():
  hparams = transformer.transformer_base()
  hparams.hidden_size = 1024
  ...


# ~/usr/t2t_usr/__init__.py 内
import my_registrations


t2t-trainer --t2t_usr_dir=~/usr/t2t_usr --registry_hel

登録されたHParamの下に、 transformer_my_very_own_hparams_set が表示されます。これはコマンドラインで --hparams_set フラグを使って直接使用できます。


データセットの追加


"データ生成 README" を参照のこと。

注:これは公式のGoogleサービスではありません。
---------

とりあえずワークフロー通りに打ち込んでいるのだけど、
データ取得がおもいのほか時間がかかっていて
もう1時間位たってるのだけど、まだおわっていない...

...やるしかないか

(翌日)
ようやくダウンロードおわっていたが、$HOMEを使ってるせいでパンパン。

でトレーニングを開始。

..問題なく始まった..とおもったらすぐに以下のメッセージが出て終了。

ResourceExhaustedError (see above for traceback): OOM when allocating tensor with shape[204,40,1,2048]
         [[Node: body/model/parallel_0/body/decoder/layer_0/conv_hidden_relu/Greater = Greater[T=DT_FLOAT,
 _device="/job:localhost/replica:0/task:0/gpu:0"](body/model/parallel_0/body/decoder/layer_0/conv_hidden_r
elu/conv1_single/Relu, body/model/parallel_0/body/decoder/layer_0/conv_hidden_relu/Greater/y)]]
         [[Node: body/model/parallel_0/body/decoder/layer_1/decoder_self_attention/dot_product_attention/M
ax/_2685 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device
="/job:localhost/replica:0/task:0/gpu:0", send_device_incarnation=1, tensor_name="edge_10090_body/model/pa
rallel_0/body/decoder/layer_1/decoder_self_attention/dot_product_attention/Max", tensor_type=DT_FLOAT, _de
vice="/job:localhost/replica:0/task:0/cpu:0"]()]]

OOM="Out Of Memory" だろうなあ..
ちなみに使ってるGPUは GeForce1050Ti/4GB。

しょうがないのでコメント欄にあったOOM対策をつかってみることに。
--hparams='batch_size=2048'でうごかしてみた。

INFO:tensorflow:global_step/sec: 1.34169
INFO:tensorflow:step = 102, loss = 8.53071 (74.533 sec)

が繰り返し出るようになったので、バッチが動き始めたようだ..


..で、コレいつおわるんだろう..

やっぱ論文にあるうんちゃらdaysかかるんだろうなあ..

しばらくは、放置プレイか..

ちなみにこの状態で進捗を確認したいのであれば、
別ターミナルで
tensorboard --logdir=/root/t2t_train/wmt_ende_tokens_32k/transformer-transformer_base_single_gpu
を実行して http://IPアドレス:6006/ を開けば
みんなだいすきTensorBardで状況が確認できます。






さすがOSS、SCALARSやGRAPHSだけでなく、IMAGESやDISTRIBUTIONS、HISTGRAMS、EMBEDDINGSまで可視化できるようになってる。


------
(数日後)

ふとトレーニングプロセスが落ちていることがわかった。lossをみると1.6あたりだったので
ワークフローを継続してみた。

root@07599f5e67a4:/notebooks/work/t2t# t2t-trainer --data_dir=$DATA_DIR --problems=$PROBLEM --model=$MODEL --hparams_set=$HPARAMS --output_dir=$TRAIN_DIR --tr
ain_steps=0 --eval_steps=0 --decode_beam_size=$BEAM_SIZE --decode_alpha=$ALPHA --decode_from_file=$DECODE_FILE
INFO:tensorflow:Creating experiment, storing model files in /root/t2t_train/wmt_ende_tokens_32k/transformer-transformer_base_single_gpu
INFO:tensorflow:datashard_devices: ['gpu:0']
INFO:tensorflow:caching_devices: None
INFO:tensorflow:Using config: {'_save_summary_steps': 100, '_keep_checkpoint_max': 20, '_tf_random_seed': None, '_num_ps_replicas': 0, '_task_id': 0, '_cluste
r_spec': , '_save_checkpoints_secs': 600, '_is_chief': True, '_tf_config': gpu_opt
ions {
  per_process_gpu_memory_fraction: 1.0
}
, '_model_dir': '/root/t2t_train/wmt_ende_tokens_32k/transformer-transformer_base_single_gpu', '_keep_checkpoint_every_n_hours': 10000, '_num_worker_replicas'
: 0, '_save_checkpoints_steps': None, '_master': '', '_session_config': allow_soft_placement: true
graph_options {
  optimizer_options {
  }
}
, '_evaluation_master': '', '_environment': 'local', '_task_type': None}
INFO:tensorflow:Performing Decoding from a file.
INFO:tensorflow:Getting sorted inputs
INFO:tensorflow: batch 1
INFO:tensorflow:Deocding batch 0
INFO:tensorflow:datashard_devices: ['gpu:0']
INFO:tensorflow:caching_devices: None
INFO:tensorflow:Beam Decoding with beam size 4
INFO:tensorflow:Doing model_fn_body took 2.638 sec.
INFO:tensorflow:This model_fn took 2.863 sec.
2017-07-18 08:58:57.662260: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these a
re available on your machine and could speed up CPU computations.
2017-07-18 08:58:57.662295: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these a
re available on your machine and could speed up CPU computations.
2017-07-18 08:58:57.900032: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:893] successful NUMA node read from SysFS had negative value (-1), but ther
e must be at least one NUMA node, so returning NUMA node zero
2017-07-18 08:58:57.900388: I tensorflow/core/common_runtime/gpu/gpu_device.cc:940] Found device 0 with properties:
name: GeForce GTX 1050 Ti
major: 6 minor: 1 memoryClockRate (GHz) 1.392
pciBusID 0000:01:00.0
Total memory: 3.94GiB
Free memory: 3.90GiB
2017-07-18 08:58:57.900416: I tensorflow/core/common_runtime/gpu/gpu_device.cc:961] DMA: 0
2017-07-18 08:58:57.900430: I tensorflow/core/common_runtime/gpu/gpu_device.cc:971] 0:   Y
2017-07-18 08:58:57.900446: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1050
 Ti, pci bus id: 0000:01:00.0)
INFO:tensorflow:Restoring parameters from /root/t2t_train/wmt_ende_tokens_32k/transformer-transformer_base_single_gpu/model.ckpt-250000
INFO:tensorflow:Inference results INPUT: Goodbye world
INFO:tensorflow:Inference results OUTPUT: Gunstige Welt (和訳:u上にウムラウトである場合「好調な世界」)
INFO:tensorflow:Inference results INPUT: Hello world
INFO:tensorflow:Inference results OUTPUT: Hallo Welt (和訳:こんにちは世界)
INFO:tensorflow:Writing decodes into /root/t2t_data/decode_this.txt.transformer.transformer_base_single_gpu.beam4.alpha0.6.decodes
root@07599f5e67a4:/notebooks/work/t2t#


Googbye はきちんと理解していないらしくGoodで代替したんじゃないかともう。

とりあえず、日独翻訳(Tensor2Tensor)はGeForce1050Tiでも動くことはわかった。

なので、ニューホライ●ンの3年のテキストから適当に文章を抜き出して翻訳させてみた。
以下、その実行である。

-----

日本語 原文の日本語訳
INPUT 原文(英語)
OUTPUT Tensor2tensor のアウトプットテキスト(ドイツ語)
GOOGLE 原文をGoogle翻訳でドイツ語に翻訳したテキスト



日本語 チームを全国大会に導くことができる選手になりたい。
INPUT I want to be a player who can lead a team to the national tournament.
OUTPUT Ich m\xf6chte ein Spieler sein, der ein Team zum nationalen Turnier f\xfchren kann.
GOOGLE Ich möchte ein Spieler sein, der ein Team zum nationalen Turnier führen kann.


日本語 第三に、私たちが学校の制服を着用するとき、私たちは学校に属していると感じることができます。
INPUT Third, when we wear school uniforms, we can feel that we belong to our school.
OUTPUT Drittens, wenn wir die Schulen tragen, k\xf6nnen wir das Gef\xfchl haben, dass wir unserer Schule angeh\xf6ren.
GOOGLE Drittens, wenn wir Schuluniformen tragen, können wir fühlen, dass wir zu unserer Schule gehören.


日本語 彼女が望んでいる世界は簡単に来ないかもしれないが、彼女はそれのために努力し続ける。
INPUT The world that she wants may not come easily, but she keeps striving for it.
OUTPUT Die Welt, die sie will, wird vielleicht nicht leicht, aber sie strebt immer wieder nach.
GOOGLE Die Welt, die sie will, mag nicht leicht kommen, aber sie strebt danach.


日本語 はい。 彼女はミャンマーの民主主義と人権のために戦う政治家です。
INPUT Yes. She is a political leader who fights for democracy and human rights in Myanmar.
OUTPUT Ja, sie ist ein Politiker, der f\xfcr Demokratie und Menschenrechte in Myanmar k\xe4mpft.
GOOGLE Ja. Sie ist ein politischer Führer, der für die Demokratie und die Menschenrechte in Myanmar kämpft.


日本語 彼女は合計15年間拘束されたが、決して諦めなかった。
INPUT She was locked up for 15 years in total, but she never gave up.
OUTPUT Sie wurde insgesamt 15 Jahre eingesperrt, aber sie hat nie aufgegeben.
GOOGLE Sie war für 15 Jahre gesperrt, aber sie gab niemals auf.


日本語 人々は強力なリーダーを必要とし、アウンサンスーチーに彼らに加わるように頼んだ。
INPUT People needed a strong leader, and asked Aung San Suu Kyi to join them.
OUTPUT Die Menschen brauchten einen starken Anf\xfchrer, und sie haben Aung San Suu Kyi aufgefordert, sich ihnen anzuschlie \xdfen.
GOOGLE Die Leute brauchten einen starken Führer und baten Aung San Suu Kyi, sich ihnen anzuschließen.


日本語 私たちはさまざまなアイデアを集め、結局素晴らしい映画を完成させました。
INPUT We brought different ideas together, and completed a wonderful movie in the end.
OUTPUT Wir haben verschiedene Ideen zusammengebracht und am Ende einen wunderbaren Film vervollst\xe4ndigt.
GOOGLE Wir brachten verschiedene Ideen zusammen und vervollständigten einen wunderbaren Film.


日本語 私はアメリカにも学校制服を持っていなければならないと思います。
INPUT I think that we should also have school uniforms in the United States.
OUTPUT Ich glaube, dass wir auch in den Vereinigten Staaten SchulUniformen haben sollten.
GOOGLE Ich denke, dass wir auch Schuluniformen in den Vereinigten Staaten haben sollten.


日本語 1989年、政府は彼女の運動を止めるために自宅で逮捕した。
INPUT In 1989, the government put her under house arrest to stop the movement.
OUTPUT 1989 hat die Regierung sie unter Hausarrest gestellt, um die Bewegung zu stoppen.
GOOGLE Im Jahr 1989 stellte die Regierung sie unter Hausarrest, um die Bewegung zu stoppen.


日本語 これは私の学校生活の中で最高の経験です。
INPUT This is the greatest experience that I've had in my school life.
OUTPUT Das ist die gr\xf6\xdfte Erfahrung, die ich in meinem Schulleben erlebt habe.
GOOGLE Das ist die größte Erfahrung, die ich in meinem Schulleben hatte.


日本語 私のグループには、4人のメンバがいましたが、それぞれに異なるアイデアや意見がありました。
INPUT My group had four members who all had different ideas and opinions.
OUTPUT Meine Fraktion hatte vier Mitglieder, die alle verschiedene Ideen und Meinungen hatten.
GOOGLE Meine Gruppe hatte vier Mitglieder, die alle verschiedene Ideen und Meinungen hatten.


日本語 映画制作は私の学校で非常に人気のある選択授業です。
INPUT Filmmaking is an elective class that is very popular in my school.
OUTPUT In meiner Schule ist die Filmforschung eine gew\xe4hlte Klasse, die sehr beliebt ist.
GOOGLE Filmmaking ist eine Wahlklasse, die in meiner Schule sehr beliebt ist.


日本語 結局、彼女はミャンマーに滞在し、再び彼を見たことはありませんでした。
INPUT In the end, she stayed in Myanmer and never saw him again.
OUTPUT Am Ende blieb sie in Myanmer und sah ihn nie wieder.
GOOGLE Am Ende blieb sie in Myanmar und sah ihn nie wieder.


日本語 映画製作は私に違いを受け入れ、他の人から学ぶことを教えてくれました。
INPUT Filmmaking taught me to accept differences and learn from other people.
OUTPUT Die Filme lehrten mich, Unterschiede zu akzeptieren und von anderen Menschen zu lernen.
GOOGLE Filmmaking lehrte mich, Unterschiede zu akzeptieren und von anderen Menschen zu lernen.


日本語 ニューヨークでは、世界中の人々と出会った。
INPUT In New York, I've met people from all over the world.
OUTPUT In New York habe ich Menschen aus aller Welt getroffen.
GOOGLE In New York habe ich Leute aus der ganzen Welt kennengelernt.


日本語 私は3年間バレーボールチームのメンバでした。
INPUT I've been a member of the volleyball team for three years.
OUTPUT Ich bin seit drei Jahren Mitglied des Volleyball-Teams.
GOOGLE Ich bin seit drei Jahren Mitglied des Volleyballteams.


日本語 多くの日本人学生は学校制服を着用しているが、アメリカ人のほとんどはそうではない。
INPUT Many Japanese students wear school uniforms, but most American do not.
OUTPUT Viele japanische Studenten tragen Schulen Uniformen, aber die meisten Amerikaner nicht.
GOOGLE Viele japanische Studenten tragen Schuluniformen, aber die meisten Amerikaner nicht.


日本語 1999年、アウンサンスーチーさんの夫はがんで死にそうになっていました。
INPUT In 1999, Aung San Suu Kyi's husband was dying of cancer.
OUTPUT 1999 starb der Mann von Aung San Suu Kyi an Krebs.
GOOGLE Im Jahr 1999 war Aung San Suu Kyis Ehemann an Krebs gestorben.


日本語 私と一緒になっていくのは簡単ではありませんでした。
INPUT It wasn't easy for me to get along with them.
OUTPUT Es war f\xfcr mich nicht leicht, sie zu unterst\xfctzen.
GOOGLE Es war nicht leicht für mich, mit ihnen zu kommen.


日本語 私の学校には様々な文化の学生もいます。
INPUT There are students of various cultures in my school, too.
OUTPUT Auch in meiner Schule gibt es Studenten verschiedener Kulturen.
GOOGLE Es gibt auch Studenten verschiedener Kulturen in meiner Schule.


日本語 私は以前に日本に住み、去年ここに移住しました。
INPUT I lived in Japan before, and moved here last year.
OUTPUT Ich habe zuvor in Japan gelebt und bin vergangenes Jahr hierher gegangen.
GOOGLE Ich wohnte schon in Japan und bin im letzten Jahr hierher gekommen.


日本語 私はニューヨークに住む15歳の少女、滝川恵理子です。
INPUT I'm Takigawa Erika, a 15-year-old girl living in New York.
OUTPUT Ich bin Takigawa Erika, ein 15-j\xe4hriges M\xe4dchen, das in New York lebt.
GOOGLE Ich bin Takigawa Erika, ein 15-jähriges Mädchen, das in New York lebt.


日本語 世界は、民主主義と人権のための彼女の努力を認識しました。
INPUT The world recognized her efforts for democracy and human rights.
OUTPUT Die Welt hat ihre Bem\xfchungen um Demokratie und Menschenrechte anerkannt.
GOOGLE Die Welt erkannte ihre Bemühungen um Demokratie und Menschenrechte.


日本語 それに加わった多数の人々が殺された。
INPUT A great number of people who joined it were killed.
OUTPUT Es wurden zahlreiche Menschen get\xf6tet.
GOOGLE Eine große Anzahl von Leuten, die sich ihm angeschlossen haben, wurde getötet.


結構いい感じの翻訳をだしていて、中にはGoogle翻訳本体と全く同じ答えもでていた。

ご参考迄。

-----
(後日談)NVIDIA K20C で Tensor2Tensor を動かしてみた
 

TensorFlow 1.4.0 rc0 がリリースされていた

タイムラインにTensorFlow1.4.0 rc0 のリリース案内が流れてきました。 ので、何処が変わったかGitHubのREADMEを翻訳してみました。 以下、参照される場合は、at your own risk でお願いします。 ------- TensorF...