Slide 1

Slide 1 text

最近のTensorFlowの話 By  Norihiro Shimoda 1

Slide 2

Slide 2 text

⾃自⼰己紹介 • 下⽥田倫倫⼤大(@rindai87) • データ分析専業の企業のエンジニアマネージャー • TensorFlow User  Group(TFUG)主催者 • 最近GDE(Google  Developer  Expert)のML   Expertになりました

Slide 3

Slide 3 text

本⽇日のAgenda • TensorFlowのご紹介 • TFUG(TensorFlow User  Group)のご紹介 • TF  v1.0以降降の状況についてのご紹介 3

Slide 4

Slide 4 text

TensorFlow概要 by  Norhiro Shimoda 4

Slide 5

Slide 5 text

TensorFlowとは? • Googleによって2015年年11⽉月に公開されたオー プンソース – Google内部で多数の使⽤用実績があるらしい Google  Photo 画像の⾃自動分類 Google  翻訳 翻訳の⾃自動学習 Gmail スパムフィルタ OK  Google ⾳音声認識識 5

Slide 6

Slide 6 text

TensorFlowの歴史

Slide 7

Slide 7 text

Googleトレンドで⽐比較 7

Slide 8

Slide 8 text

TensorFlowのモデル 1. 学習モデルをグラフと して定義する 2. 学習を実際にどう⾏行行う かも定義する – 学習の評価⽅方法 – 最適化の⽅方法 – CPU  or  GPU – スタンドアロン or  分散 3. 定義に従って計算処理理 をデバイス上で実⾏行行さ せる

Slide 9

Slide 9 text

いろんなデバイスで動きます 9 CPU GPU Android iOS RasberryPi etc…

Slide 10

Slide 10 text

TensorBoardなどのツール

Slide 11

Slide 11 text

11 きゅうりの規格の⾃自動仕分け From:  http://workpiles.com/2016/02/tensorflow-­‐cnn-­‐cucumber/

Slide 12

Slide 12 text

アイドル顔の⾃自動⽣生成 12 From:  http://memo.sugyan.com/entry/2016/10/12/084751

Slide 13

Slide 13 text

空撮写真からの⾞車車両カウント 13 From:  http://www.brainpad.co.jp/news/2016/09/02/3454

Slide 14

Slide 14 text

技術的な部分での基本を もっと知りたいという⽅方は 14 From:  https://goo.gl/7cgzwR

Slide 15

Slide 15 text

ここまでのまとめ • TensorFlowは全世界的に⼤大⼈人気 – Googleが使ってるものが使える! – AlphaGOのインパクト! • TensorFlowに関わる⼈人もいろいろ – 研究で使ってる学⽣生、先⽣生 – 趣味の延⻑⾧長で触っているWeb系開発者 – ディープラーニングを案件として扱う分析の会社 – Android/iOS等のモバイルアプリの開発者 – 組み込み系のハードウェア寄りの開発者 – etc… 15

Slide 16

Slide 16 text

TFUGのご紹介 by  Norhiro Shimoda 16

Slide 17

Slide 17 text

What  is  TFUG  ? • 分散機械学習フレームワークであるTensorFlow のコミュニティです。 • 2016年年10⽉月に⽴立立ち上がりました。

Slide 18

Slide 18 text

Meetup • ⽉月に⼀一度度程度度のペースでミートアップイベント を開催しています。

Slide 19

Slide 19 text

Number  of  our  members 19

Slide 20

Slide 20 text

Regional  TFUG • TFUG  AIZU(2016年年末に始動) • TFUG  Utsunomiya • TFUG  KANSAI(5⽉月始動) • その他も増えるかも。。。? 20

Slide 21

Slide 21 text

TFUGの分科会 • TFUGハード部 – ハードウェアを中⼼心に話す会。異異常に熱量量が⾼高い • NN論論⽂文を肴に酒を飲む会 – ⽂文字通り論論⽂文を肴にゆる〜~く論論⽂文を読んで共有する会 • TFUGモバイル部 – モバイル(主にAndroid)上でTFを動かす話を⾏行行う 21

Slide 22

Slide 22 text

How  to  join? グループ名:TensorFlow User  Group  Tokyo イベント情報を管理理しています。 https://tfug-‐‑‒tokyo.connpass.com/ グループ名:TensorFlow User  Group 各種情報交換の場として利利⽤用されています。 https://www.facebook.com/groups/17855923 5921208/

Slide 23

Slide 23 text

TensorFlow v1.0の概要

Slide 24

Slide 24 text

V1.0を三⾏行行でまとめると… Fast Flexible Production-‐‑‒ready

Slide 25

Slide 25 text

三⾏行行まとめをもう少し詳しく • Fast – めっちゃパフォーマンス良良くなりました • Flexible – ⾼高レベルAPIが本格的に導⼊入されました • Production-‐‑‒ready – APIは安定させます • その他もいろいろあります – デバッガ(tfdbg)、多⾔言語対応など

Slide 26

Slide 26 text

Fast • パフォーマンスの⼤大幅な向上 – 64GPU上でのInception  v3の処理理が58倍⾼高速になっ た! • XLAの導⼊入 – Accelerated  Linear  Algebraの略略 – コンパイラ https://developers-‐‑‒jp.googleblog.com/2017/03/xla-‐‑‒tensorflow-‐‑‒compiled.html

Slide 27

Slide 27 text

Flexible • High  Level  APIの本格的な導⼊入 – この後詳細をお話します • Kerasとの統合 – 割と個⼈人的にはビッグニュース

Slide 28

Slide 28 text

Production  Ready • APIの安定化 – V0.11,  v0.12辺りの混乱が収束するはずJ – が、後⽅方互換性崩れてますL – が、移⾏行行ツールが提供されていますJ https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/compatibility

Slide 29

Slide 29 text

その他 • デバッガ(tfdbg) – 待望のデバッグツール – まだちゃんと触れていませんが期待⼤大 • 多⾔言語対応 – JavaとGoがExperimentalながら対応

Slide 30

Slide 30 text

High  Level  API  /  Keras

Slide 31

Slide 31 text

TensorFlowの超基本 1. ⼊入⼒力力⽤用にplaceholderを⽤用意 2. 重みやバイアス⽤用にVariableを⽤用意 3. 活性化関数を使って層を定義 4. ロス値を定義 5. 最適化の⽅方法を定義 6. セッションを定義して学習を実⾏行行

Slide 32

Slide 32 text

この後のサンプルコード • わかりやすくDNN – 隠れ層3層で全て全結合層 – ユニット数は10,20,10 • サンプルデータとしてはirisデータ – クラス数は3 – 特徴量量の次元数は4 • サンプルコード⾃自体はQiitaで解説付きで公開し ています – http://qiita.com/rindai87/items/72651c702e926 5595047 http://qiita.com/rindai87/items/72651c702e9265595047

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

⽣生TensorFlow⾟辛い問題 • APIがけっこう低レベルなため、アルゴリズム 構築に集中したい⼈人には⾮非常に敷居が⾼高い – TensorFlowのパラダイムへの理理解が必須 – そのため、学習コストが⾼高い • PlaceholderとかVariableとかSessionとか

Slide 36

Slide 36 text

従来の⽣生TF⾟辛い問題の解決法 • tf.contrib.learn – ⾼高レベルなAPI • Keras – TensorFlowのラッパー – 作者がGoogleの中の⼈人 • その他いろいろ – SlimとかTFLearnとか

Slide 37

Slide 37 text

tf.contrib.learn • V1.0以前から導⼊入されていた⾼高レベルAPI – 今も残っていて現役で使える • もともとはSkFlowという外部ライブラリ – scikit-‐‑‒learnライクにTF使いましょう、というコンセ プト • V0.8からTF本体に取り込まれて TFLearn(tf.contrib.learn)となる

Slide 38

Slide 38 text

No content

Slide 39

Slide 39 text

Keras • TensorFlowとTheanoのラッパーライブラリ • ネットワークを直感的に記述できる – ⽣生TFのようにTensorFlowの流流儀を覚える必要がない • アルゴリズム側に集中したい⼈人にとっては良良い 選択肢 • 全機能がラップされているわけではない

Slide 40

Slide 40 text

No content

Slide 41

Slide 41 text

V1.0で⾊色々整理理されはじめます • V1.0で混沌としていた⾼高レベルAPI周りの整理理 とロードマップの提⽰示が⾏行行われました – Layers – Estimator • Kerasを正式にサポート – そもそもKerasの中の⼈人はGoogler

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

Layers • モデル(ネットワーク)を定義するためのAPI 群 • Kerasのように直感的にモデルを記述していく ことができる • Variableの概念念は登場しない – Layersのオブジェクトを直接触ることも可能なので、 その場合はPlaceholderは登場する

Slide 44

Slide 44 text

Layersのイメージ Input (4dim) hidden1 hidden2 hidden3 Output (3classes) IrisデータをDNNでモデルを 作る簡単な例例で⾒見見てみる ・4次元データ ・クラスは3 ・隠れ層は3層

Slide 45

Slide 45 text

Layersのイメージ input hidden1 hidden2 hidden3 output input_̲layer=tf.reshape(features,   [-‐‑‒1,  4])

Slide 46

Slide 46 text

Layersのイメージ hidden1=tf.layers.dense( inputs=input_̲layers,   units=10, activation=tf.nn.relu) input_̲layer=tf.reshape(features,   [-‐‑‒1,  4]) input hidden1 hidden2 hidden3 output

Slide 47

Slide 47 text

Layersのイメージ hidden1=tf.layers.dense( inputs=input_̲layers,   units=10, activation=tf.nn.relu) input_̲layer=tf.reshape(features,   [-‐‑‒1,  4]) hidden2=tf.layers.dense(…) input hidden1 hidden2 hidden3 output

Slide 48

Slide 48 text

Layersのイメージ hidden1=tf.layers.dense( inputs=input_̲layers,   units=10, activation=tf.nn.relu) input_̲layer=tf.reshape(features,   [-‐‑‒1,  4]) hidden2=tf.layers.dense(…) hidden3=tf.layers.dense(…) input hidden1 hidden2 hidden3 output

Slide 49

Slide 49 text

Layersのイメージ hidden1=tf.layers.dense( inputs=input_̲layers,   units=10, activation=tf.nn.relu) input_̲layer=tf.reshape(features,   [-‐‑‒1,  4]) output_̲layer=tf.layers.dense( inputs=hidden3, units=3) hidden2=tf.layers.dense(…) hidden3=tf.layers.dense(…) input hidden1 hidden2 hidden3 output

Slide 50

Slide 50 text

Estimator • モデルを使った学習、評価、推論論のタスクを記 述するための標準的なインターフェイスを提供 するAPI群 • Scikit-‐‑‒learn経験者にはおなじみにインター フェース+α – fit():学習 – evaluate():評価 – predict():推論論 – etc…

Slide 51

Slide 51 text

Estimatorのイメージ input Model output 実際はこれだけではなくて

Slide 52

Slide 52 text

Estimatorのイメージ input Model Training 記述したモデルを使って 学習、(学習モデルの)評価、推定を⾏行行う Evaluation Prediction

Slide 53

Slide 53 text

Estimatorのイメージ input Model Training 学習、評価、推定に関わるタスクは全てEstimator内に 隠蔽して標準的なインターフェースを提供 TensorFlowの種々の概念念もEstimator内に内包 Evaluation Prediction fit() evaluate() predict() session graph etc… Estimator

Slide 54

Slide 54 text

Estimator導⼊入の良良さ • アルゴリズム実装者視点 – インターフェースが統⼀一されたため、実装の際の指 針になる • アルゴリズム利利⽤用者視点 – インターフェースが統⼀一されたため、APIを読み込ま なくても利利⽤用⽅方法が類推できる – 様々なアルゴリズム(Estimator)を基本的には同じ データで呼び出し⽅方を変えるだけで使える(はず) 54

Slide 55

Slide 55 text

Canned  Estimator • Layers,  Estimatorのお陰で、モデルに対して標 準的なインターフェースが提供されている状態 になる • これを利利⽤用して、様々なEstimator(つまりア ルゴリズム)を提供していく – インターフェースが共通化されているので、同⼀一 データに対して様々なアルゴリズムを簡単に試せる ようになる • 要は、今後たくさんのアルゴリズムが TensorFlow上で実装、提供されてきます、とい うことです – おっとこれはscikit-‐‑‒learnな感じですね、と思ったあ なた、正解です

Slide 56

Slide 56 text

Kerasの正式サポート • LayersをKerasの層を定義するレイヤー(Dense など)と互換性のあるものとする • EstimatorとKerasでの互換性を担保する設計 • これまで通りTFをラップしたKeras • tf.kerasの導⼊入により、TF内部でkerasのコードが 動くようになる? → なります

Slide 57

Slide 57 text

57

Slide 58

Slide 58 text

Keras正式サポートの恩恵 • 今までKerasから使えていなかった各種TFの機能 が使えるようになる – 分散処理理による学習 – CloudMLでの実⾏行行 • これまではCloudMLのプロビジョニングの段階で Kerasをpip  installするというハックで解決してい た • なお、この解決⽅方法を使ってもKerasからはGCSに 置いているデータを読みにいけないという問題が 残っている – TensorFlow Serving – etc…

Slide 59

Slide 59 text

No content

Slide 60

Slide 60 text

60 Thank  You!