Translate

2017年9月7日木曜日

NVIDIA K20C で Tensor2Tensor を動かしてみた

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

ので、ココぞとばかりに前に動かした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文
まるまるをガッツリなかったかのように
無視を決める事があるので厄介だ...



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

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 を動かしてみた
 

2017年6月28日水曜日

SONYのAIコアライブラリ NNabla の概要を調べてみる

ソニーがAIライブラリをオープンソース公開したという記事を読んだ。

ソニー、ディープラーニングのコアライブラリを無償公開
https://japan.cnet.com/article/35103402/
トップサイトが

https://nnabla.org/ja/

にあるが、どうもナンチャッテとっぷさいとのようだ。
おそらくだけど、真のトップがここのようだ。

https://nnabla.readthedocs.io/en/latest/#

..結局英語かよ..


トップの英語をGoogle翻訳にかけてみた。

NNablaは、研究、開発、および生産に使用するための深い学習フレームワークです。 私たちは、デスクトップPC、HPCクラスタ、組み込み機器、プロダクションサーバなどあらゆる場所で稼動させることを目指しています。

このドキュメントでは、Python APIおよびC ++ APIの使用方法、開発者向けの寄付ガイド、およびこのソフトウェアのライセンス期間について説明します。 Python APIは、ディープ・ラーニング・システムの迅速なプロトタイプ作成や実験に適していますが、C ++ APIは、推論やトレーニング・アルゴリズムを組み込みシステムやサーバーに組み込むためのものです(ドキュメントは現在のところ入手できません。 このフレームワークは、モジュール性と拡張性を念頭に置いて設計されています。 コミュニティ寄稿者は、ニューラルネットワークの新しいオペレータまたはオプティマイザモジュール、および特定のターゲットデバイス用のニューラルネットワークモジュールの特別な実装を拡張モジュールとして追加できます。

Pythonライブラリになっていて、C++ もあるけどそっちはどうも実際の計算モジュール実装に使っていて、今のところドキュメントはないらしい。今回はコアライブラリで、オプティマイザとかのcontribを追加できるような構造になってるよ、ということらしい。

ちなみにラインセンスはApache2.0である。

以下、Windows環境でのインストール手順をGoogle翻訳に掛けたものだ。

■Windowsへのインストール

・前提条件

Windows8.1 64bitとWindows10 64bitでは動作確認テスト済み。

インストールには次のソフトウェアが必要となる。

 - 必要なソフトウェア。
   Python 2.7:PIP
   Microsoft Visual C ++ 2015再頒布可能
 - 推奨ソフトウェア
   CUDAツールキット8.0 / cuDNN 6.0(NVIDIA GPUユーザー向け)

・セットアップ環境
 - Python2.7
   この手順では、minicondaを使用します。
   ここからWindowsバイナリを入手してインストールしてください。
  
   コマンドプロンプトから必要なパッケージをインストールします。
   > conda install scipy scikit-image ipython
   ネットワークがプロキシを使用しており、セットアップが失敗した場合は、環境変数を使用してプロキシサーバーを構成し、再度インストールしてください。
   > SET HTTP_PROXY=http://(ここにhttpプロキシサーバーのアドレスを入力します)
   > SET HTTPS_PROXY = https://(ここにhttpsプロキシサーバーのアドレスを入力します)


 - Microsoft Visual C ++ 2015 Redistributable
   ここから取得してインストールしてください
 

 - CUDA Toolkit 8.0 / cuDNN 6.0
   NVIDIA GPUを使用している場合、次のソフトウェアをインストールすることで実行速度が大幅に向上します。
   CUDAツールキット
 
  cuDNN
 
  cuDNNをインストールするには、binincludelibを"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0"にコピーします。

 - インストール
  CPUパッケージをインストールします。
  > pip install nnabla

  NVIDIA GPUを使用している場合は、CUDA/cuDNN パッケージをインストールします。
  > pip install nnabla_ext_cuda

  実行を確認します。
  > ipython
 
  In [1]: import nnabla
  2017-06-06 21:36:07,101 [nnabla][Level 99]: Initializing CPU extension...
 
  In [2]: exit
 
  >


  動作(CUDA/cuDNN)を確認します。
  > ipython
 
  In [1]: import nnabla_ext.cuda.cudnn
  2017-06-16 18:42:18,881 [nnabla][Level 99]: Initializing CPU extension...
  2017-06-16 18:42:19,923 [nnabla][Level 99]: Initializing CUDA extension...
  2017-06-16 18:42:20,243 [nnabla][Level 99]: Initializing cuDNN extension...
 
  In [2]: exit
 
  >


・サンプルの実行
 ここからNNablaリポジトリをダウンロードし、解凍してサンプルディレクトリに移動してください。

 > cd nnabla \ examples \ vision \ mnist

 MNIST分類を実行します。
 nnabla\examples\vision\mnist > python classification.py

 CUDA/cuDNNでMNIST分類を実行します。
 nnabla\examples\vision\mnist > python classification.py -c cuda.cudnn

・FAQ
 Q. Scikitイメージのインストールには長い時間がかかります。
 環境によっては時間がかかります。 お待ちください。

 Q.インストール中にScipyのインストールに失敗しました。
 "pip install nnabla"の前に "conda install"を使ってscipyをインストールしてください。


インストールは簡単そうだ。

Windows7で動作確認はしてないんだ..というのはおいといて..

Anacondaが入ってるのでこれでできそうだし、GitHubのIssueにはPython3で云々っていうのも見かけた。

ちょっとおもしろそうなのは、MS C++ランタイムを入れている所。おそらくだけど、Anaconda上からなのにネイティブのC++ライブラリを使ってGPUが使える..つまりWindows上でGPUが使えるんじゃなかろうか

Windows上のAnacondaからのTensorFlowはCPUのみしかサポートしていなかったはずだから、Windowsの世界から出たくないよってもやし君にはちょうどいいかもしれない。

でもグラフィックリソースバリバリ使っているWindows OS 上でGPUって..どれくらいリソース開いてるのかはわからないけど..



Dockerインストールの方はTODOでからっぽだったが、Docker Hubにはもう載っかていた。

CPU版のほうのREADME.mdは

開発用Dockerイメージのビルド

 ./docker-build <タグ名>

これは、nnabla:<タグ名>という名前のDocker イメージを生成します。

使用可能なタグは、 Dockerfile.<タグ名> を使用して、このディレクトリのファイルに名前形式で表示されます。

とだけしか書かれていない。タグも今見たらlatestしかない..怖ェ..

CUDA版のREADME.mdは、

■NNablaのCUDA拡張機能

このリポジトリは、公式のCUDA / cuDNNで拡張されたNNablaの深い学習フレームワークです。


使用するには、デフォルトのコンテキストを 'cpu'から 'cuda.cudnn'に変更します:
from nnabla.contrib.context import extension_context

ctx = extension_context('cuda.cudnn', device_id=args.device_id)
nn.set_default_context(ctx)


現在、インストールのドキュメントと使用方法はbase NNablaに統合されています。



・FAQ
  近日公開


..どうもコンテキストというオブジェクト処理をコードに加えないとダメっぽいことが書かれている。
#TensorFlowのsession相当かもしれないなあ..

それに numpy のかわりに CuPy をとか nvidia-docker で動かせとかの指示もない..

Dockerは少し枯れるまで、待ったほうが良いかもしれない..




p.s.

どうでもいいはなしだが、NNabla の読み。
NNはニューラルネットワークをあらわしてるのだから
エヌエヌイネーブラ」と読んでいたが..
もしかしたら、単に「イネーブラ」と読んでほしいと思っているのかも..



(2017/08/22追記)

遅ればせながら..Neural Network Consoleの記事を読む。

SONYの本気!AI開発ツール『Neural Network Console』が現場の常識をぶっ壊す

この動画を見る限りでは




Azure Machine Learning と TensorBoard の機能を合わせた

ようなGUIツールらしい..

エンジンはこの NNabla らしいが、
どうもSONYは本気のようだ..

とすると、苦しくなるのが同じ日本勢のChainer..
なんたって事業継続性がネ...

..しかも日本人って大企業大好きだから..


個人的に
試そうとしたのですが、
Windows8.1以降らしく
残念ながら断念..
Ubuntu版ないのか..


..全部ビンボが悪いんや..


2017年6月19日月曜日

udemy のAI入門とTensorFlow入門を試してみた

AIブームというけれど、
それを使いこなすプログラマを育成する道具が
あまり揃っていない。

全員が全員、
TensorFlow のページをGoogle翻訳でゴリゴリ読むなんて
正直無理だ。

ド素人とまでは言わないが、
数年の経験をもつプログラマに使いこなしてもらわないと
とてもビジネスアプリケーション分野での発展は望めない。


..ということでいきついたのがudemy。

udemy は有料のeラーニングサービスで、
海外でも展開していてその日本版のサービスを試してみた。

日本版udemyはどうもあの Benesse が絡んでいるようなのだけど
..まあそのあたりのリスクはどうするかは始める人次第。

なぜ試してみたか..というのは、
AI、機械学習、ディープラーニングの良さげな研修が
あまりないこと。

幾つか存在するのだけど、
書籍も含め難易度が高い。
特に数式の出てこない本とかだと


私がパラ見した中では「はじめてのディープラーニング」という本くらい。
この本でも数式はどうしても出てくる。

個人的にはこの本はプロマネや営業..は辛いかもしれないけど技術系営業なら
できれば知っておいて欲しい単語がならんでいる。

なのでPMや技術系営業でAIと絡みそうない人は、
ちょっとづつ読みながら用語集を作っていくと
AI系のPMや営業業務にはついていける様になると思う。
#最後のCafeを使うセクションは飛ばしても良い

でも、これだと頭でっかちで、
どうしてプログラムを書かないで分類とか識別とかができるのか
というそもそもの本質的なところを埋めてくれないのだ。

それ用の本として



「ゼロから作るDeep Learning」というのがあるのだけど..
これが"ゼロから"とかいってるくせに
パーセプトロンとかXORとかNANDとか線形だ非線形だとか書いちゃって
「お前、教える気、ないやんけ!」
と思えるほど読む難易度が高い。


もっと3年目くらいのプログラマが手を使いながら
できればパーセプトロンとか線形とかの単語をそれほどつかわずに
おしえてくれそうな教材はないものか..

で、見つけたのがudemyの講座
「みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習」
https://www.udemy.com/learning-ai/

だ。

で、実際にやってみた。

テキストの流れは、以下の通り。

・コースと人工知能の概要
・準備
 Python2.7と最新版PyCharmをインストールする。
 ここで手順に従わず、Anaconda最新版でPython2.7仮想環境を作るのが実は近道。
・Pyhtonの基礎
 この講座の中でもっともつまらないセクション。
 だけど、後でPythonコードを書くので、一応知っておかないと進められない。
 ここをクリアすればAIのはなしに入ることができる。
 既に知ってる人は2倍速で飛ばせばいい。
 他の言語を知っている人は、四則演算の演算器とクラス、関数の書き方、リスト[]/タプル()/ディクショナリ{}の違いと使い方のところだけしっかり学習すればOK
・必要な数学の学習
 次のセクションで使うシグモイド関数を勉強するセクション。
 matplotlibというライブラリを使ってグラフをpythonで図示させて、継続意識を絶やさない講師の努力が伺える。
・ニューラルネットワーク
 「ゼロから作るDeep Learning」の2章「パーセプトロン」をわかりやすく、かつ順番にコードを肉付けしながら学んでいくこの講座の中心。
 ニューロンクラスを完成させ、ニューラルネットワーククラスで複数連結させるところまで。
・機械学習
 前のセクションで作ったニューラルネットワーククラスのWとbをどうやって自動学習できるようにするかをおしえるセクション。ここも中心のひとつ。
 バックプロパゲーションで微分を傾きとして教えている。
・機械学習ライブラリの活用
 自分で実装しなくてもライブラリがあるのでそれを使えば簡単に実装できるよという、応用セクション。
 scikit-learnをインストールするが、WindowsOS上のPython2.7.x系に直にscipyをインストールするところは、皆結構引っかかるところなのだけど、そこが書かれていない。
 最新のAnacondaでcondaしてpython2.7仮想環境を作っていればもんだいなし。
 動かすのはサポートベクタマシンを使ったMNISTと株価分析。
・さらに学ぶために
 ここはGPUの話やディープラーニングの例としてCNNやDCGAN(贋作者つきCNN)のほんのさわりだけしょうかいしてまとめ
 TensorFlowも使おうとするが、AnacondaでないWindows利用者は確実にハマる。
 でも疎通用プログラムを動かすだけなので無視してOK
・ボーナスレクチャー
 講師主催の勉強会案内などの、塾帰り直前とかの案内的な話


Python知らなくても学習するところから始めるし、数学用語は知らなくても継続可能。
バックプロパゲーションで?となる人もいるだろうが、ニュートン法を計算機実習で学んだ人ならほぼスルー可能。
このあたりだけごまかせば、たぶん新入社員でもなんとかなるだろう。

この講座は、環境面の問題がクリアできれば初心者SEのAIへのエントリポイントに最適だ。
ただPMや営業が必要としているのは、"用語"集のインストールだが、この講座はそこは満たすことができない。先の「はじめてのディープラーニング」とかの本を読みつつExcelシート上に用語集を作っていくのが最短ルートだとおもう。



この講座の"次"候補として、


【4日で体験】 TensorFlow x Python 3 で学ぶディープラーニング入門
https://www.udemy.com/tensorflow/


を受けたが、前の講座を公立小学校としたら、これは中学2年か。
("中1"部分が抜けてる気がする)

TesnorFlowのチュートリアルの最初にあるMNISTを順番に解説するが、
その後はサンプルコードをGitから落として動かすだけなので、
知識としてはCNN(畳み込みとプーリング、全結合層で何やっているか)
にとどまる。

本音としては、
tf変数がなんであるのとか、
計算グラフは定義しただけでは動作せずsessionをrunしてうごかすとか
runするときのディクショナリのplaceholderでpython界とC++界を行き来しているとか
を説明する講座が欲しいところだ。

MNIST以外の2つのセクションはそれぞれサンプルコードの動かし方例だが
これを1本にして、自然言語系のチュートリアルをCNNのように
詳細解説してほしいなあ..

講師からのコメントによるとこれかららしいが、
1つのコース内でいれてくれるか
別コースになるか..
なんとなく別コースになりそうな気がする..

なんにせよこのコースは修正過渡期なので
この段階で評価することは難しい。

..というか、TensorFlow は私の学習時期が悪すぎた..
はじめた翌日にTesnroFlow1.2.0がリリースされたし..

バージョン自体がグラグラしている時期だからなあ..
Keras優先したにしても、tf.keras問題もあるし...


既に1.3.0の噂も聞いているので、TensorFlow系の教育はあまり手を出さないほうが実は件名だったりスルのだけど、組織や個人の事情でそうもいってられないひともいるだろうし..



p.s.
講座を完了すると、以下のような修了証が発行される。





まあ、これはどうでもいいですが..


2017年6月16日金曜日

TensorFlow1.2.0実行環境をnvidia-dockerで立ち上げるシェルスクリプトを書いてみる




とってもヘボいので、晒すのもどうかなと思うのですが、自分の忘備録として記事にしておこうかな..と、ふと。

環境はCentOS7、hara2devというdockerグループにも入っているユーザで以下の3つのスクリプトはホームの下にdockerというディレクトリを切ってその中に入っているてい。


/home/hara2dev/docker/env_tensorflow.sh

#!/bin/bash
############################################################
# filename: env_tensorflow.sh
#
# (C) hara^2 development, 2017 all rights reserved.
############################################################

## Jupyter notebook password

PASSWORD=harahara

## PORT

# Jyupiter port
JUP_PORT=8888
# TensorFlow Boad port
TFB_PORT=6006
# REST API port
REST_PORT=3000

## TensorFlow Version

TF_VER=1.2.0
#TF_VER=1.1.0
#TF_VER=1.0.1

## CPU / GPU

# CPU
#NODE=
#DOCKER=/usr/bin/docker

# GPU
NODE=-gpu
DOCKER=/usr/bin/nvidia-docker

## Python Version

# 2.x
#PY_VER=

#  3.x
PY_VER=-py3

## docker image

DOCKER_IMAGE=tensorflow/tensorflow

## docker tag

#DOCKER_TAG=latest
DOCKER_TAG=${TF_VER}${NODE}${PY_VER}

## pid file path

PID_DIR=/home/hara2dev/docker/pid
#PID_DIR=.
PID_FILE=${PID_DIR}/${DOCKER_TAG}.pid

## bin path
# ubuntu
CAT=/bin/cat
RM=/bin/rm
# cent
#CAT=/usr/bin/cat
#RM=/usr/bin/rm


/home/hara2dev/docker/start.sh

#!/bin/bash
############################################################
# filename: start.sh
#
# (C) hara^2 development, 2017 all rights reserved.
############################################################

## env script path
ENV_PATH=./env_tensorflow.sh

## operations
source ${ENV_PATH}

${DOCKER} run \
   --name "${DOCKER_TAG}" \
   --publish "${JUP_PORT}:8888" \
   --publish "${TFB_PORT}:6006" \
   --publish "${REST_PORT}:3000" \
   --volume /home/hara2dev/docker/work:/notebooks/work \
   --volume /home/hara2dev/docker/share:/notebooks/share \
   --env HTTP_PROXY="http://proxy.server:8080/" \
   --env HTTPS_PROXY="http://proxy.server:8080/" \
   --env NO_PROXY="localhost,127.0.0.1,*.hara2dev.local" \
   --env PASSWORD="${PASSWORD}" \
   --log-driver=syslog \
   --log-opt syslog-address=tcp://172.17.0.1:514 \
   --log-opt tag="${DOCKER_TAG}" \
   --detach \
   --cidfile ${PID_FILE} \
   ${DOCKER_IMAGE}:${DOCKER_TAG}


/home/hara2dev/docker/stop.sh

#!/bin/bash
############################################################
# filename: stop.sh
#
# (C) hara^2 development, 2017 all rights reserved.
############################################################

## env script path
ENV_PATH=./env_tensorflow.sh

## operations
source ${ENV_PATH}

PID=`${CAT} ${PID_FILE}`

${DOCKER} stop ${PID}
${DOCKER} rm ${PID}

${RM} -rf ${PID_FILE}




ログインして
cd dockerして
start.shで起動、
stop.shで停止、
docker ps で状態確認。

コンテナ停止、即コンテナイメージ削除してますが
shareとworkというディレクトリを共有させているので
ここにファイルを置けばなんとかなるとおもって..

TensorFlowのバージョンやGPU指定Pythonバージョン指定などを
変更する場合は、停止している状態で env_tensorflow.sh を修正する。

あと、rsyslogdも動いているていで。


172.17.0.1 はデフォルトルータの一つでホスト側IPを指しているんだけど、ここにIP書くわけに行かないので、代わりにこのIPを入れてます。

ホントは、docker-composeしたいんだけど、GPUイメージはnvidia-docker起動だから..

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 昇格なんてないだろうな..


NVIDIA K20C で Tensor2Tensor を動かしてみた

ふとしたことで一時的にNVIDIA K20Cが使える機会ができた。 ので、ココぞとばかりに前に動かしたTransformerモデルの 実装サンプル Tensor2Tensor を オプションなし で動かしてみた。 [GitHub]T2T: Tensor2Tensor Tra...