Slide 1

Slide 1 text

FindYourCandyにおける 転移学習の話 by  Norihiro Shimdoa

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

特別ゲストがきたので I/Oの話はスキップします Google  I/O報告会で話をして 資料料は公開済みです

Slide 4

Slide 4 text

URL:  https://speakerdeck.com/rindai87/o-‐‑‒bao-‐‑‒gao-‐‑‒hui-‐‑‒ml-‐‑‒dan-‐‑‒dang Google  I/O  報告会での資料料は公開済み

Slide 5

Slide 5 text

体験ブースで展⽰示中のコイツの話 FindYourCandy

Slide 6

Slide 6 text

TFUG#5での発表 URL:  https://sho-‐‑‒soar.github.io/slides/tfug5/

Slide 7

Slide 7 text

URL:  https://sho-‐‑‒soar.github.io/slides/tfug5/#/6 この説明で理理解しろ だなんて無茶茶だよな

Slide 8

Slide 8 text

本⽇日の話 転移学習(画像)

Slide 9

Slide 9 text

画像認識識をしたい時 • 深層学習が精度度⾼高そうだしやりたい • 深層学習で画像処理理といえばCNN • Kerasを使うと簡単にできるらしい

Slide 10

Slide 10 text

Keras • TensorFlowをバックエンドに持つラッパーライブラリ – データサイエンティストには⽣生TFより⼈人気な印象

Slide 11

Slide 11 text

KerasでCNN

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

KerasでCNN フィルタサイズ はコレで良良い? プーリングのサイズは? 全結合層のユニット サイズは? ドロップアウトする? そもそも何層にする?

Slide 14

Slide 14 text

⼀一から取り組むCNNは初⼼心者に優しくない • パラメータ多すぎ問題 • うまくいったらいいけど、いかない時すごい⼤大変

Slide 15

Slide 15 text

学習済みモデル すでに学習された 精度度の良良いモデル

Slide 16

Slide 16 text

学習済みモデルを使う • オープンソースでけっこう公開されています • 例例えばGoogleによって公開されているInception  V3 URL:https://github.com/tensorflow/models/tree/master/inception

Slide 17

Slide 17 text

Kerasで学習済みモデルを使う この2⾏行行でinception  v3 が使えるようになる! この2⾏行行でinception  v3 が使えるようになる!

Slide 18

Slide 18 text

学習済みモデルの問題 • 学習してないものには弱い、というか対応できない • Kerasの学習済みモデルはコンテストで使われたものなの で、1000クラスを分類するようにできている – つまり、1000クラスに⼊入っていなければ、まともに分類でき ない • 何とかうまく学習済みモデルを使いたい – 最後だけちょろっと学習させたらけっこう良良いという – それが転移学習や!

Slide 19

Slide 19 text

転移学習 学習済みモデルを使いつつ 独⾃自の概念念も学習させる

Slide 20

Slide 20 text

転移学習イメージ • 追加で適当に層を追加する • 適当なので、何層つけたら良良いかとかはまあやっぱり分 からない 端っこのここ(出⼒力力層)を 取っ払ってネットワークを 追加する

Slide 21

Slide 21 text

URL:  https://sho-‐‑‒soar.github.io/slides/tfug5/#/6 追加したネットワーク (ただし、けっこう適当)

Slide 22

Slide 22 text

転移学習その他 • Fine-‐‑‒tuneっていうのもあります • 層の⼀一部だけ学習させるというやつ 出⼒力力層近くの ⼀一部だけ学習させる その他はそのまま

Slide 23

Slide 23 text

FindYourCandyの場合 CloudMLを使っての 転移学習の実現

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

FindYourCandyの場合 • 1⽉月後半からの⼀一ヶ⽉月程度度の開発 – TensorFlow v1.0が出る前 • つまりKerasの統合が発表される前 – Cloud  MLはv0.11,  v0.12が混在して割当てられる • 発⽣生した問題あれこれ – TFのバージョン違いによるモデルのフォーマット違い – そもそも⽣生TF使っても、Protobufのバージョンによって InceptionV3がうまく読み込めない! – etc…

Slide 26

Slide 26 text

思いつきました • 1つのネットワークで全部転移学習させる必要はない • アイデア:ネットワークを分割する – ネットワーク1:最終層を取ったInception-‐‑‒V3 • ⼊入⼒力力:画像、出⼒力力:ネットワークを通った後の特徴量量 • 実⾏行行環境:ローカルのTensorFlow – ネットワーク2:中間層2のFull-‐‑‒connectedなNN • ⼊入⼒力力:Inception-‐‑‒V3を通った特徴量量、出⼒力力:ラベルに属する確率率率 • 実⾏行行環境:Cloud  ML  Engine

Slide 27

Slide 27 text

ネットワーク1 ネットワーク2

Slide 28

Slide 28 text

ちゃんとできた! • それなりにいい感じに動いている! – デモなので定性的な評価 • クラウドに画像データを持っていかなくて良良い! – 帯域の節約になる • Cloud  ML  Engineはクラスタの⽴立立ち上がりが読めない – 早い時もあれば遅い時もある

Slide 29

Slide 29 text

まとめ • Kerasを使うとモデル作るのはけっこう簡単 • ただし、パラメータ多すぎるし案外何やったらいいかわ からなくなる • 学習済みモデルを使おう!転移学習をやってみよう! • FindYourCandyでも転移学習は活躍しています

Slide 30

Slide 30 text

Thanks!!