Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
GCPではじめる
かんたん機械学習
A Practical Guide to Machine Learning on GCP
GDG DevFest
Tokyo 2017
Hi there!
● 吉川隼人 @hayatoy
● APAC向けに色々するR&D
● 参加コミュニティ
○ TFUG, GCPUG, GDG
● 最近
GCPと機械学習に関する本を
執筆してます。
Agenda
● 機械学習(ML)ってなんだっけ?
● GCPのML系API
● ML API ✖ GAE ✖ Firebase
● Datalab ✖ BigQuery
● GAE ✖ ML Engine (TensorFlow)
機械学習って
なんだっけ?
機械学習とは
ただの関数です
y=f(x)
f(x)x y
機械学習でやりたいことって?
入力 x0 入力 x1 出力 y
180.1 75.2 ❌
160.4 70.3 ⭕
155.3 83.8 ⭕
177.2 68.6 ❌
170.2 62.5 ??
機械学習でやりたいことって?
入力 x0 入力 x1 出力 y
180.1 75.2 ❌
160.4 70.3 ⭕
155.3 83.8 ⭕
177.2 68.6 ❌
170.2 62.5 ??
既知の入力と出力
機械学習でやりたいことって?
入力 x0 入力 x1 出力 y
180.1 75.2 ❌
160.4 70.3 ⭕
155.3 83.8 ⭕
177.2 68.6 ❌
170.2 62.5 ??
既知の入力と出力
出力が未知
機械学習でやりたいことって?
入力 x0 入力 x1 出力 y
180.1 75.2 ❌
160.4 70.3 ⭕
155.3 83.8 ⭕
177.2 68.6 ❌
170.2 62.5 ??
既知の入力と出力
入力があったとき、未知の出力を...
関数に当てはめると・・
入力 x0 入力 x1 出力 y
180.1 75.2 ❌
160.4 70.3 ⭕
155.3 83.8 ⭕
177.2 68.6 ❌
170.2 62.5 ??
出力が未知の入力
f(x) ⭕ or ❌
推論
関数に当てはめると・・
入力 x0 入力 x1 出力 y
180.1 75.2 ❌
160.4 70.3 ⭕
155.3 83.8 ⭕
177.2 68.6 ❌
170.2 62.5 ??
既知の入力と出力
出力が未知の入力
f(x) ⭕ or...
機械学習は何のパラメータを変えているの?身長
体重
メタボの例
機械学習は何のパラメータを変えているの?身長
体重
メタボの例
この辺に境界線がありそう・・
既知のデータから
境界線(のパラメータ)を求める
機械学習 vs ルールベースアルゴリズム
ルールベース BMI計算して、しきい値で分岐した方が早いよね。
機械学習 既知データから自動で判別式を算出
今回の例なら、ルールベースが正解。
だけど入力が2種類だから2次元でプロットできたけど、100...
ニューラルネットワーク
境界線を引くのは同じ。
層やニューロンの数を増やすと境界線がどんどん複雑になっていく。
過学習
精度の高い結果を得るには
● 学習するデータ数
● モデルの設計
● 演算能力
結構大変!
GCP!
GCPと機械学習
Machine Learning API
学習済みモデルで誰でも簡単に高精度な結果を
得ることができる
Serverless Machine Learning
自分でモデルを作るときも簡単に学習と推論ができる
環境の使い分け
Cloud Machine
Learning
Cloud
Vision API
Cloud
Speech API
Cloud Natural
Language API
Cloud
Translation
API
Cloud Vi...
サーバーレスML
Cloud Machine
Learning
Cloud
Vision API
Cloud
Speech API
Cloud Natural
Language API
Cloud
Translation
API
Cloud V...
GCPのML系API
Cloud Vision API
Label
Detection
Landmark
Detection
OCR
Logo
Detection
Face
Detection
Explicit Content
Detection
ラベル検出
ラベル検出
from google.cloud import vision
client = vision.Client()
image = client.image(filename='seagull.jpg')
labels = image...
Cloud Natural Language API
感情分析
感情分析
from google.cloud import language
client = language.Client()
text = u"GCPが凄すぎて感動の渦"
document = client.document_from_t...
Demo
感情分析でゲーム
ルールの説明
● AチームとBチームに別れます
● それぞれポジティブっぽい文章を
投稿します
● よりポジティブな文章で埋めた
チームが勝ち!
スクリーン
Aチーム Bチーム
Had fun?
https://github.com/hayatoy/nl-bubble
ML API x GAE
x Firebase
Web App
デモアプリのアーキテクチャ
Front-end Web App
App Engine
Firebase
Realtime DB
Cloud Natural
Language API
Front-end Web App
App E...
GAEからFirebase DBへインサート
url = 'https://[project].firebaseio.com/bubbles.json'
payload = json.dumps({'message': message,
'te...
JavascriptでFirebase DBの変更をリッスンする
var database = firebase.database();
var bubblesRef = firebase.database().ref('bubbles');
...
Firebase簡単。
他システムとの連携は
GAEやCloud Functionsを使うと
いいかも。
Datalab x
BigQuery
Cloud Datalab?
● Jupyter Notebookのクラウド版
● ブラウザ上でインタラクティブに
PythonコードやBigQueryのクエリが走る
Demo
Web App
デモアプリのアーキテクチャ
Front-end Web App
App Engine
Firebase
Realtime DB
Cloud Natural
Language API
Front-end Web App
App E...
Datalab上でBigQueryクエリ実行
%bq query
SELECT
team,
SUM(score) as total_score
FROM
bubbles.devfest2017
GROUP BY
1
ORDER BY
2 DES...
クエリ結果をチャートにプロット
%bq query --name xxx
SELECT
...
クエリに名前を付ける
%chart bars --data xxx
{key: value..}
これだけ。
チャートオプション
チャートはGoog...
PandasからBigQueryクエリ実行
import pandas as pd
query = "SELECT * FROM ..."
df = pd.read_gbq(project_id='project', query=query)
...
GAE x
ML Engine
(TensorFlow)
Cloud Machine Learning Engine?
● TensorFlowのフルマネージドサービス
● 学習・推論のジョブが流せる
● APIで他のシステムと連携ができる
Demo
リアルGCPUG
こんなモデルを作った。
pix2pix
Variableが200MBあって重い
重いモデルをどうやって使う?
● モバイルアプリに積むのは辛い
● GAEではTensorFlow動かない
● 自分でServeするのは面倒…
そうだML Engine!
GAEからOnline Prediction APIを使う
credentials = GoogleCredentials.get_application_default()
ml = discovery.build("ml", "v1", c...
ML Engineの詳しい使い方
https://qiita.com/hayatoy
GCPと機械学習をもっと学びたい!
来月いい本が出るよ!
Thank you!
GDG DevFest
Tokyo 2017
Upcoming SlideShare
Loading in …5
×

A practical guide to machine learning on GCP

1,509 views

Published on

a practical guide to machine learning on Google Cloud Platform

Published in: Technology

A practical guide to machine learning on GCP

  1. 1. GCPではじめる かんたん機械学習 A Practical Guide to Machine Learning on GCP GDG DevFest Tokyo 2017
  2. 2. Hi there! ● 吉川隼人 @hayatoy ● APAC向けに色々するR&D ● 参加コミュニティ ○ TFUG, GCPUG, GDG ● 最近 GCPと機械学習に関する本を 執筆してます。
  3. 3. Agenda ● 機械学習(ML)ってなんだっけ? ● GCPのML系API ● ML API ✖ GAE ✖ Firebase ● Datalab ✖ BigQuery ● GAE ✖ ML Engine (TensorFlow)
  4. 4. 機械学習って なんだっけ?
  5. 5. 機械学習とは
  6. 6. ただの関数です
  7. 7. y=f(x) f(x)x y
  8. 8. 機械学習でやりたいことって? 入力 x0 入力 x1 出力 y 180.1 75.2 ❌ 160.4 70.3 ⭕ 155.3 83.8 ⭕ 177.2 68.6 ❌ 170.2 62.5 ??
  9. 9. 機械学習でやりたいことって? 入力 x0 入力 x1 出力 y 180.1 75.2 ❌ 160.4 70.3 ⭕ 155.3 83.8 ⭕ 177.2 68.6 ❌ 170.2 62.5 ?? 既知の入力と出力
  10. 10. 機械学習でやりたいことって? 入力 x0 入力 x1 出力 y 180.1 75.2 ❌ 160.4 70.3 ⭕ 155.3 83.8 ⭕ 177.2 68.6 ❌ 170.2 62.5 ?? 既知の入力と出力 出力が未知
  11. 11. 機械学習でやりたいことって? 入力 x0 入力 x1 出力 y 180.1 75.2 ❌ 160.4 70.3 ⭕ 155.3 83.8 ⭕ 177.2 68.6 ❌ 170.2 62.5 ?? 既知の入力と出力 入力があったとき、未知の出力を知りたい(推論) 出力が未知
  12. 12. 関数に当てはめると・・ 入力 x0 入力 x1 出力 y 180.1 75.2 ❌ 160.4 70.3 ⭕ 155.3 83.8 ⭕ 177.2 68.6 ❌ 170.2 62.5 ?? 出力が未知の入力 f(x) ⭕ or ❌ 推論
  13. 13. 関数に当てはめると・・ 入力 x0 入力 x1 出力 y 180.1 75.2 ❌ 160.4 70.3 ⭕ 155.3 83.8 ⭕ 177.2 68.6 ❌ 170.2 62.5 ?? 既知の入力と出力 出力が未知の入力 f(x) ⭕ or ❌ 学習 推論
  14. 14. 機械学習は何のパラメータを変えているの?身長 体重 メタボの例
  15. 15. 機械学習は何のパラメータを変えているの?身長 体重 メタボの例 この辺に境界線がありそう・・ 既知のデータから 境界線(のパラメータ)を求める
  16. 16. 機械学習 vs ルールベースアルゴリズム ルールベース BMI計算して、しきい値で分岐した方が早いよね。 機械学習 既知データから自動で判別式を算出 今回の例なら、ルールベースが正解。 だけど入力が2種類だから2次元でプロットできたけど、1000種 類あったら? 現実のデータはそんな簡単にルールがわからない!
  17. 17. ニューラルネットワーク 境界線を引くのは同じ。 層やニューロンの数を増やすと境界線がどんどん複雑になっていく。 過学習
  18. 18. 精度の高い結果を得るには ● 学習するデータ数 ● モデルの設計 ● 演算能力 結構大変!
  19. 19. GCP!
  20. 20. GCPと機械学習 Machine Learning API 学習済みモデルで誰でも簡単に高精度な結果を 得ることができる Serverless Machine Learning 自分でモデルを作るときも簡単に学習と推論ができる
  21. 21. 環境の使い分け Cloud Machine Learning Cloud Vision API Cloud Speech API Cloud Natural Language API Cloud Translation API Cloud Video Intelligence API 学習が不要 学習が必要 モデル作成不要 モデル作成必要 ML系API サーバーレスML
  22. 22. サーバーレスML Cloud Machine Learning Cloud Vision API Cloud Speech API Cloud Natural Language API Cloud Translation API Cloud Video Intelligence API 学習が不要 学習が必要 モデル作成不要 モデル作成必要 ML系API どれか1つではなく 使い分け&連携するのが クール!
  23. 23. GCPのML系API
  24. 24. Cloud Vision API Label Detection Landmark Detection OCR Logo Detection Face Detection Explicit Content Detection
  25. 25. ラベル検出
  26. 26. ラベル検出 from google.cloud import vision client = vision.Client() image = client.image(filename='seagull.jpg') labels = image.detect_labels()
  27. 27. Cloud Natural Language API
  28. 28. 感情分析
  29. 29. 感情分析 from google.cloud import language client = language.Client() text = u"GCPが凄すぎて感動の渦" document = client.document_from_text(text) sentiment = document.analyze_sentiment()
  30. 30. Demo
  31. 31. 感情分析でゲーム ルールの説明 ● AチームとBチームに別れます ● それぞれポジティブっぽい文章を 投稿します ● よりポジティブな文章で埋めた チームが勝ち! スクリーン Aチーム Bチーム
  32. 32. Had fun? https://github.com/hayatoy/nl-bubble
  33. 33. ML API x GAE x Firebase
  34. 34. Web App デモアプリのアーキテクチャ Front-end Web App App Engine Firebase Realtime DB Cloud Natural Language API Front-end Web App App Engine Insert rows via REST API Get sentiment analysis result 入力 結果表示
  35. 35. GAEからFirebase DBへインサート url = 'https://[project].firebaseio.com/bubbles.json' payload = json.dumps({'message': message, 'team': team, 'score': score, 'time':{'.sv':'timestamp'}}) urlfetch.fetch(url=url, method=urlfetch.POST, payload=payload)
  36. 36. JavascriptでFirebase DBの変更をリッスンする var database = firebase.database(); var bubblesRef = firebase.database().ref('bubbles'); bubblesRef.on('child_added', function(snapshot) { // do something.. });
  37. 37. Firebase簡単。 他システムとの連携は GAEやCloud Functionsを使うと いいかも。
  38. 38. Datalab x BigQuery
  39. 39. Cloud Datalab? ● Jupyter Notebookのクラウド版 ● ブラウザ上でインタラクティブに PythonコードやBigQueryのクエリが走る
  40. 40. Demo
  41. 41. Web App デモアプリのアーキテクチャ Front-end Web App App Engine Firebase Realtime DB Cloud Natural Language API Front-end Web App App Engine Insert rows via REST API Get sentiment analysis result BigQuery Cloud Datalab Insert rows via REST API
  42. 42. Datalab上でBigQueryクエリ実行 %bq query SELECT team, SUM(score) as total_score FROM bubbles.devfest2017 GROUP BY 1 ORDER BY 2 DESC セルの先頭にこれを書くだけ。 あとは普通にクエリを書ける。
  43. 43. クエリ結果をチャートにプロット %bq query --name xxx SELECT ... クエリに名前を付ける %chart bars --data xxx {key: value..} これだけ。 チャートオプション チャートはGoogle Chartsを利用 大体何でもできる
  44. 44. PandasからBigQueryクエリ実行 import pandas as pd query = "SELECT * FROM ..." df = pd.read_gbq(project_id='project', query=query) そのままDataFrame形式で扱えるので便利! Pandas v0.20.0からread_gbqは別パッケージになったので注意 pip install pandas-gbq でインストールしてね。
  45. 45. GAE x ML Engine (TensorFlow)
  46. 46. Cloud Machine Learning Engine? ● TensorFlowのフルマネージドサービス ● 学習・推論のジョブが流せる ● APIで他のシステムと連携ができる
  47. 47. Demo
  48. 48. リアルGCPUG こんなモデルを作った。
  49. 49. pix2pix Variableが200MBあって重い
  50. 50. 重いモデルをどうやって使う? ● モバイルアプリに積むのは辛い ● GAEではTensorFlow動かない ● 自分でServeするのは面倒… そうだML Engine!
  51. 51. GAEからOnline Prediction APIを使う credentials = GoogleCredentials.get_application_default() ml = discovery.build("ml", "v1", credentials=credentials) input_instance = dict(input=input_data, key="0") request_body = {"instances": [input_instance]} job_req = ml.projects().predict(name=[model], body=request_body) response = job_req.execute()
  52. 52. ML Engineの詳しい使い方 https://qiita.com/hayatoy GCPと機械学習をもっと学びたい! 来月いい本が出るよ!
  53. 53. Thank you! GDG DevFest Tokyo 2017

×