SlideShare a Scribd company logo
1 of 72
Download to read offline
TensorFlow を使った
機械学習ことはじめ
2016-08-27
上野⼭
Summar Edition
⾃⼰紹介
„ 元 電機メーカ勤務の
似⾮ソフト屋
„ もともと組込み
à 画像処理
à データ解析 と変遷し
à Deep	Learning の世界へ
2
上野⼭ 徹
うえのやま とおる
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』
We‘re	Hiring!
0. 機械学習とは?
3
機械学習とは?
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 4
数値・⽂字・画像・⾳声など多種多様な
データの中から,規則性・パターン・知
識を発⾒し,現状を把握や将来の予測を
したりする
※朱鷺の杜(”機械学習”)より引⽤
機械学習を使わない場合:
すでに分かっている規則性(e.g.	運動⽅程式)
を使って,現状把握や将来を予測
教師あり/なし
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 5
教師あり学習 教師なし学習
※ その他,半教師あり学習や強化学習 と呼ばれるものもあります
正解がセットになったデータ
から規則性やパターンを⾒つける
正解が含まれないデータから
規則性やパターンを⾒つける
来店頻度
購買⾦額
⼊⼒
データ
=			7
=			7
=			7
=			9
正解
データ
離れて
いる
が「7」の
パターンっぽい
回帰 / 識別
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 6
回帰 識別(判別)
連続的な値
を予測する
とびとびな値(離散値)
を予測する
e.g. 家賃の予測 e.g. 広告メール判定
How
much?
…
DISCOUNT
…
…
CLICK	NOW
…
…
meeting
…
Spam?
or	Not?
難しい規則性を機械学習するには
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 7
学習
アルゴ
リズム
効率的な
計算環境
⼤規模
データ
が提供してくれる
1. TensorFlow とは
8
TensorFlow とは
„ Google社のMachine	Intelligence
研究所が開発した数値計算ライブラリ
„ Deep Learning をはじめとする 機械学習 の
研究や活⽤にGoogle社内で⽤いられている
Ø 2011年から使⽤していたDistBeliefを強化
„ 複数のCPU/GPUや、複数のマシンに分散して
実⾏できる。
„ C++とPython 2or3 APIを持っている
„ 2015年11⽉にオープンソース(Apache2.0)公開
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 9
データフローグラフ
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 10
ß 掛け算
ß ⾜し算
ß 関数
テンソル が データフローグラフ 上を
流れるように計算処理している
テンソル à
(多次元配列)
𝐶 =	… (𝑅𝑒𝐿𝑈 𝑏 + 𝑊𝑋 )
à 数式で表現すると、
TensorFlow
巨⼤なデータにも使える
⾏列計算ライブラリ
ビッグデータの
機械学習に使える!出典)TensorFlow:	Large-Scale	Machine	Learning	
on	Heterogeneous	Distributed	Systems,	Google,	2015
TensorBoard
„ データフローグラフのネットワーク構造や
学習経過をWeb上で確認できる
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 11
詳細は Web へ
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 12
https://speakerdeck.com/kazunori279/cloud-vision-api-and-tensorflow
例えば、佐藤さん@Google の資料など
2. TensorFlow を使った
機械学習
13
さっそく問題です
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 14
たかしくんは⼋百屋へお使いに⾏きました。
リンゴ1個とミカン3個を買うと190円,
リンゴ3個とミカン1個を買うと330円
するようです。
リンゴ2個とミカン4個を買うと
いくらになるでしょうか?
例題1
円
式で表すと...
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 15
円 × 1 + 円 × 3 = 190	円
円 × 3 + 円 × 1 = 330	円
円 × 2 + 円 × 4 = ?
円
回答
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 16
円 × 1 + 円 × 3 = 190	円
円 × 3 + 円 × 1 = 330	円
円 × 2 + 円 × 4 = ?				
100 30
100 30
100 30
円
回答
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 17
円 × 1 + 円 × 3 = 190	円
円 × 3 + 円 × 1 = 330	円
円 × 2 + 円 × 4 = 320
100 30
100 30
100 30
円
これも機械学習(回帰)の問題です!
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 18
円 × 1 + 円 × 3 = 190	円
円 × 3 + 円 × 1 = 330	円
円 × 2 + 円 × 4 = 320	
100 30
100 30
100 30
学習
予測
実績データからパラメータを推定
パラメータを使って結果を予測
実は店のおやじは気まぐれでした
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 19
円
円 × 1 + 円 × 3 = 190	円
円 × 3 + 円 × 1 = 330	円
円 × 2 + 円 × 4 = ?				
円 × 5 + 円 × 7 = 660	円
実は店のおやじは気まぐれでした
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 20
円
円 × 1 + 円 × 3 = 190	円
円 × 3 + 円 × 1 = 330	円
円 × 2 + 円 × 4 = ?				
円 × 5 + 円 × 7 = 660	円
100 30
100 30
100 30
710
どうやってパラメータ(単価)を⾒つけるか?
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 21
考え⽅
合計⾦額の誤差が⼩さくなるような
単価を採⽤しよう!
円 × 1 + 円 × 3 à 40円 - 190	円
円 × 3 + 円 × 1 à 40円 - 330	円
円 × 5 + 円 × 7 à 120円 - 660	円
10 10
10 10
10 10
合計⾦額
(正解)
合計⾦額
(予測)
(2乗)誤差
à 22500
à 84100
à 291600
( )2
( )2
( )2
平均 132733
すべての組合せを計算
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 22
ミカン
0 10 20 30 40 50 60 70 80 90 100
リンゴ
0 193533 158700 127800 100833 77800 58700 43533 32300 25000 21633 22200
10 164833 132733 104567 80333 60033 43667 31233 22733 18167 17533 20833
20 138467 109100 83667 62167 44600 30967 21267 15500 13667 15767 21800
30 114433 87800 65100 46333 31500 20600 13633 10600 11500 16333 25100
40 92733 68833 48867 32833 20733 12567 8333 8033 11667 19233 30733
50 73367 52200 34967 21667 12300 6867 5367 7800 14167 24467 38700
60 56333 37900 23400 12833 6200 3500 4733 9900 19000 32033 49000
70 41633 25933 14167 6333 2433 2467 6433 14333 26167 41933 61633
80 29267 16300 7267 2167 1000 3767 10467 21100 35667 54167 76600
90 19233 9000 2700 333 1900 7400 16833 30200 47500 68733 93900
100 11533 4033 467 833 5133 13367 25533 41633 61667 85633 113533
110 6167 1400 567 3667 10700 21667 36567 55400 78167 104867 135500
120 3133 1100 3000 8833 18600 32300 49933 71500 97000 126433 159800
130 2433 3133 7767 16333 28833 45267 65633 89933 118167 150333 186433
140 4067 7500 14867 26167 41400 60567 83667 110700 141667 176567 215400
150 8033 14200 24300 38333 56300 78200 104033 133800 167500 205133 246700
近そうな値は⾒つかるけど、計算は⼤変!
(もし単価が0円〜1万円で、10種類買ったら?)
よく⾒ると、徐々に変化している
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 23
ミカン
0 10 20 30 40 50 60 70 80 90 100
リンゴ
0 193533 158700 127800 100833 77800 58700 43533 32300 25000 21633 22200
10 164833 132733 104567 80333 60033 43667 31233 22733 18167 17533 20833
20 138467 109100 83667 62167 44600 30967 21267 15500 13667 15767 21800
30 114433 87800 65100 46333 31500 20600 13633 10600 11500 16333 25100
40 92733 68833 48867 32833 20733 12567 8333 8033 11667 19233 30733
50 73367 52200 34967 21667 12300 6867 5367 7800 14167 24467 38700
60 56333 37900 23400 12833 6200 3500 4733 9900 19000 32033 49000
70 41633 25933 14167 6333 2433 2467 6433 14333 26167 41933 61633
80 29267 16300 7267 2167 1000 3767 10467 21100 35667 54167 76600
90 19233 9000 2700 333 1900 7400 16833 30200 47500 68733 93900
100 11533 4033 467 833 5133 13367 25533 41633 61667 85633 113533
110 6167 1400 567 3667 10700 21667 36567 55400 78167 104867 135500
120 3133 1100 3000 8833 18600 32300 49933 71500 97000 126433 159800
130 2433 3133 7767 16333 28833 45267 65633 89933 118167 150333 186433
140 4067 7500 14867 26167 41400 60567 83667 110700 141667 176567 215400
150 8033 14200 24300 38333 56300 78200 104033 133800 167500 205133 246700
ミカン 0
ミカン 40
ミカン 800
50000
100000
150000
200000
250000
0 20 40 60 80
100120 140
リンゴ
最⼩値
⼩さくなる⽅向へたどっていくと...
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 24
ミカン
0 10 20 30 40 50 60 70 80 90 100
リンゴ
0 193533
10 132733
20 83667
30 46333
40 20733
50 6867
60 3500
70 2467
80 7267 2167 1000
90 2700 333 1900
100 467 833 5133
110
120
130
140
150
ミカン 0
ミカン 40
ミカン 800
50000
100000
150000
200000
250000
0 20 40 60 80
100120 140
リンゴ
最⼩値
少ない計算で早く最⼩値に!
※最⼩(⼤)値を求める処理="最適化"
気まぐれおやじのこころを読む
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 25
円
円 × 1 + 円 × 3 ≒ 190	円
円 × 3 + 円 × 1 ≒ 330	円
円 × 2 + 円 × 4 ≒
円 × 5 + 円 × 7 ≒ 660	円
90 30
90 30
90 30
90 30 310
650
300
180
ここまでの振り返り
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 26
TensorFlowでも同じように書いていく
学
習
予
測
①予測式(モデル)をつくる
②誤差を計算する
③誤差を最⼩にする点を探す(最適化)
予測式&学習済パラメタで予測
TensorFlow の処理の流れ
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 27
# coding: utf-8
# 必要なモジュールを読み込む
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
# 1. 予測式(モデル)を記述する
# ⼊⼒変数と出⼒変数のプレースホルダを⽣成
x = tf.placeholder(tf.float32, shape=(None, 2), name="x")
y_ = tf.placeholder(tf.float32, shape=(None, 1), name="y")
# モデルパラメータ
a = tf.Variable(tf.zeros((2, 1)), name="a")
# モデル式
y = tf.matmul(x, a)
# 2. 学習に必要な関数を定義する
# 誤差関数(loss)
loss = tf.reduce_mean(tf.square(y_ - y))
# 最適化⼿段を選ぶ(最急降下法)
train_step = tf.train.GradientDescentOptimizer(0.02).minimize(loss)
# 3. 実際に学習処理を実⾏する
# (1) 訓練データを⽣成する
train_x = np.array([[1., 3.], [3., 1.], [5., 7.]])
train_y = np.array([190., 330., 660.]).reshape(3, 1)
print "x=", train_x
print "y=", train_y
# (2) セッションを準備し,変数を初期化
sess = tf.Session()
init = tf.initialize_all_variables()
sess.run(init)
# (3) 最急勾配法でパラメータ更新 (100回更新する)
for i in range(100):
_, l, a_ = sess.run([train_step, loss, a], feed_dict={x: train_x, y_: train_y})
if (i + 1) % 10 == 0:
print "step=%3d, a1=%6.2f, a2=%6.2f, loss=%.2f" % (i + 1, a_[0], a_[1], l)
# (4) 学習結果を出⼒
est_a = sess.run(a, feed_dict={x: train_x, y_: train_y})
print "Estimated: a1=%6.2f, a2=%6.2f" % (est_a[0], est_a[1])
# 4. 新しいデータに対して予測する
# (1) 新しいデータを⽤意
new_x = np.array([2., 4.]).reshape(1, 2)
# (2) 学習結果をつかって,予測実施
new_y = sess.run(y, feed_dict={x: new_x})
print new_y
# 5. 後⽚付け
# セッションを閉じる
sess.close()
0.	ライブラリをロード
1.	予測式(モデル)を記述
2.	誤差関数と最適化⼿法を記述
3.	訓練データを作成(or読込)し
学習実⾏
4.	予測
5.	後⽚付け
0. ライブラリをロード
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 28
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
TensorFlow のほか
⾼速な配列演算パッケージであるNumPyや
プロットしたい場合はmatplotlib.pyplotなど
使⽤するライブラリをロードする
1. 予測式(モデル)を記述
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 29
# ⼊⼒変数と出⼒変数のプレースホルダを⽣成
x = tf.placeholder(tf.float32, shape=(None, 2), name="x")
y_ = tf.placeholder(tf.float32, shape=(None, 1), name="y")
# モデルパラメータ
a = tf.Variable(tf.zeros((2, 1)), name="a")
# モデル式
y = tf.matmul(x, a)
⼊出⼒変数 à placeholder,	パラメータ à Variable
・値を⼊れる"箱"を作成
(注意)shape	=	(訓練データの数,	次元数)
※"訓練データの数"は None	にすると可変⻑扱い
・予測式(モデル)を記述
線形回帰(線形重回帰)モデル
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 30
⼊⼒層 出⼒層
𝑦
𝑥1
𝑥2
× 𝑎1
𝑦 = 𝑎1 𝑥1 + 𝑎2 𝑥2
× 𝑎2
リンゴの数 à
ミカンの数 à
ß合計⾦額
リンゴ
の単価
↓
↑
ミカン
の単価
1. 予測式(モデル)を記述
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 31
# ⼊⼒変数と出⼒変数のプレースホルダを⽣成
x = tf.placeholder(tf.float32, shape=(None, 2), name="x")
y_ = tf.placeholder(tf.float32, shape=(None, 1), name="y")
# モデルパラメータ
a = tf.Variable(tf.zeros((2, 1)), name="a")
# モデル式
y = tf.matmul(x, a)
⼊出⼒変数 à placeholder,	パラメータ à Variable
・値を⼊れる"箱"を作成
(注意)shape	=	(訓練データの数,	次元数)
※"訓練データの数"は None	にすると可変⻑扱い
・予測式(モデル)を記述
y x a
190
330
660
1				3
3				1
5				7
2.誤差関数と最適化⼿法を記述
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 32
# 誤差関数(loss)
loss = tf.reduce_mean(tf.square(y_ - y))
# 最適化⼿段を選ぶ(最急降下法)
train_step = tf.train.GradientDescentOptimizer(0.02).minimize(loss)
・誤差関数を記述
ふつうの回帰問題 à 平均⼆乗誤差
1
𝑁
6 𝑦7 − 𝑦79 2
:
7
・最適化⼿法を選ぶ
・⼊⾨ à 最急降下法(勾配降下法)	GradientDescent〜
※どれを選ぶかで学習(最適化)の速さが変わる
・引数に適度な"学習率"を指定する
※⼤きすぎると学習失敗(発散),	⼩さすぎると学習が遅い
3. 訓練データを作成(or読込)し,
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 33
train_x = np.array([[1., 3.], [3., 1.], [5., 7.]])
train_y = np.array([190., 330., 660.]).reshape(3, 1)
print "x=", train_x
print "y=", train_y
※予測式で定義した形状(shape)に合わせること
※実⽤場⾯では,外部データを(ファイルやSQLなどから)
読みとって2次元配列に整形する。
190
330
660
1				3
3				1
5				7
train_x train_y
学習実⾏
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 34
# (2) セッションを準備し,変数を初期化
sess = tf.Session()
init = tf.initialize_all_variables()
sess.run(init)
# (3) 最急勾配法でパラメータ更新 (100回更新する)
for i in range(100):
_, l, a_ = sess.run([train_step, loss, a], feed_dict={x: train_x, y_: train_y})
if (i + 1) % 10 == 0:
print "step=%3d, a1=%6.2f, a2=%6.2f, loss=%.2f" % (i + 1, a_[0], a_[1], l)
# (4) 学習結果を出⼒
est_a = sess.run(a, feed_dict={x: train_x, y_: train_y})
print "Estimated: a1=%6.2f, a2=%6.2f" % (est_a[0], est_a[1])
おまじない(初期化)
sess.run (	[出⼒,	...],	feed_dict={⼊⼒リスト}	)
sess.run を呼び出すことで、"出⼒"に指定した
データフローグラフが計算される
※ 学習を回すには、先ほど作成した最適化⼿段(train_step)を
出⼒値に指定して sess.run を呼び出す。
参考: 実⾏結果
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 35
うまく学習できると...
step= 10, a1= 70.35, a2= 46.23, loss=2189.06
step= 20, a1= 83.06, a2= 36.70, loss=771.90
step= 30, a1= 90.13, a2= 31.41, loss=334.34
step= 40, a1= 94.05, a2= 28.47, loss=199.24
step= 50, a1= 96.23, a2= 26.84, loss=157.52
step= 60, a1= 97.44, a2= 25.93, loss=144.64
step= 70, a1= 98.12, a2= 25.42, loss=140.67
step= 80, a1= 98.49, a2= 25.14, loss=139.44
step= 90, a1= 98.70, a2= 24.99, loss=139.06
step=100, a1= 98.81, a2= 24.90, loss=138.94
Estimated: a1= 98.81, a2= 24.90
順
調
に
低
下
推定されたパラメータの値
参考: 実⾏結果
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 36
学習率が⼤きすぎて学習失敗していると...
step= 10, (中略), loss=72692296.00
step= 20, (中略), loss=54651076608.00
step= 30, (中略), loss=41087909494784.00
: :
順
調
に
増
加
学習率を⼩さくしてみる
4. 予測
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 37
# (1) 新しいデータを⽤意
new_x = np.array([2., 4.]).reshape(1, 2)
# (2) 学習結果をつかって,予測実施
new_y = sess.run(y, feed_dict={x: new_x})
print new_y
予測でも sess.run を⽤いる
feed_dictには新しい⼊⼒値を指定することに留意。(当然ですが...)
(参考)実⾏結果
[[ 297.22738647]]
円円 × 2 + 円 × 4 ≒99 25 297
5. 後⽚付け
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 38
# セッションを閉じる
sess.close()
TensorFlow の処理の流れ (再掲)
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 39
# coding: utf-8
# 必要なモジュールを読み込む
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
# 1. 予測式(モデル)を記述する
# ⼊⼒変数と出⼒変数のプレースホルダを⽣成
x = tf.placeholder(tf.float32, shape=(None, 2), name="x")
y_ = tf.placeholder(tf.float32, shape=(None, 1), name="y")
# モデルパラメータ
a = tf.Variable(tf.zeros((2, 1)), name="a")
# モデル式
y = tf.matmul(x, a)
# 2. 学習に必要な関数を定義する
# 誤差関数(loss)
loss = tf.reduce_mean(tf.square(y_ - y))
# 最適化⼿段を選ぶ(最急降下法)
train_step = tf.train.GradientDescentOptimizer(0.02).minimize(loss)
# 3. 実際に学習処理を実⾏する
# (1) 訓練データを⽣成する
train_x = np.array([[1., 3.], [3., 1.], [5., 7.]])
train_y = np.array([190., 330., 660.]).reshape(3, 1)
print "x=", train_x
print "y=", train_y
# (2) セッションを準備し,変数を初期化
sess = tf.Session()
init = tf.initialize_all_variables()
sess.run(init)
# (3) 最急勾配法でパラメータ更新 (100回更新する)
for i in range(100):
_, l, a_ = sess.run([train_step, loss, a], feed_dict={x: train_x, y_: train_y})
if (i + 1) % 10 == 0:
print "step=%3d, a1=%6.2f, a2=%6.2f, loss=%.2f" % (i + 1, a_[0], a_[1], l)
# (4) 学習結果を出⼒
est_a = sess.run(a, feed_dict={x: train_x, y_: train_y})
print "Estimated: a1=%6.2f, a2=%6.2f" % (est_a[0], est_a[1])
# 4. 新しいデータに対して予測する
# (1) 新しいデータを⽤意
new_x = np.array([2., 4.]).reshape(1, 2)
# (2) 学習結果をつかって,予測実施
new_y = sess.run(y, feed_dict={x: new_x})
print new_y
# 5. 後⽚付け
# セッションを閉じる
sess.close()
0.	ライブラリをロード
1.	予測式(モデル)を記述
2.	誤差関数と最適化⼿法を記述
3.	訓練データを作成(or読込)し
学習実⾏
4.	予測
5.	後⽚付け
(補⾜) 線形回帰の応⽤場⾯
„ 家賃
Ø 家賃 =	a *	駅からの距離 +	b	* 築年数 +	c	*	広さ
„ 明⽇の客数
Ø 客数 =	a	*	気温 +	b	*	昨年同⽇の客数
などなど
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 40
つぎの問題です
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 41
たかしくんは⼋百屋へ財布を預かってお使いに
⾏きました。しかしたかしくんはお⾦を
数えられません。
気まぐれおやじ⽈く、
リンゴ2個+ミカン3個、リンゴ0個+ミカン16個
なら買えるが、リンゴ3個+ミカン1個、
リンゴ2個+ミカン8個は買えないとのこと。
リンゴ1個+ミカン11個は買えますか?
例題2
識別問題
機械学習の流れ
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 42
学
習
予
測
①予測式(モデル)をつくる
②誤差を計算する
③誤差を最⼩にする点を探す(最適化)
予測式&学習済パラメタで予測
式で表そうとしてみる...
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 43
円 ×1+ 円
円 ×2+ 円 × 3)
円 ×0+ 円 ×16)
円 ×3+ 円 × 1)
円
円
円
円 ×2+ 円 × 8 )円
×11)円
-(
-(
-(
-(
-(
買える
買える
買えない
買えない
?
式で表そうとしてみる...
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 44
円 ×1+ 円
円 ×2+ 円 × 3)
円 ×0+ 円 ×16)
円 ×3+ 円 × 1)
円
円
円
円 ×2+ 円 × 8 )円
×11)円
-(
-(
-(
-(
-(
買える
買える
買えない
買えない
?
予想される残⾦ 買える :	1
買えない :	0
シグモイド曲線
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 45
予想される残⾦
0
0.5
買える
買えない
𝜎 𝑢 =
1
1 + exp	(−𝑢)
ロジット
予測式(モデル)が作れた!
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 46
円 ×1+ 円
円 ×2+ 円 × 3))		= 1
円 ×0+ 円 ×16))	= 1
円 ×3+ 円 × 1))		= 0
円
円
円
円 ×2+ 円 × 8 ))	= 0円
×11)	)	=円
-(
-(
-(
-(
-( ?
σ(
σ(
σ(
σ(
σ(
ロジスティック回帰
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 47
⼊⼒層 出⼒層
※ロジスティック「回帰」ですが,識別(分類)の⼿法です。
𝑦 = 𝜎(𝑏 + 𝑎1 𝑥1 + 𝑎2 𝑥2)
𝑦
𝑥1
𝑥2
× 𝑎1
× 𝑎2
リンゴの数 à
ミカンの数 à
ß買えるか
リンゴ
の単価
↓
↑
ミカン
の単価
𝑏ß
財布の中⾝
TensorFlow での実装
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 48
# coding: utf-8
# ### 必要なモジュールを読み込む
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
# ## TensorFlow でロジスティック回帰する
# 1. 学習したいモデルを記述する
# ⼊⼒変数と出⼒変数のプレースホルダを⽣成
x = tf.placeholder(tf.float32, shape=(None, 2), name="x")
y_ = tf.placeholder(tf.float32, shape=(None, 1), name="y")
# モデルパラメータ
a = tf.Variable(-10 * tf.ones((2, 1)), name="a")
b = tf.Variable(200., name="b")
# モデル式
u = tf.matmul(x, a) + b
y = tf.sigmoid(u)
# 2. 学習やテストに必要な関数を定義する
# 誤差関数(loss)
loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(u, y_))
# 最適化⼿段(最急降下法)
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
# 3. 実際に学習処理を実⾏する
# (1) 訓練データを⽣成する
train_x = np.array([[2., 3.], [0., 16.], [3., 1.], [2., 8.]])
train_y = np.array([1., 1., 0., 0.]).reshape(4, 1)
print "x=", train_x
print "y=", train_y
# (2) セッションを準備し,変数を初期化
sess = tf.Session()
init = tf.initialize_all_variables()
sess.run(init)
# (3) 最急勾配法でパラメータ更新 (1000回更新する)
for i in range(1000):
_, l, a_, b_ = sess.run([train_step, loss, a, b], feed_dict={x: train_x, y_: train_y})
if (i + 1) % 100 == 0:
print "step=%3d, a1=%6.2f, a2=%6.2f, b=%6.2f, loss=%.2f" % (i + 1, a_[0], a_[1], b_, l)
# (4) 学習結果を出⼒
est_a, est_b = sess.run([a, b], feed_dict={x: train_x, y_: train_y})
print "Estimated: a1=%6.2f, a2=%6.2f, b=%6.2f" % (est_a[0], est_a[1], est_b)
# 4. 新しいデータに対して予測する
# (1) 新しいデータを⽤意
new_x = np.array([1., 11.]).reshape(1, 2)
# (2) 学習結果をつかって,予測実施
new_y = sess.run(y, feed_dict={x: new_x})
print new_y
# 5. 後⽚付け
# セッションを閉じる
sess.close()
0.	ライブラリをロード
1.	予測式(モデル)を記述
2.	誤差関数と最適化⼿法を記述
3.	訓練データを作成(or読込)し
学習実⾏
4.	予測
5.	後⽚付け
※線形回帰の実装と,ほとんど同⼀
1. 予測式(モデル)を記述
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 49
# 1. 学習したいモデルを記述する
# ⼊⼒変数と出⼒変数のプレースホルダを⽣成
x = tf.placeholder(tf.float32, shape=(None, 2), name="x")
y_ = tf.placeholder(tf.float32, shape=(None, 1), name="y")
# モデルパラメータ
a = tf.Variable(-10 * tf.ones((2, 1)), name="a")
b = tf.Variable(200., name="b")
# モデル式
u = tf.matmul(x, a) + b
y = tf.sigmoid(u)
𝑦 = 𝜎(𝑏 + 𝑎1 𝑥1 + 𝑎2 𝑥2)
ロジット: u
今回の予測式に合わせて
モデルとパラメータを修正
ß追加
ロジスティック回帰
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 50
⼊⼒層 出⼒層
※ロジスティック「回帰」ですが,識別(分類)の⼿法です。
𝑦 = 𝜎(𝑏 + 𝑎1 𝑥1 + 𝑎2 𝑥2)
𝑦
𝑥1
𝑥2
× 𝑎1
× 𝑎2
リンゴの数 à
ミカンの数 à
ß買えるか
リンゴ
の単価
↓
↑
ミカン
の単価
𝑏ß
財布の中⾝
1. 予測式(モデル)を記述
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 51
# 1. 学習したいモデルを記述する
# ⼊⼒変数と出⼒変数のプレースホルダを⽣成
x = tf.placeholder(tf.float32, shape=(None, 2), name="x")
y_ = tf.placeholder(tf.float32, shape=(None, 1), name="y")
# モデルパラメータ
a = tf.Variable(-10 * tf.ones((2, 1)), name="a")
b = tf.Variable(200., name="b")
# モデル式
u = tf.matmul(x, a) + b
y = tf.sigmoid(u)
𝑦 = 𝜎(𝑏 + 𝑎1 𝑥1 + 𝑎2 𝑥2)
ロジット: u
今回の予測式に合わせて
モデルとパラメータを修正
ß追加
2. 誤差関数と最適化⼿法を記述
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 52
# 誤差関数(loss)
loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(u, y_))
# 最適化⼿段(最急降下法)
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
・誤差関数を変更
識別(分類)問題 à クロスエントロピー
6 −𝑦7 log 𝑦79 − 1 − 𝑦7 log(1 − 𝑦79)
:
7
正解
予測値:	𝑦79
正解
予測値:	𝑦79
3. 学習実⾏
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 53
# (2) セッションを準備し,変数を初期化
sess = tf.Session()
init = tf.initialize_all_variables()
sess.run(init)
# (3) 最急勾配法でパラメータ更新 (1000回更新する)
for i in range(1000):
_, l, a_, b_ = sess.run([train_step, loss, a, b], feed_dict={x: train_x, y_: train_y})
if (i + 1) % 100 == 0:
print "step=%3d, a1=%6.2f, a2=%6.2f, b=%6.2f, loss=%.2f" % (i + 1, a_[0], a_[1], b_, l)
# (4) 学習結果を出⼒
est_a, est_b = sess.run([a, b], feed_dict={x: train_x, y_: train_y})
print "Estimated: a1=%6.2f, a2=%6.2f, b=%6.2f" % (est_a[0], est_a[1], est_b)
線形回帰とほぼ同じ!
【変更箇所】
・パラメータ b	の出⼒を追加
・更新回数を 100回 à 1000回 に
※更新回数は,対象問題やデータ,初期値,モデルなどでまちまちです。
学習結果
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 54
step=100, a1=-22.50, a2=-12.28, b=196.26, loss=42.75
step=200, a1=-35.00, a2=-12.06, b=192.68, loss=25.84
step=300, a1=-47.36, a2=-11.78, b=189.14, loss=9.24
step=400, a1=-55.13, a2=-11.51, b=186.75, loss=2.54
step=500, a1=-58.92, a2=-11.29, b=185.58, loss=0.02
step=600, a1=-59.26, a2=-11.23, b=185.47, loss=0.01
step=700, a1=-59.43, a2=-11.19, b=185.43, loss=0.00
step=800, a1=-59.53, a2=-11.17, b=185.39, loss=0.00
step=900, a1=-59.62, a2=-11.15, b=185.37, loss=0.00
step=1000, a1=-59.68, a2=-11.14, b=185.35, loss=0.00
Estimated: a1=-59.68, a2=-11.14, b=185.35
順
調
に
低
下
推定されたパラメータの値
予測結果
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 55
円 ×1+ 円 ×11)	)	=円 -( 0.96σ( 185 60 11
リンゴ1個+ミカン11個は,おそらく買えそう
(補⾜) 線形識別の応⽤場⾯
„ スパムメール判定
Ø スパム =	σ(a *	”Discount”	+	b	* “Drug” +	c	*	“RayBan”)
„ 来店予測
Ø 来店あり =	σ(a	*	前⽉来店回数+	b	* DM送付 +	c	*	…	)
などなど
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 56
最後にもう少し複雑な問題
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 57
⼿書き⽂字認識
MNISTデータ
0〜9の⼿書き⽂字画像を7万枚集めたデータセット
1枚の画像は 28	x	28	ピクセル (=768ピクセル)
7 3 4 6
多クラス識別(分類)問題
⼊⼒:
出⼒:
機械学習の流れ
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 58
学
習
予
測
①予測式(モデル)をつくる
②誤差を計算する
③誤差を最⼩にする点を探す(最適化)
予測式&学習済パラメタで予測
one-hot ベクトル (one-of-K表現)
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 59
7
3
4
6
出⼒ラベル(1次元) 出⼒ラベル(10次元)
0 0 0 0 0 0 0 1 0 0
0							1								2								3							4								5							6							7								8								9
0 0 0 1 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0
1つの多クラス識別問題が
10個の2クラス識別問題へ分解
案1: ロジスティック回帰を拡張
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 60
⼊⼒層
(768ノード)
出⼒層
(10ノード)
𝑦C
𝑦1
𝑦D
01								2								3							4								5							6							7								8								9
ロジスティクス回帰を⽂字種だけ並べる
数字“1”を表す?
案1: ロジスティック回帰を拡張
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 61
⼊⼒層
(768ノード)
出⼒層
(10ノード)
𝑦C
𝑦1
𝑦D
ソフトマックス(Softmax) 𝑦 = 𝑠𝑜𝑓𝑡𝑚𝑎𝑥(𝑥𝑊 + 𝑏)
案2: さらに中間層を追加
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 62
⼊⼒層
(768ノード)
出⼒層
(10ノード)
𝑦C
𝑦1
𝑦D
ニューラルネット(パーセプトロン)
隠れ層
(□ノード)
中間層(隠れ層)を追加すると,より複雑なパターンも⾒分けられる
TensorFlow での実装
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 63
# 0. 必要なモジュールを読み込む
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
# MNISTデータの取得
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
# 1. 学習したいモデルを記述する
# ⼊⼒変数と出⼒変数のプレースホルダを⽣成
x = tf.placeholder(tf.float32, [None, 784])
y_ = tf.placeholder(tf.float32, [None, 10])
# モデルパラメータ(⼊⼒層:784ノード, 隠れ層:100ノード, 出⼒層:10ノード)
W1 = tf.Variable(tf.truncated_normal([784, 100]))
b1 = tf.Variable(tf.zeros([100]))
W2 = tf.Variable(tf.truncated_normal([100, 10]))
b2 = tf.Variable(tf.zeros([10]))
# モデル式
h = tf.sigmoid(tf.matmul(x, W1) + b1) # ⼊⼒層->隠れ層
u = tf.matmul(h, W2) + b2 # 隠れ層->出⼒層 (ロジット)
y = tf.nn.softmax(u) # 隠れ層->出⼒層 (ソフトマックス後)
# 2. 学習やテストに必要な関数を定義する
# 誤差関数(loss)
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(u, y_))
# 最適化⼿段(最急降下法)
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
# 正答率(学習には⽤いない)
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
acc = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
# 3. 実際に学習処理を実⾏する
# (1) セッションを準備し,変数を初期化
sess = tf.Session()
init = tf.initialize_all_variables()
sess.run(init)
# (2) バッチ型確率的勾配降下法でパラメータ更新
for i in range(10000):
# 訓練データから100サンプルをランダムに取得
batch_xs, batch_ys = mnist.train.next_batch(100)
# 学習
_, l = sess.run([train_step, loss], feed_dict={x: batch_xs, y_: batch_ys})
if (i + 1) % 1000 == 0:
print "step=%3d, loss=%.2f" % (i + 1, l)
# 4. テスト⽤データに対して予測し,性能を確認
# (1) テスト⽤データを1000サンプル取得
new_x = mnist.test.images[0:1000]
new_y_ = mnist.test.labels[0:1000]
# (2) 予測と性能評価
accuracy, new_y = sess.run([acc, y], feed_dict={x:new_x , y_:new_y_ })
print "Accuracy (for test data): %6.2f%%" % accuracy
print "True Label:", np.argmax(new_y_[0:15,], 1)
print "Est Label:", np.argmax(new_y[0:15, ], 1)
# 5. 後⽚付け
# セッションを閉じる
sess.close()
0.	ライブラリをロード
1.	予測式(モデル)を記述
2.	誤差関数と最適化⼿法を記述
3.	訓練データを作成(or読込)し
学習実⾏
4.	予測
5.	後⽚付け
1. 予測式(モデル)を記述
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 64
# ⼊⼒変数と出⼒変数のプレースホルダを⽣成
x = tf.placeholder(tf.float32, [None, 784])
y_ = tf.placeholder(tf.float32, [None, 10])
# モデルパラメータ(⼊⼒層:784ノード, 隠れ層:100ノード, 出⼒層:10ノード)
W1 = tf.Variable(tf.truncated_normal([784, 100]))
b1 = tf.Variable(tf.zeros([100]))
W2 = tf.Variable(tf.truncated_normal([100, 10]))
b2 = tf.Variable(tf.zeros([10]))
# モデル式
h = tf.sigmoid(tf.matmul(x, W1) + b1) # ⼊⼒層->隠れ層
u = tf.matmul(h, W2) + b2 # 隠れ層->出⼒層 (ロジット)
y = tf.nn.softmax(u) # 隠れ層->出⼒層 (ソフトマックス後)
x
𝑥𝑊1 + 𝑏1
h
𝑠𝑖𝑔𝑚𝑜𝑖𝑑()
隠れ層
u y
ℎ𝑊2 + 𝑏2 𝑠𝑜𝑓𝑡𝑚𝑎𝑥()
出⼒層⼊⼒層
784
10
予測式(モデル,	ネットワーク)を実装
2. 誤差関数と最適化⼿法を記述
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 65
# 誤差関数(loss)
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(u, y_))
# 最適化⼿段(最急降下法)
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
# 正答率(学習には⽤いない)
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
acc = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
・誤差関数を変更
多クラス識別(分類)問題
à 多クラス⽤クロスエントロピー
(softmax_cross_entropy_with_logits)
3. 学習実⾏
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 66
# MNISTデータの取得
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
# (2) バッチ型確率的勾配降下法でパラメータ更新
for i in range(10000):
# 訓練データから100サンプルをランダムに取得
batch_xs, batch_ys = mnist.train.next_batch(100)
# 学習
_, l = sess.run([train_step, loss], feed_dict={x: batch_xs, y_: batch_ys})
if (i + 1) % 1000 == 0:
print "step=%3d, loss=%.2f" % (i + 1, l)
⼤規模なデータで学習する時の⼯夫
・各ステップで,100個の訓練データを
ランダムに取り出して学習 (確率的勾配降下法)
à 速く学習が進む
参考: 学習結果
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 67
step=1000, loss=2.09
step=2000, loss=1.45
step=3000, loss=1.38
step=4000, loss=0.77
step=5000, loss=0.63
step=6000, loss=0.52
step=7000, loss=0.78
step=8000, loss=0.73
step=9000, loss=0.55
step=10000, loss=0.58
ゆ
ら
ぎ
な
が
ら
低
下
4. 予測
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 68
# (1) テスト⽤データを1000サンプル取得
new_x = mnist.test.images[0:1000]
new_y_ = mnist.test.labels[0:1000]
# (2) 予測と性能評価
accuracy, new_y = sess.run([acc, y], feed_dict={x:new_x , y_:new_y_ })
print "Accuracy (for test data): %6.2f%%" % (accuracy * 100)
print "True Label:", np.argmax(new_y_[0:15,], 1)
print "Est Label:", np.argmax(new_y[0:15, ], 1)
ここはこれまでと同様
【実⾏結果例】
Accuracy(test data): 80.0%
True Label: [7 2 1 0 4 1 4 9 5 9 0 6 9 0 1]
Est Label: [7 2 1 0 9 1 4 9 2 9 0 6 9 0 1]
(補⾜) ⾼度な識別の応⽤場⾯
„ 顔検出
Ø それぞれの画像領域が顔といえるかどうかを推定
„ 表情認識
Ø 顔画像がどの表情(e.g.	笑,	怒,	…)かを推定
„ (⼀般)物体認識
Ø それぞれの画像領域が何なのかを推定
などなど
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 69
階層はより深く… ⇒ “DeepLearning”
„ AlexNet (2012) … 8層
„ GoogLeNet (2014) … 22層
„ ResiNet (2015)	…	152層
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 70
まとめ(機械学習の流れ)
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 71
学
習
予
測
①予測式(モデル)をつくる
②誤差を計算する
③誤差を最⼩にする点を探す(最適化)
予測式&学習済パラメタで予測
参考書籍
2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 72
ディープラーニングの基礎的な理論と
TensorFlowなどのサンプルコードあり
ディープラーニングの
理論理解を深めたいかたはこちら。

More Related Content

What's hot

アンサンブル学習
アンサンブル学習アンサンブル学習
アンサンブル学習Hidekazu Tanaka
 
ランダムフォレスト
ランダムフォレストランダムフォレスト
ランダムフォレストKinki University
 
「全ての確率はコイン投げに通ず」 Japan.R 発表資料
「全ての確率はコイン投げに通ず」 Japan.R 発表資料「全ての確率はコイン投げに通ず」 Japan.R 発表資料
「全ての確率はコイン投げに通ず」 Japan.R 発表資料Ken'ichi Matsui
 
ブースティング入門
ブースティング入門ブースティング入門
ブースティング入門Retrieva inc.
 
統計学の基礎の基礎
統計学の基礎の基礎統計学の基礎の基礎
統計学の基礎の基礎Ken'ichi Matsui
 
実践・最強最速のアルゴリズム勉強会 第二回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第二回講義資料(ワークスアプリケーションズ & AtCoder)実践・最強最速のアルゴリズム勉強会 第二回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第二回講義資料(ワークスアプリケーションズ & AtCoder)AtCoder Inc.
 
データ解析技術入門(R編)
データ解析技術入門(R編)データ解析技術入門(R編)
データ解析技術入門(R編)Takumi Asai
 
線形?非線形?
線形?非線形?線形?非線形?
線形?非線形?nishio
 

What's hot (10)

Random Forests
Random ForestsRandom Forests
Random Forests
 
アンサンブル学習
アンサンブル学習アンサンブル学習
アンサンブル学習
 
ランダムフォレスト
ランダムフォレストランダムフォレスト
ランダムフォレスト
 
はじめての「R」
はじめての「R」はじめての「R」
はじめての「R」
 
「全ての確率はコイン投げに通ず」 Japan.R 発表資料
「全ての確率はコイン投げに通ず」 Japan.R 発表資料「全ての確率はコイン投げに通ず」 Japan.R 発表資料
「全ての確率はコイン投げに通ず」 Japan.R 発表資料
 
ブースティング入門
ブースティング入門ブースティング入門
ブースティング入門
 
統計学の基礎の基礎
統計学の基礎の基礎統計学の基礎の基礎
統計学の基礎の基礎
 
実践・最強最速のアルゴリズム勉強会 第二回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第二回講義資料(ワークスアプリケーションズ & AtCoder)実践・最強最速のアルゴリズム勉強会 第二回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第二回講義資料(ワークスアプリケーションズ & AtCoder)
 
データ解析技術入門(R編)
データ解析技術入門(R編)データ解析技術入門(R編)
データ解析技術入門(R編)
 
線形?非線形?
線形?非線形?線形?非線形?
線形?非線形?
 

Viewers also liked

TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。tak9029
 
OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみたOpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた徹 上野山
 
TensorBoard ハンズオン
TensorBoard ハンズオンTensorBoard ハンズオン
TensorBoard ハンズオン徹 上野山
 
Tensor flow勉強会 (ayashiminagaranotensorflow)
Tensor flow勉強会 (ayashiminagaranotensorflow)Tensor flow勉強会 (ayashiminagaranotensorflow)
Tensor flow勉強会 (ayashiminagaranotensorflow)tak9029
 
深層学習とTensorFlow入門
深層学習とTensorFlow入門深層学習とTensorFlow入門
深層学習とTensorFlow入門tak9029
 
TensorFlowとは? ディープラーニング (深層学習) とは?
TensorFlowとは? ディープラーニング (深層学習) とは?TensorFlowとは? ディープラーニング (深層学習) とは?
TensorFlowとは? ディープラーニング (深層学習) とは?KSK Analytics Inc.
 
Tensorflowのチュートリアルで理解するdeep learningはじめてハンズオン
Tensorflowのチュートリアルで理解するdeep learningはじめてハンズオンTensorflowのチュートリアルで理解するdeep learningはじめてハンズオン
Tensorflowのチュートリアルで理解するdeep learningはじめてハンズオン健一 茂木
 
TensorFlowによるニューラルネットワーク入門
TensorFlowによるニューラルネットワーク入門TensorFlowによるニューラルネットワーク入門
TensorFlowによるニューラルネットワーク入門Etsuji Nakai
 
機械学習によるデータ分析まわりのお話
機械学習によるデータ分析まわりのお話機械学習によるデータ分析まわりのお話
機械学習によるデータ分析まわりのお話Ryota Kamoshida
 
機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual TalksYuya Unno
 
Tensor flow勉強会3
Tensor flow勉強会3Tensor flow勉強会3
Tensor flow勉強会3tak9029
 
サザエさんのじゃんけん データ分析
サザエさんのじゃんけん データ分析サザエさんのじゃんけん データ分析
サザエさんのじゃんけん データ分析yaju88
 
TensorFlowを使ってテキストをクラス分類してみた
TensorFlowを使ってテキストをクラス分類してみたTensorFlowを使ってテキストをクラス分類してみた
TensorFlowを使ってテキストをクラス分類してみたYuya Kato
 
「TensorFlow Tutorialの数学的背景」 クイックツアー(パート1)
「TensorFlow Tutorialの数学的背景」 クイックツアー(パート1)「TensorFlow Tutorialの数学的背景」 クイックツアー(パート1)
「TensorFlow Tutorialの数学的背景」 クイックツアー(パート1)Etsuji Nakai
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないことNorishige Fukushima
 
OSS についてあれこれ
OSS についてあれこれOSS についてあれこれ
OSS についてあれこれTakuto Wada
 

Viewers also liked (20)

TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。
 
OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみたOpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた
 
TensorBoard ハンズオン
TensorBoard ハンズオンTensorBoard ハンズオン
TensorBoard ハンズオン
 
Tensor flow勉強会 (ayashiminagaranotensorflow)
Tensor flow勉強会 (ayashiminagaranotensorflow)Tensor flow勉強会 (ayashiminagaranotensorflow)
Tensor flow勉強会 (ayashiminagaranotensorflow)
 
BigQuery + Fluentd
BigQuery + FluentdBigQuery + Fluentd
BigQuery + Fluentd
 
深層学習とTensorFlow入門
深層学習とTensorFlow入門深層学習とTensorFlow入門
深層学習とTensorFlow入門
 
TensorFlowとは? ディープラーニング (深層学習) とは?
TensorFlowとは? ディープラーニング (深層学習) とは?TensorFlowとは? ディープラーニング (深層学習) とは?
TensorFlowとは? ディープラーニング (深層学習) とは?
 
Tensorflowのチュートリアルで理解するdeep learningはじめてハンズオン
Tensorflowのチュートリアルで理解するdeep learningはじめてハンズオンTensorflowのチュートリアルで理解するdeep learningはじめてハンズオン
Tensorflowのチュートリアルで理解するdeep learningはじめてハンズオン
 
TensorFlowによるニューラルネットワーク入門
TensorFlowによるニューラルネットワーク入門TensorFlowによるニューラルネットワーク入門
TensorFlowによるニューラルネットワーク入門
 
機械学習によるデータ分析まわりのお話
機械学習によるデータ分析まわりのお話機械学習によるデータ分析まわりのお話
機械学習によるデータ分析まわりのお話
 
機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks
 
Tensor flow勉強会3
Tensor flow勉強会3Tensor flow勉強会3
Tensor flow勉強会3
 
サザエさんのじゃんけん データ分析
サザエさんのじゃんけん データ分析サザエさんのじゃんけん データ分析
サザエさんのじゃんけん データ分析
 
TensorFlow 入門
TensorFlow 入門TensorFlow 入門
TensorFlow 入門
 
TensorFlowを使ってテキストをクラス分類してみた
TensorFlowを使ってテキストをクラス分類してみたTensorFlowを使ってテキストをクラス分類してみた
TensorFlowを使ってテキストをクラス分類してみた
 
「TensorFlow Tutorialの数学的背景」 クイックツアー(パート1)
「TensorFlow Tutorialの数学的背景」 クイックツアー(パート1)「TensorFlow Tutorialの数学的背景」 クイックツアー(パート1)
「TensorFlow Tutorialの数学的背景」 クイックツアー(パート1)
 
OpenCVの基礎
OpenCVの基礎OpenCVの基礎
OpenCVの基礎
 
一般向けのDeep Learning
一般向けのDeep Learning一般向けのDeep Learning
一般向けのDeep Learning
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
 
OSS についてあれこれ
OSS についてあれこれOSS についてあれこれ
OSS についてあれこれ
 

Similar to TensorFlowで機械学習ことはじめ(summer edition)

20140807 AWS Startup Tech Meetup
20140807 AWS Startup Tech Meetup20140807 AWS Startup Tech Meetup
20140807 AWS Startup Tech Meetupakitsukada
 
独立成分分析とPerfume
独立成分分析とPerfume独立成分分析とPerfume
独立成分分析とPerfumeYurie Oka
 
行列計算アルゴリズム
行列計算アルゴリズム行列計算アルゴリズム
行列計算アルゴリズムTakuo Tachibana
 
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V6
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V6データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V6
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V6Shunsuke Nakamura
 
Rm20130508 4key
Rm20130508 4keyRm20130508 4key
Rm20130508 4keyyouwatari
 
競技プログラミング練習会2015 Normal 第1回
競技プログラミング練習会2015 Normal 第1回競技プログラミング練習会2015 Normal 第1回
競技プログラミング練習会2015 Normal 第1回Hideaki Nagamine
 
数字から見た大学図書館 北海道大学 20160128
数字から見た大学図書館 北海道大学 20160128数字から見た大学図書館 北海道大学 20160128
数字から見た大学図書館 北海道大学 20160128Takeo NAGASHIMA
 
Data analysis-for-highschool-students
Data analysis-for-highschool-studentsData analysis-for-highschool-students
Data analysis-for-highschool-studentsnaoki yamagishi
 
「パネルディスカッション 行動経済学の教育」 竹内幹(一橋大学) 資料 3/4
「パネルディスカッション 行動経済学の教育」 竹内幹(一橋大学) 資料 3/4「パネルディスカッション 行動経済学の教育」 竹内幹(一橋大学) 資料 3/4
「パネルディスカッション 行動経済学の教育」 竹内幹(一橋大学) 資料 3/4evidence8money
 

Similar to TensorFlowで機械学習ことはじめ(summer edition) (19)

20140807 AWS Startup Tech Meetup
20140807 AWS Startup Tech Meetup20140807 AWS Startup Tech Meetup
20140807 AWS Startup Tech Meetup
 
Report 130731
Report 130731Report 130731
Report 130731
 
独立成分分析とPerfume
独立成分分析とPerfume独立成分分析とPerfume
独立成分分析とPerfume
 
行列計算アルゴリズム
行列計算アルゴリズム行列計算アルゴリズム
行列計算アルゴリズム
 
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V6
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V6データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V6
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V6
 
Rm20130508 4key
Rm20130508 4keyRm20130508 4key
Rm20130508 4key
 
Report 130724
Report 130724Report 130724
Report 130724
 
Report 131211
Report 131211Report 131211
Report 131211
 
Report 131211
Report 131211Report 131211
Report 131211
 
Report 131211
Report 131211Report 131211
Report 131211
 
Report 131211
Report 131211Report 131211
Report 131211
 
Report lmsd 131210
Report lmsd 131210Report lmsd 131210
Report lmsd 131210
 
Report 130826
Report 130826Report 130826
Report 130826
 
Report 130826
Report 130826Report 130826
Report 130826
 
競技プログラミング練習会2015 Normal 第1回
競技プログラミング練習会2015 Normal 第1回競技プログラミング練習会2015 Normal 第1回
競技プログラミング練習会2015 Normal 第1回
 
数字から見た大学図書館 北海道大学 20160128
数字から見た大学図書館 北海道大学 20160128数字から見た大学図書館 北海道大学 20160128
数字から見た大学図書館 北海道大学 20160128
 
Data analysis-for-highschool-students
Data analysis-for-highschool-studentsData analysis-for-highschool-students
Data analysis-for-highschool-students
 
「パネルディスカッション 行動経済学の教育」 竹内幹(一橋大学) 資料 3/4
「パネルディスカッション 行動経済学の教育」 竹内幹(一橋大学) 資料 3/4「パネルディスカッション 行動経済学の教育」 竹内幹(一橋大学) 資料 3/4
「パネルディスカッション 行動経済学の教育」 竹内幹(一橋大学) 資料 3/4
 
Report 140331
Report 140331Report 140331
Report 140331
 

Recently uploaded

デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成Hiroshi Tomioka
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 

Recently uploaded (9)

デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 

TensorFlowで機械学習ことはじめ(summer edition)

  • 2. ⾃⼰紹介 „ 元 電機メーカ勤務の 似⾮ソフト屋 „ もともと組込み à 画像処理 à データ解析 と変遷し à Deep Learning の世界へ 2 上野⼭ 徹 うえのやま とおる 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 We‘re Hiring!
  • 4. 機械学習とは? 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 4 数値・⽂字・画像・⾳声など多種多様な データの中から,規則性・パターン・知 識を発⾒し,現状を把握や将来の予測を したりする ※朱鷺の杜(”機械学習”)より引⽤ 機械学習を使わない場合: すでに分かっている規則性(e.g. 運動⽅程式) を使って,現状把握や将来を予測
  • 5. 教師あり/なし 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 5 教師あり学習 教師なし学習 ※ その他,半教師あり学習や強化学習 と呼ばれるものもあります 正解がセットになったデータ から規則性やパターンを⾒つける 正解が含まれないデータから 規則性やパターンを⾒つける 来店頻度 購買⾦額 ⼊⼒ データ = 7 = 7 = 7 = 9 正解 データ 離れて いる が「7」の パターンっぽい
  • 6. 回帰 / 識別 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 6 回帰 識別(判別) 連続的な値 を予測する とびとびな値(離散値) を予測する e.g. 家賃の予測 e.g. 広告メール判定 How much? … DISCOUNT … … CLICK NOW … … meeting … Spam? or Not?
  • 7. 難しい規則性を機械学習するには 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 7 学習 アルゴ リズム 効率的な 計算環境 ⼤規模 データ が提供してくれる
  • 9. TensorFlow とは „ Google社のMachine Intelligence 研究所が開発した数値計算ライブラリ „ Deep Learning をはじめとする 機械学習 の 研究や活⽤にGoogle社内で⽤いられている Ø 2011年から使⽤していたDistBeliefを強化 „ 複数のCPU/GPUや、複数のマシンに分散して 実⾏できる。 „ C++とPython 2or3 APIを持っている „ 2015年11⽉にオープンソース(Apache2.0)公開 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 9
  • 10. データフローグラフ 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 10 ß 掛け算 ß ⾜し算 ß 関数 テンソル が データフローグラフ 上を 流れるように計算処理している テンソル à (多次元配列) 𝐶 = … (𝑅𝑒𝐿𝑈 𝑏 + 𝑊𝑋 ) à 数式で表現すると、 TensorFlow 巨⼤なデータにも使える ⾏列計算ライブラリ ビッグデータの 機械学習に使える!出典)TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems, Google, 2015
  • 12. 詳細は Web へ 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 12 https://speakerdeck.com/kazunori279/cloud-vision-api-and-tensorflow 例えば、佐藤さん@Google の資料など
  • 14. さっそく問題です 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 14 たかしくんは⼋百屋へお使いに⾏きました。 リンゴ1個とミカン3個を買うと190円, リンゴ3個とミカン1個を買うと330円 するようです。 リンゴ2個とミカン4個を買うと いくらになるでしょうか? 例題1
  • 15. 円 式で表すと... 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 15 円 × 1 + 円 × 3 = 190 円 円 × 3 + 円 × 1 = 330 円 円 × 2 + 円 × 4 = ?
  • 16. 円 回答 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 16 円 × 1 + 円 × 3 = 190 円 円 × 3 + 円 × 1 = 330 円 円 × 2 + 円 × 4 = ? 100 30 100 30 100 30
  • 17. 円 回答 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 17 円 × 1 + 円 × 3 = 190 円 円 × 3 + 円 × 1 = 330 円 円 × 2 + 円 × 4 = 320 100 30 100 30 100 30
  • 18. 円 これも機械学習(回帰)の問題です! 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 18 円 × 1 + 円 × 3 = 190 円 円 × 3 + 円 × 1 = 330 円 円 × 2 + 円 × 4 = 320 100 30 100 30 100 30 学習 予測 実績データからパラメータを推定 パラメータを使って結果を予測
  • 19. 実は店のおやじは気まぐれでした 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 19 円 円 × 1 + 円 × 3 = 190 円 円 × 3 + 円 × 1 = 330 円 円 × 2 + 円 × 4 = ? 円 × 5 + 円 × 7 = 660 円
  • 20. 実は店のおやじは気まぐれでした 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 20 円 円 × 1 + 円 × 3 = 190 円 円 × 3 + 円 × 1 = 330 円 円 × 2 + 円 × 4 = ? 円 × 5 + 円 × 7 = 660 円 100 30 100 30 100 30 710
  • 21. どうやってパラメータ(単価)を⾒つけるか? 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 21 考え⽅ 合計⾦額の誤差が⼩さくなるような 単価を採⽤しよう! 円 × 1 + 円 × 3 à 40円 - 190 円 円 × 3 + 円 × 1 à 40円 - 330 円 円 × 5 + 円 × 7 à 120円 - 660 円 10 10 10 10 10 10 合計⾦額 (正解) 合計⾦額 (予測) (2乗)誤差 à 22500 à 84100 à 291600 ( )2 ( )2 ( )2 平均 132733
  • 22. すべての組合せを計算 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 22 ミカン 0 10 20 30 40 50 60 70 80 90 100 リンゴ 0 193533 158700 127800 100833 77800 58700 43533 32300 25000 21633 22200 10 164833 132733 104567 80333 60033 43667 31233 22733 18167 17533 20833 20 138467 109100 83667 62167 44600 30967 21267 15500 13667 15767 21800 30 114433 87800 65100 46333 31500 20600 13633 10600 11500 16333 25100 40 92733 68833 48867 32833 20733 12567 8333 8033 11667 19233 30733 50 73367 52200 34967 21667 12300 6867 5367 7800 14167 24467 38700 60 56333 37900 23400 12833 6200 3500 4733 9900 19000 32033 49000 70 41633 25933 14167 6333 2433 2467 6433 14333 26167 41933 61633 80 29267 16300 7267 2167 1000 3767 10467 21100 35667 54167 76600 90 19233 9000 2700 333 1900 7400 16833 30200 47500 68733 93900 100 11533 4033 467 833 5133 13367 25533 41633 61667 85633 113533 110 6167 1400 567 3667 10700 21667 36567 55400 78167 104867 135500 120 3133 1100 3000 8833 18600 32300 49933 71500 97000 126433 159800 130 2433 3133 7767 16333 28833 45267 65633 89933 118167 150333 186433 140 4067 7500 14867 26167 41400 60567 83667 110700 141667 176567 215400 150 8033 14200 24300 38333 56300 78200 104033 133800 167500 205133 246700 近そうな値は⾒つかるけど、計算は⼤変! (もし単価が0円〜1万円で、10種類買ったら?)
  • 23. よく⾒ると、徐々に変化している 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 23 ミカン 0 10 20 30 40 50 60 70 80 90 100 リンゴ 0 193533 158700 127800 100833 77800 58700 43533 32300 25000 21633 22200 10 164833 132733 104567 80333 60033 43667 31233 22733 18167 17533 20833 20 138467 109100 83667 62167 44600 30967 21267 15500 13667 15767 21800 30 114433 87800 65100 46333 31500 20600 13633 10600 11500 16333 25100 40 92733 68833 48867 32833 20733 12567 8333 8033 11667 19233 30733 50 73367 52200 34967 21667 12300 6867 5367 7800 14167 24467 38700 60 56333 37900 23400 12833 6200 3500 4733 9900 19000 32033 49000 70 41633 25933 14167 6333 2433 2467 6433 14333 26167 41933 61633 80 29267 16300 7267 2167 1000 3767 10467 21100 35667 54167 76600 90 19233 9000 2700 333 1900 7400 16833 30200 47500 68733 93900 100 11533 4033 467 833 5133 13367 25533 41633 61667 85633 113533 110 6167 1400 567 3667 10700 21667 36567 55400 78167 104867 135500 120 3133 1100 3000 8833 18600 32300 49933 71500 97000 126433 159800 130 2433 3133 7767 16333 28833 45267 65633 89933 118167 150333 186433 140 4067 7500 14867 26167 41400 60567 83667 110700 141667 176567 215400 150 8033 14200 24300 38333 56300 78200 104033 133800 167500 205133 246700 ミカン 0 ミカン 40 ミカン 800 50000 100000 150000 200000 250000 0 20 40 60 80 100120 140 リンゴ 最⼩値
  • 24. ⼩さくなる⽅向へたどっていくと... 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 24 ミカン 0 10 20 30 40 50 60 70 80 90 100 リンゴ 0 193533 10 132733 20 83667 30 46333 40 20733 50 6867 60 3500 70 2467 80 7267 2167 1000 90 2700 333 1900 100 467 833 5133 110 120 130 140 150 ミカン 0 ミカン 40 ミカン 800 50000 100000 150000 200000 250000 0 20 40 60 80 100120 140 リンゴ 最⼩値 少ない計算で早く最⼩値に! ※最⼩(⼤)値を求める処理="最適化"
  • 25. 気まぐれおやじのこころを読む 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 25 円 円 × 1 + 円 × 3 ≒ 190 円 円 × 3 + 円 × 1 ≒ 330 円 円 × 2 + 円 × 4 ≒ 円 × 5 + 円 × 7 ≒ 660 円 90 30 90 30 90 30 90 30 310 650 300 180
  • 26. ここまでの振り返り 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 26 TensorFlowでも同じように書いていく 学 習 予 測 ①予測式(モデル)をつくる ②誤差を計算する ③誤差を最⼩にする点を探す(最適化) 予測式&学習済パラメタで予測
  • 27. TensorFlow の処理の流れ 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 27 # coding: utf-8 # 必要なモジュールを読み込む import numpy as np import matplotlib.pyplot as plt import tensorflow as tf # 1. 予測式(モデル)を記述する # ⼊⼒変数と出⼒変数のプレースホルダを⽣成 x = tf.placeholder(tf.float32, shape=(None, 2), name="x") y_ = tf.placeholder(tf.float32, shape=(None, 1), name="y") # モデルパラメータ a = tf.Variable(tf.zeros((2, 1)), name="a") # モデル式 y = tf.matmul(x, a) # 2. 学習に必要な関数を定義する # 誤差関数(loss) loss = tf.reduce_mean(tf.square(y_ - y)) # 最適化⼿段を選ぶ(最急降下法) train_step = tf.train.GradientDescentOptimizer(0.02).minimize(loss) # 3. 実際に学習処理を実⾏する # (1) 訓練データを⽣成する train_x = np.array([[1., 3.], [3., 1.], [5., 7.]]) train_y = np.array([190., 330., 660.]).reshape(3, 1) print "x=", train_x print "y=", train_y # (2) セッションを準備し,変数を初期化 sess = tf.Session() init = tf.initialize_all_variables() sess.run(init) # (3) 最急勾配法でパラメータ更新 (100回更新する) for i in range(100): _, l, a_ = sess.run([train_step, loss, a], feed_dict={x: train_x, y_: train_y}) if (i + 1) % 10 == 0: print "step=%3d, a1=%6.2f, a2=%6.2f, loss=%.2f" % (i + 1, a_[0], a_[1], l) # (4) 学習結果を出⼒ est_a = sess.run(a, feed_dict={x: train_x, y_: train_y}) print "Estimated: a1=%6.2f, a2=%6.2f" % (est_a[0], est_a[1]) # 4. 新しいデータに対して予測する # (1) 新しいデータを⽤意 new_x = np.array([2., 4.]).reshape(1, 2) # (2) 学習結果をつかって,予測実施 new_y = sess.run(y, feed_dict={x: new_x}) print new_y # 5. 後⽚付け # セッションを閉じる sess.close() 0. ライブラリをロード 1. 予測式(モデル)を記述 2. 誤差関数と最適化⼿法を記述 3. 訓練データを作成(or読込)し 学習実⾏ 4. 予測 5. 後⽚付け
  • 28. 0. ライブラリをロード 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 28 import numpy as np import matplotlib.pyplot as plt import tensorflow as tf TensorFlow のほか ⾼速な配列演算パッケージであるNumPyや プロットしたい場合はmatplotlib.pyplotなど 使⽤するライブラリをロードする
  • 29. 1. 予測式(モデル)を記述 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 29 # ⼊⼒変数と出⼒変数のプレースホルダを⽣成 x = tf.placeholder(tf.float32, shape=(None, 2), name="x") y_ = tf.placeholder(tf.float32, shape=(None, 1), name="y") # モデルパラメータ a = tf.Variable(tf.zeros((2, 1)), name="a") # モデル式 y = tf.matmul(x, a) ⼊出⼒変数 à placeholder, パラメータ à Variable ・値を⼊れる"箱"を作成 (注意)shape = (訓練データの数, 次元数) ※"訓練データの数"は None にすると可変⻑扱い ・予測式(モデル)を記述
  • 30. 線形回帰(線形重回帰)モデル 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 30 ⼊⼒層 出⼒層 𝑦 𝑥1 𝑥2 × 𝑎1 𝑦 = 𝑎1 𝑥1 + 𝑎2 𝑥2 × 𝑎2 リンゴの数 à ミカンの数 à ß合計⾦額 リンゴ の単価 ↓ ↑ ミカン の単価
  • 31. 1. 予測式(モデル)を記述 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 31 # ⼊⼒変数と出⼒変数のプレースホルダを⽣成 x = tf.placeholder(tf.float32, shape=(None, 2), name="x") y_ = tf.placeholder(tf.float32, shape=(None, 1), name="y") # モデルパラメータ a = tf.Variable(tf.zeros((2, 1)), name="a") # モデル式 y = tf.matmul(x, a) ⼊出⼒変数 à placeholder, パラメータ à Variable ・値を⼊れる"箱"を作成 (注意)shape = (訓練データの数, 次元数) ※"訓練データの数"は None にすると可変⻑扱い ・予測式(モデル)を記述 y x a 190 330 660 1 3 3 1 5 7
  • 32. 2.誤差関数と最適化⼿法を記述 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 32 # 誤差関数(loss) loss = tf.reduce_mean(tf.square(y_ - y)) # 最適化⼿段を選ぶ(最急降下法) train_step = tf.train.GradientDescentOptimizer(0.02).minimize(loss) ・誤差関数を記述 ふつうの回帰問題 à 平均⼆乗誤差 1 𝑁 6 𝑦7 − 𝑦79 2 : 7 ・最適化⼿法を選ぶ ・⼊⾨ à 最急降下法(勾配降下法) GradientDescent〜 ※どれを選ぶかで学習(最適化)の速さが変わる ・引数に適度な"学習率"を指定する ※⼤きすぎると学習失敗(発散), ⼩さすぎると学習が遅い
  • 33. 3. 訓練データを作成(or読込)し, 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 33 train_x = np.array([[1., 3.], [3., 1.], [5., 7.]]) train_y = np.array([190., 330., 660.]).reshape(3, 1) print "x=", train_x print "y=", train_y ※予測式で定義した形状(shape)に合わせること ※実⽤場⾯では,外部データを(ファイルやSQLなどから) 読みとって2次元配列に整形する。 190 330 660 1 3 3 1 5 7 train_x train_y
  • 34. 学習実⾏ 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 34 # (2) セッションを準備し,変数を初期化 sess = tf.Session() init = tf.initialize_all_variables() sess.run(init) # (3) 最急勾配法でパラメータ更新 (100回更新する) for i in range(100): _, l, a_ = sess.run([train_step, loss, a], feed_dict={x: train_x, y_: train_y}) if (i + 1) % 10 == 0: print "step=%3d, a1=%6.2f, a2=%6.2f, loss=%.2f" % (i + 1, a_[0], a_[1], l) # (4) 学習結果を出⼒ est_a = sess.run(a, feed_dict={x: train_x, y_: train_y}) print "Estimated: a1=%6.2f, a2=%6.2f" % (est_a[0], est_a[1]) おまじない(初期化) sess.run ( [出⼒, ...], feed_dict={⼊⼒リスト} ) sess.run を呼び出すことで、"出⼒"に指定した データフローグラフが計算される ※ 学習を回すには、先ほど作成した最適化⼿段(train_step)を 出⼒値に指定して sess.run を呼び出す。
  • 35. 参考: 実⾏結果 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 35 うまく学習できると... step= 10, a1= 70.35, a2= 46.23, loss=2189.06 step= 20, a1= 83.06, a2= 36.70, loss=771.90 step= 30, a1= 90.13, a2= 31.41, loss=334.34 step= 40, a1= 94.05, a2= 28.47, loss=199.24 step= 50, a1= 96.23, a2= 26.84, loss=157.52 step= 60, a1= 97.44, a2= 25.93, loss=144.64 step= 70, a1= 98.12, a2= 25.42, loss=140.67 step= 80, a1= 98.49, a2= 25.14, loss=139.44 step= 90, a1= 98.70, a2= 24.99, loss=139.06 step=100, a1= 98.81, a2= 24.90, loss=138.94 Estimated: a1= 98.81, a2= 24.90 順 調 に 低 下 推定されたパラメータの値
  • 36. 参考: 実⾏結果 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 36 学習率が⼤きすぎて学習失敗していると... step= 10, (中略), loss=72692296.00 step= 20, (中略), loss=54651076608.00 step= 30, (中略), loss=41087909494784.00 : : 順 調 に 増 加 学習率を⼩さくしてみる
  • 37. 4. 予測 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 37 # (1) 新しいデータを⽤意 new_x = np.array([2., 4.]).reshape(1, 2) # (2) 学習結果をつかって,予測実施 new_y = sess.run(y, feed_dict={x: new_x}) print new_y 予測でも sess.run を⽤いる feed_dictには新しい⼊⼒値を指定することに留意。(当然ですが...) (参考)実⾏結果 [[ 297.22738647]] 円円 × 2 + 円 × 4 ≒99 25 297
  • 38. 5. 後⽚付け 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 38 # セッションを閉じる sess.close()
  • 39. TensorFlow の処理の流れ (再掲) 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 39 # coding: utf-8 # 必要なモジュールを読み込む import numpy as np import matplotlib.pyplot as plt import tensorflow as tf # 1. 予測式(モデル)を記述する # ⼊⼒変数と出⼒変数のプレースホルダを⽣成 x = tf.placeholder(tf.float32, shape=(None, 2), name="x") y_ = tf.placeholder(tf.float32, shape=(None, 1), name="y") # モデルパラメータ a = tf.Variable(tf.zeros((2, 1)), name="a") # モデル式 y = tf.matmul(x, a) # 2. 学習に必要な関数を定義する # 誤差関数(loss) loss = tf.reduce_mean(tf.square(y_ - y)) # 最適化⼿段を選ぶ(最急降下法) train_step = tf.train.GradientDescentOptimizer(0.02).minimize(loss) # 3. 実際に学習処理を実⾏する # (1) 訓練データを⽣成する train_x = np.array([[1., 3.], [3., 1.], [5., 7.]]) train_y = np.array([190., 330., 660.]).reshape(3, 1) print "x=", train_x print "y=", train_y # (2) セッションを準備し,変数を初期化 sess = tf.Session() init = tf.initialize_all_variables() sess.run(init) # (3) 最急勾配法でパラメータ更新 (100回更新する) for i in range(100): _, l, a_ = sess.run([train_step, loss, a], feed_dict={x: train_x, y_: train_y}) if (i + 1) % 10 == 0: print "step=%3d, a1=%6.2f, a2=%6.2f, loss=%.2f" % (i + 1, a_[0], a_[1], l) # (4) 学習結果を出⼒ est_a = sess.run(a, feed_dict={x: train_x, y_: train_y}) print "Estimated: a1=%6.2f, a2=%6.2f" % (est_a[0], est_a[1]) # 4. 新しいデータに対して予測する # (1) 新しいデータを⽤意 new_x = np.array([2., 4.]).reshape(1, 2) # (2) 学習結果をつかって,予測実施 new_y = sess.run(y, feed_dict={x: new_x}) print new_y # 5. 後⽚付け # セッションを閉じる sess.close() 0. ライブラリをロード 1. 予測式(モデル)を記述 2. 誤差関数と最適化⼿法を記述 3. 訓練データを作成(or読込)し 学習実⾏ 4. 予測 5. 後⽚付け
  • 40. (補⾜) 線形回帰の応⽤場⾯ „ 家賃 Ø 家賃 = a * 駅からの距離 + b * 築年数 + c * 広さ „ 明⽇の客数 Ø 客数 = a * 気温 + b * 昨年同⽇の客数 などなど 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 40
  • 41. つぎの問題です 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 41 たかしくんは⼋百屋へ財布を預かってお使いに ⾏きました。しかしたかしくんはお⾦を 数えられません。 気まぐれおやじ⽈く、 リンゴ2個+ミカン3個、リンゴ0個+ミカン16個 なら買えるが、リンゴ3個+ミカン1個、 リンゴ2個+ミカン8個は買えないとのこと。 リンゴ1個+ミカン11個は買えますか? 例題2 識別問題
  • 42. 機械学習の流れ 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 42 学 習 予 測 ①予測式(モデル)をつくる ②誤差を計算する ③誤差を最⼩にする点を探す(最適化) 予測式&学習済パラメタで予測
  • 43. 式で表そうとしてみる... 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 43 円 ×1+ 円 円 ×2+ 円 × 3) 円 ×0+ 円 ×16) 円 ×3+ 円 × 1) 円 円 円 円 ×2+ 円 × 8 )円 ×11)円 -( -( -( -( -( 買える 買える 買えない 買えない ?
  • 44. 式で表そうとしてみる... 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 44 円 ×1+ 円 円 ×2+ 円 × 3) 円 ×0+ 円 ×16) 円 ×3+ 円 × 1) 円 円 円 円 ×2+ 円 × 8 )円 ×11)円 -( -( -( -( -( 買える 買える 買えない 買えない ? 予想される残⾦ 買える : 1 買えない : 0
  • 45. シグモイド曲線 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 45 予想される残⾦ 0 0.5 買える 買えない 𝜎 𝑢 = 1 1 + exp (−𝑢) ロジット
  • 46. 予測式(モデル)が作れた! 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 46 円 ×1+ 円 円 ×2+ 円 × 3)) = 1 円 ×0+ 円 ×16)) = 1 円 ×3+ 円 × 1)) = 0 円 円 円 円 ×2+ 円 × 8 )) = 0円 ×11) ) =円 -( -( -( -( -( ? σ( σ( σ( σ( σ(
  • 47. ロジスティック回帰 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 47 ⼊⼒層 出⼒層 ※ロジスティック「回帰」ですが,識別(分類)の⼿法です。 𝑦 = 𝜎(𝑏 + 𝑎1 𝑥1 + 𝑎2 𝑥2) 𝑦 𝑥1 𝑥2 × 𝑎1 × 𝑎2 リンゴの数 à ミカンの数 à ß買えるか リンゴ の単価 ↓ ↑ ミカン の単価 𝑏ß 財布の中⾝
  • 48. TensorFlow での実装 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 48 # coding: utf-8 # ### 必要なモジュールを読み込む import numpy as np import matplotlib.pyplot as plt import tensorflow as tf # ## TensorFlow でロジスティック回帰する # 1. 学習したいモデルを記述する # ⼊⼒変数と出⼒変数のプレースホルダを⽣成 x = tf.placeholder(tf.float32, shape=(None, 2), name="x") y_ = tf.placeholder(tf.float32, shape=(None, 1), name="y") # モデルパラメータ a = tf.Variable(-10 * tf.ones((2, 1)), name="a") b = tf.Variable(200., name="b") # モデル式 u = tf.matmul(x, a) + b y = tf.sigmoid(u) # 2. 学習やテストに必要な関数を定義する # 誤差関数(loss) loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(u, y_)) # 最適化⼿段(最急降下法) train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) # 3. 実際に学習処理を実⾏する # (1) 訓練データを⽣成する train_x = np.array([[2., 3.], [0., 16.], [3., 1.], [2., 8.]]) train_y = np.array([1., 1., 0., 0.]).reshape(4, 1) print "x=", train_x print "y=", train_y # (2) セッションを準備し,変数を初期化 sess = tf.Session() init = tf.initialize_all_variables() sess.run(init) # (3) 最急勾配法でパラメータ更新 (1000回更新する) for i in range(1000): _, l, a_, b_ = sess.run([train_step, loss, a, b], feed_dict={x: train_x, y_: train_y}) if (i + 1) % 100 == 0: print "step=%3d, a1=%6.2f, a2=%6.2f, b=%6.2f, loss=%.2f" % (i + 1, a_[0], a_[1], b_, l) # (4) 学習結果を出⼒ est_a, est_b = sess.run([a, b], feed_dict={x: train_x, y_: train_y}) print "Estimated: a1=%6.2f, a2=%6.2f, b=%6.2f" % (est_a[0], est_a[1], est_b) # 4. 新しいデータに対して予測する # (1) 新しいデータを⽤意 new_x = np.array([1., 11.]).reshape(1, 2) # (2) 学習結果をつかって,予測実施 new_y = sess.run(y, feed_dict={x: new_x}) print new_y # 5. 後⽚付け # セッションを閉じる sess.close() 0. ライブラリをロード 1. 予測式(モデル)を記述 2. 誤差関数と最適化⼿法を記述 3. 訓練データを作成(or読込)し 学習実⾏ 4. 予測 5. 後⽚付け ※線形回帰の実装と,ほとんど同⼀
  • 49. 1. 予測式(モデル)を記述 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 49 # 1. 学習したいモデルを記述する # ⼊⼒変数と出⼒変数のプレースホルダを⽣成 x = tf.placeholder(tf.float32, shape=(None, 2), name="x") y_ = tf.placeholder(tf.float32, shape=(None, 1), name="y") # モデルパラメータ a = tf.Variable(-10 * tf.ones((2, 1)), name="a") b = tf.Variable(200., name="b") # モデル式 u = tf.matmul(x, a) + b y = tf.sigmoid(u) 𝑦 = 𝜎(𝑏 + 𝑎1 𝑥1 + 𝑎2 𝑥2) ロジット: u 今回の予測式に合わせて モデルとパラメータを修正 ß追加
  • 50. ロジスティック回帰 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 50 ⼊⼒層 出⼒層 ※ロジスティック「回帰」ですが,識別(分類)の⼿法です。 𝑦 = 𝜎(𝑏 + 𝑎1 𝑥1 + 𝑎2 𝑥2) 𝑦 𝑥1 𝑥2 × 𝑎1 × 𝑎2 リンゴの数 à ミカンの数 à ß買えるか リンゴ の単価 ↓ ↑ ミカン の単価 𝑏ß 財布の中⾝
  • 51. 1. 予測式(モデル)を記述 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 51 # 1. 学習したいモデルを記述する # ⼊⼒変数と出⼒変数のプレースホルダを⽣成 x = tf.placeholder(tf.float32, shape=(None, 2), name="x") y_ = tf.placeholder(tf.float32, shape=(None, 1), name="y") # モデルパラメータ a = tf.Variable(-10 * tf.ones((2, 1)), name="a") b = tf.Variable(200., name="b") # モデル式 u = tf.matmul(x, a) + b y = tf.sigmoid(u) 𝑦 = 𝜎(𝑏 + 𝑎1 𝑥1 + 𝑎2 𝑥2) ロジット: u 今回の予測式に合わせて モデルとパラメータを修正 ß追加
  • 52. 2. 誤差関数と最適化⼿法を記述 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 52 # 誤差関数(loss) loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(u, y_)) # 最適化⼿段(最急降下法) train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) ・誤差関数を変更 識別(分類)問題 à クロスエントロピー 6 −𝑦7 log 𝑦79 − 1 − 𝑦7 log(1 − 𝑦79) : 7 正解 予測値: 𝑦79 正解 予測値: 𝑦79
  • 53. 3. 学習実⾏ 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 53 # (2) セッションを準備し,変数を初期化 sess = tf.Session() init = tf.initialize_all_variables() sess.run(init) # (3) 最急勾配法でパラメータ更新 (1000回更新する) for i in range(1000): _, l, a_, b_ = sess.run([train_step, loss, a, b], feed_dict={x: train_x, y_: train_y}) if (i + 1) % 100 == 0: print "step=%3d, a1=%6.2f, a2=%6.2f, b=%6.2f, loss=%.2f" % (i + 1, a_[0], a_[1], b_, l) # (4) 学習結果を出⼒ est_a, est_b = sess.run([a, b], feed_dict={x: train_x, y_: train_y}) print "Estimated: a1=%6.2f, a2=%6.2f, b=%6.2f" % (est_a[0], est_a[1], est_b) 線形回帰とほぼ同じ! 【変更箇所】 ・パラメータ b の出⼒を追加 ・更新回数を 100回 à 1000回 に ※更新回数は,対象問題やデータ,初期値,モデルなどでまちまちです。
  • 54. 学習結果 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 54 step=100, a1=-22.50, a2=-12.28, b=196.26, loss=42.75 step=200, a1=-35.00, a2=-12.06, b=192.68, loss=25.84 step=300, a1=-47.36, a2=-11.78, b=189.14, loss=9.24 step=400, a1=-55.13, a2=-11.51, b=186.75, loss=2.54 step=500, a1=-58.92, a2=-11.29, b=185.58, loss=0.02 step=600, a1=-59.26, a2=-11.23, b=185.47, loss=0.01 step=700, a1=-59.43, a2=-11.19, b=185.43, loss=0.00 step=800, a1=-59.53, a2=-11.17, b=185.39, loss=0.00 step=900, a1=-59.62, a2=-11.15, b=185.37, loss=0.00 step=1000, a1=-59.68, a2=-11.14, b=185.35, loss=0.00 Estimated: a1=-59.68, a2=-11.14, b=185.35 順 調 に 低 下 推定されたパラメータの値
  • 55. 予測結果 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 55 円 ×1+ 円 ×11) ) =円 -( 0.96σ( 185 60 11 リンゴ1個+ミカン11個は,おそらく買えそう
  • 56. (補⾜) 線形識別の応⽤場⾯ „ スパムメール判定 Ø スパム = σ(a * ”Discount” + b * “Drug” + c * “RayBan”) „ 来店予測 Ø 来店あり = σ(a * 前⽉来店回数+ b * DM送付 + c * … ) などなど 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 56
  • 57. 最後にもう少し複雑な問題 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 57 ⼿書き⽂字認識 MNISTデータ 0〜9の⼿書き⽂字画像を7万枚集めたデータセット 1枚の画像は 28 x 28 ピクセル (=768ピクセル) 7 3 4 6 多クラス識別(分類)問題 ⼊⼒: 出⼒:
  • 58. 機械学習の流れ 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 58 学 習 予 測 ①予測式(モデル)をつくる ②誤差を計算する ③誤差を最⼩にする点を探す(最適化) 予測式&学習済パラメタで予測
  • 59. one-hot ベクトル (one-of-K表現) 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 59 7 3 4 6 出⼒ラベル(1次元) 出⼒ラベル(10次元) 0 0 0 0 0 0 0 1 0 0 0 1 2 3 4 5 6 7 8 9 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1つの多クラス識別問題が 10個の2クラス識別問題へ分解
  • 60. 案1: ロジスティック回帰を拡張 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 60 ⼊⼒層 (768ノード) 出⼒層 (10ノード) 𝑦C 𝑦1 𝑦D 01 2 3 4 5 6 7 8 9 ロジスティクス回帰を⽂字種だけ並べる 数字“1”を表す?
  • 61. 案1: ロジスティック回帰を拡張 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 61 ⼊⼒層 (768ノード) 出⼒層 (10ノード) 𝑦C 𝑦1 𝑦D ソフトマックス(Softmax) 𝑦 = 𝑠𝑜𝑓𝑡𝑚𝑎𝑥(𝑥𝑊 + 𝑏)
  • 62. 案2: さらに中間層を追加 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 62 ⼊⼒層 (768ノード) 出⼒層 (10ノード) 𝑦C 𝑦1 𝑦D ニューラルネット(パーセプトロン) 隠れ層 (□ノード) 中間層(隠れ層)を追加すると,より複雑なパターンも⾒分けられる
  • 63. TensorFlow での実装 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 63 # 0. 必要なモジュールを読み込む import numpy as np import matplotlib.pyplot as plt import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data # MNISTデータの取得 mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) # 1. 学習したいモデルを記述する # ⼊⼒変数と出⼒変数のプレースホルダを⽣成 x = tf.placeholder(tf.float32, [None, 784]) y_ = tf.placeholder(tf.float32, [None, 10]) # モデルパラメータ(⼊⼒層:784ノード, 隠れ層:100ノード, 出⼒層:10ノード) W1 = tf.Variable(tf.truncated_normal([784, 100])) b1 = tf.Variable(tf.zeros([100])) W2 = tf.Variable(tf.truncated_normal([100, 10])) b2 = tf.Variable(tf.zeros([10])) # モデル式 h = tf.sigmoid(tf.matmul(x, W1) + b1) # ⼊⼒層->隠れ層 u = tf.matmul(h, W2) + b2 # 隠れ層->出⼒層 (ロジット) y = tf.nn.softmax(u) # 隠れ層->出⼒層 (ソフトマックス後) # 2. 学習やテストに必要な関数を定義する # 誤差関数(loss) loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(u, y_)) # 最適化⼿段(最急降下法) train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss) # 正答率(学習には⽤いない) correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1)) acc = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) # 3. 実際に学習処理を実⾏する # (1) セッションを準備し,変数を初期化 sess = tf.Session() init = tf.initialize_all_variables() sess.run(init) # (2) バッチ型確率的勾配降下法でパラメータ更新 for i in range(10000): # 訓練データから100サンプルをランダムに取得 batch_xs, batch_ys = mnist.train.next_batch(100) # 学習 _, l = sess.run([train_step, loss], feed_dict={x: batch_xs, y_: batch_ys}) if (i + 1) % 1000 == 0: print "step=%3d, loss=%.2f" % (i + 1, l) # 4. テスト⽤データに対して予測し,性能を確認 # (1) テスト⽤データを1000サンプル取得 new_x = mnist.test.images[0:1000] new_y_ = mnist.test.labels[0:1000] # (2) 予測と性能評価 accuracy, new_y = sess.run([acc, y], feed_dict={x:new_x , y_:new_y_ }) print "Accuracy (for test data): %6.2f%%" % accuracy print "True Label:", np.argmax(new_y_[0:15,], 1) print "Est Label:", np.argmax(new_y[0:15, ], 1) # 5. 後⽚付け # セッションを閉じる sess.close() 0. ライブラリをロード 1. 予測式(モデル)を記述 2. 誤差関数と最適化⼿法を記述 3. 訓練データを作成(or読込)し 学習実⾏ 4. 予測 5. 後⽚付け
  • 64. 1. 予測式(モデル)を記述 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 64 # ⼊⼒変数と出⼒変数のプレースホルダを⽣成 x = tf.placeholder(tf.float32, [None, 784]) y_ = tf.placeholder(tf.float32, [None, 10]) # モデルパラメータ(⼊⼒層:784ノード, 隠れ層:100ノード, 出⼒層:10ノード) W1 = tf.Variable(tf.truncated_normal([784, 100])) b1 = tf.Variable(tf.zeros([100])) W2 = tf.Variable(tf.truncated_normal([100, 10])) b2 = tf.Variable(tf.zeros([10])) # モデル式 h = tf.sigmoid(tf.matmul(x, W1) + b1) # ⼊⼒層->隠れ層 u = tf.matmul(h, W2) + b2 # 隠れ層->出⼒層 (ロジット) y = tf.nn.softmax(u) # 隠れ層->出⼒層 (ソフトマックス後) x 𝑥𝑊1 + 𝑏1 h 𝑠𝑖𝑔𝑚𝑜𝑖𝑑() 隠れ層 u y ℎ𝑊2 + 𝑏2 𝑠𝑜𝑓𝑡𝑚𝑎𝑥() 出⼒層⼊⼒層 784 10 予測式(モデル, ネットワーク)を実装
  • 65. 2. 誤差関数と最適化⼿法を記述 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 65 # 誤差関数(loss) loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(u, y_)) # 最適化⼿段(最急降下法) train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss) # 正答率(学習には⽤いない) correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1)) acc = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) ・誤差関数を変更 多クラス識別(分類)問題 à 多クラス⽤クロスエントロピー (softmax_cross_entropy_with_logits)
  • 66. 3. 学習実⾏ 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 66 # MNISTデータの取得 mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) # (2) バッチ型確率的勾配降下法でパラメータ更新 for i in range(10000): # 訓練データから100サンプルをランダムに取得 batch_xs, batch_ys = mnist.train.next_batch(100) # 学習 _, l = sess.run([train_step, loss], feed_dict={x: batch_xs, y_: batch_ys}) if (i + 1) % 1000 == 0: print "step=%3d, loss=%.2f" % (i + 1, l) ⼤規模なデータで学習する時の⼯夫 ・各ステップで,100個の訓練データを ランダムに取り出して学習 (確率的勾配降下法) à 速く学習が進む
  • 67. 参考: 学習結果 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 67 step=1000, loss=2.09 step=2000, loss=1.45 step=3000, loss=1.38 step=4000, loss=0.77 step=5000, loss=0.63 step=6000, loss=0.52 step=7000, loss=0.78 step=8000, loss=0.73 step=9000, loss=0.55 step=10000, loss=0.58 ゆ ら ぎ な が ら 低 下
  • 68. 4. 予測 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 68 # (1) テスト⽤データを1000サンプル取得 new_x = mnist.test.images[0:1000] new_y_ = mnist.test.labels[0:1000] # (2) 予測と性能評価 accuracy, new_y = sess.run([acc, y], feed_dict={x:new_x , y_:new_y_ }) print "Accuracy (for test data): %6.2f%%" % (accuracy * 100) print "True Label:", np.argmax(new_y_[0:15,], 1) print "Est Label:", np.argmax(new_y[0:15, ], 1) ここはこれまでと同様 【実⾏結果例】 Accuracy(test data): 80.0% True Label: [7 2 1 0 4 1 4 9 5 9 0 6 9 0 1] Est Label: [7 2 1 0 9 1 4 9 2 9 0 6 9 0 1]
  • 69. (補⾜) ⾼度な識別の応⽤場⾯ „ 顔検出 Ø それぞれの画像領域が顔といえるかどうかを推定 „ 表情認識 Ø 顔画像がどの表情(e.g. 笑, 怒, …)かを推定 „ (⼀般)物体認識 Ø それぞれの画像領域が何なのかを推定 などなど 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 69
  • 70. 階層はより深く… ⇒ “DeepLearning” „ AlexNet (2012) … 8層 „ GoogLeNet (2014) … 22層 „ ResiNet (2015) … 152層 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 70
  • 71. まとめ(機械学習の流れ) 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 71 学 習 予 測 ①予測式(モデル)をつくる ②誤差を計算する ③誤差を最⼩にする点を探す(最適化) 予測式&学習済パラメタで予測
  • 72. 参考書籍 2016-08-27 ☆2週連続!秋のテック祭 『はじめてのDeep Learning』 72 ディープラーニングの基礎的な理論と TensorFlowなどのサンプルコードあり ディープラーニングの 理論理解を深めたいかたはこちら。