SlideShare a Scribd company logo
1 of 61
Download to read offline
TensorFlow を使った
機械学習ことはじめ
2016-02-27
GDG京都 上野山
自己紹介
 電機メーカ勤務の
似非ソフト屋
 もともと組込み
 画像処理
 データ解析 と変遷
 最近は Android より
R言語(統計処理言語)と
格闘中
2
上野山 徹
うえのやま とおる
1. TensorFlow とは
2016-02-27 GDG京都 機械学習勉強会
3
TensorFlow とは
 Google社のMachine Intelligence
研究所が開発した数値計算ライブラリ
 Deep Learning をはじめとする 機械学習 の
研究や活用にGoogle社内で用いられている
 2011年から使用していたDistBeliefを強化
 複数のCPU/GPUや、複数のマシンに分散して
実行できる。(※複数マシン対応版は未公開)
 C++とPython 2or3 APIを持っている
 2015年11月にオープンソース(Apache2.0)公開
2016-02-27 GDG京都 機械学習勉強会
4
データフローグラフ
2016-02-27 GDG京都 機械学習勉強会
5
 掛け算
 足し算
 関数
テンソル が データフローグラフ 上を
流れるように計算処理している
テンソル 
(多次元配列)
𝐶 = … (𝑅𝑒𝐿𝑈 𝑏 + 𝑊𝑋 )
 数式で表現すると、
TensorFlow
巨大なデータにも使える
行列計算ライブラリ
ビッグデータの
機械学習に使える!出典)TensorFlow: Large-Scale Machine Learning
on Heterogeneous Distributed Systems, Google, 2015
TensorBoard
 データフローグラフのネットワーク構造や
学習経過をWeb上で確認できる
2016-02-27 GDG京都 機械学習勉強会
6
詳細は Web へ
2016-02-27 GDG京都 機械学習勉強会
7
https://speakerdeck.com/kazunori279/cloud-vision-api-and-tensorflow
例えば、佐藤さん@Google の資料など
2. TensorFlow を使った
機械学習
2016-02-27 GDG京都 機械学習勉強会
8
さっそく問題です
2016-02-27 GDG京都 機械学習勉強会
9
たかしくんは八百屋へお使いに行きました。
リンゴ1個とミカン3個を買うと190円,
リンゴ3個とミカン1個を買うと330円
するようです。
リンゴ2個とミカン4個を買うと
いくらになるでしょうか?
例題1
円
式で表すと...
2016-02-27 GDG京都 機械学習勉強会
10
円 × 1 + 円 × 3 = 190 円
円 × 3 + 円 × 1 = 330 円
円 × 2 + 円 × 4 = ?
円
回答
2016-02-27 GDG京都 機械学習勉強会
11
円 × 1 + 円 × 3 = 190 円
円 × 3 + 円 × 1 = 330 円
円 × 2 + 円 × 4 = ?
100 30
100 30
100 30
円
回答
2016-02-27 GDG京都 機械学習勉強会
12
円 × 1 + 円 × 3 = 190 円
円 × 3 + 円 × 1 = 330 円
円 × 2 + 円 × 4 = 320
100 30
100 30
100 30
円
これも機械学習(回帰)の問題です!
2016-02-27 GDG京都 機械学習勉強会
13
円 × 1 + 円 × 3 = 190 円
円 × 3 + 円 × 1 = 330 円
円 × 2 + 円 × 4 = 320
100 30
100 30
100 30
学習
予測
実績データからパラメータを推定
パラメータを使って結果を予測
実は店のおやじは気まぐれでした
2016-02-27 GDG京都 機械学習勉強会
14
円
円 × 1 + 円 × 3 = 190 円
円 × 3 + 円 × 1 = 330 円
円 × 2 + 円 × 4 = ?
円 × 5 + 円 × 7 = 660 円
実は店のおやじは気まぐれでした
2016-02-27 GDG京都 機械学習勉強会
15
円
円 × 1 + 円 × 3 = 190 円
円 × 3 + 円 × 1 = 330 円
円 × 2 + 円 × 4 = ?
円 × 5 + 円 × 7 = 660 円
100 30
100 30
100 30
どうやってパラメータ(単価)を見つけるか?
2016-02-27 GDG京都 機械学習勉強会
16
考え方
合計金額の誤差が小さくなるような
単価を採用しよう!
円 × 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-02-27 GDG京都 機械学習勉強会
17
ミカン
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-02-27 GDG京都 機械学習勉強会
18
ミカン
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-02-27 GDG京都 機械学習勉強会
19
ミカン
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-02-27 GDG京都 機械学習勉強会
20
円
円 × 1 + 円 × 3 ≒ 190 円
円 × 3 + 円 × 1 ≒ 330 円
円 × 2 + 円 × 4 ≒
円 × 5 + 円 × 7 ≒ 660 円
90 30
90 30
90 30
90 30 310
ここまでの振り返り
2016-02-27 GDG京都 機械学習勉強会
21
TensorFlowでも同じように書いていく
学
習
予
測
①予測式(モデル)をつくる
②誤差を計算する
③誤差を最小にする点を探す(最適化)
予測式&学習済パラメタで予測
線形回帰(線形重回帰)の1つ
2016-02-27 GDG京都 機械学習勉強会
22
入力層 出力層
𝑦
𝑥1
𝑥2
× 𝑎1
𝑦 = 𝑎1 𝑥1 + 𝑎2 𝑥2
× 𝑎2
リンゴの数 
ミカンの数 
合計金額
リンゴ
の単価
↓
↑
ミカン
の単価
TensorFlow の処理の流れ
2016-02-27 GDG京都 機械学習勉強会
23
# 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-02-27 GDG京都 機械学習勉強会
24
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
TensorFlow のほか
高速な配列演算パッケージであるNumPyや
プロットしたい場合はmatplotlib.pyplotなど
使用するライブラリをロードする
1. 予測式(モデル)を記述
2016-02-27 GDG京都 機械学習勉強会
25
# 入力変数と出力変数のプレースホルダを生成
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-02-27 GDG京都 機械学習勉強会
26
# 誤差関数(loss)
loss = tf.reduce_mean(tf.square(y_ - y))
# 最適化手段を選ぶ(最急降下法)
train_step = tf.train.GradientDescentOptimizer(0.02).minimize(loss)
・誤差関数を記述
ふつうの回帰問題  平均二乗誤差
1
𝑁
𝑦𝑖 − 𝑦𝑖
2
𝑁
𝑖
・最適化手法を選ぶ
・入門  最急降下法(勾配降下法) GradientDescent~
※どれを選ぶかで学習(最適化)の速さが変わる
・引数に適度な"学習率"を指定する
※大きすぎると学習失敗(発散), 小さすぎると学習が遅い
3. 訓練データを作成(or読込)し,
2016-02-27 GDG京都 機械学習勉強会
27
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-02-27 GDG京都 機械学習勉強会
28
# (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-02-27 GDG京都 機械学習勉強会
29
うまく学習できると...
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-02-27 GDG京都 機械学習勉強会
30
学習率が大きすぎて学習失敗していると...
step= 10, (中略), loss=72692296.00
step= 20, (中略), loss=54651076608.00
step= 30, (中略), loss=41087909494784.00
: :
順
調
に
増
加
学習率を小さくしてみる
4. 予測
2016-02-27 GDG京都 機械学習勉強会
31
# (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-02-27 GDG京都 機械学習勉強会
32
# セッションを閉じる
sess.close()
TensorFlow の処理の流れ (再掲)
2016-02-27 GDG京都 機械学習勉強会
33
# 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-02-27 GDG京都 機械学習勉強会
34
つぎの問題です
2016-02-27 GDG京都 機械学習勉強会
35
たかしくんは八百屋へ財布を預かってお使いに
行きました。しかしたかしくんはお金を
数えられません。
気まぐれおやじ曰く、
リンゴ2個+ミカン3個、リンゴ0個+ミカン16個
なら買えるが、リンゴ3個+ミカン1個、
リンゴ2個+ミカン8個は買えないとのこと。
リンゴ1個+ミカン11個は買えますか?
例題2
識別問題
機械学習の流れ
2016-02-27 GDG京都 機械学習勉強会
36
学
習
予
測
①予測式(モデル)をつくる
②誤差を計算する
③誤差を最小にする点を探す(最適化)
予測式&学習済パラメタで予測
式で表そうとしてみる...
2016-02-27 GDG京都 機械学習勉強会
37
円 ×1+ 円
円 ×2+ 円 × 3)
円 ×0+ 円 ×16)
円 ×3+ 円 × 1)
円
円
円
円 ×2+ 円 × 8 )円
×11)円
-(
-(
-(
-(
-(
買える
買える
買えない
買えない
?
式で表そうとしてみる...
2016-02-27 GDG京都 機械学習勉強会
38
円 ×1+ 円
円 ×2+ 円 × 3)
円 ×0+ 円 ×16)
円 ×3+ 円 × 1)
円
円
円
円 ×2+ 円 × 8 )円
×11)円
-(
-(
-(
-(
-(
買える
買える
買えない
買えない
?
予想される残金 買える : 1
買えない : 0
シグモイド曲線
2016-02-27 GDG京都 機械学習勉強会
39
予想される残金
0
0.5
買える
買えない
𝜎 𝑢 =
1
1 + exp(−𝑢)
ロジット
予測式(モデル)が作れた!
2016-02-27 GDG京都 機械学習勉強会
40
円 ×1+ 円
円 ×2+ 円 × 3)) = 1
円 ×0+ 円 ×16)) = 1
円 ×3+ 円 × 1)) = 0
円
円
円
円 ×2+ 円 × 8 )) = 0円
×11) ) =円
-(
-(
-(
-(
-( ?
σ(
σ(
σ(
σ(
σ(
ロジスティック回帰
2016-02-27 GDG京都 機械学習勉強会
41
入力層 出力層
※ロジスティック「回帰」ですが,識別(分類)の手法です。
𝑦 = 𝜎(𝑏 + 𝑎1 𝑥1 + 𝑎2 𝑥2)
𝑦
𝑥1
𝑥2
× 𝑎1
× 𝑎2
リンゴの数 
ミカンの数 
買えるか
リンゴ
の単価
↓
↑
ミカン
の単価
𝑏
財布の中身
TensorFlow での実装
2016-02-27 GDG京都 機械学習勉強会
42
# 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-02-27 GDG京都 機械学習勉強会
43
# 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-02-27 GDG京都 機械学習勉強会
44
# 誤差関数(loss)
loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(u, y_))
# 最適化手段(最急降下法)
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
・誤差関数を変更
識別(分類)問題  クロスエントロピー
−𝑦𝑖 log 𝑦𝑖 − 1 − 𝑦𝑖 log(1 − 𝑦𝑖)
𝑁
𝑖
正解
予測値: 𝑦𝑖
正解
予測値: 𝑦𝑖
3. 学習実行
2016-02-27 GDG京都 機械学習勉強会
45
# (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-02-27 GDG京都 機械学習勉強会
46
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-02-27 GDG京都 機械学習勉強会
47
円 ×1+ 円 ×11) ) =円 -( 0.96σ( 185 60 11
リンゴ1個+ミカン11個は,おそらく買えそう
最後にもう少し複雑な問題
2016-02-27 GDG京都 機械学習勉強会
48
手書き文字認識
MNISTデータ
0~9の手書き文字画像を7万枚集めたデータセット
1枚の画像は 28 x 28 ピクセル
7 3 4 6
多クラス識別(分類)問題
入力:
出力:
機械学習の流れ
2016-02-27 GDG京都 機械学習勉強会
49
学
習
予
測
①予測式(モデル)をつくる
②誤差を計算する
③誤差を最小にする点を探す(最適化)
予測式&学習済パラメタで予測
one-hot ベクトル (one-of-K表現)
2016-02-27 GDG京都 機械学習勉強会
50
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-02-27 GDG京都 機械学習勉強会
51
入力層
(768ノード)
出力層
(10ノード)
𝑦0
𝑦1
𝑦9
ソフトマックス(Softmax) 𝑦 = 𝑠𝑜𝑓𝑡𝑚𝑎𝑥(𝑥𝑊 + 𝑏)
案1: ロジスティック回帰を拡張
2016-02-27 GDG京都 機械学習勉強会
52
入力層
(768ノード)
出力層
(10ノード)
𝑦0
𝑦1
𝑦9
ソフトマックス(Softmax)
案2: さらに中間層を追加
2016-02-27 GDG京都 機械学習勉強会
53
入力層
(768ノード)
出力層
(10ノード)
𝑦0
𝑦1
𝑦9
ニューラルネット(パーセプトロン)
隠れ層
(□ノード)
中間層(隠れ層)を追加すると,より複雑なパターンも見分けられる
TensorFlow での実装
2016-02-27 GDG京都 機械学習勉強会
54
# 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-02-27 GDG京都 機械学習勉強会
55
# 入力変数と出力変数のプレースホルダを生成
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-02-27 GDG京都 機械学習勉強会
56
# 誤差関数(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-02-27 GDG京都 機械学習勉強会
57
# 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-02-27 GDG京都 機械学習勉強会
58
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-02-27 GDG京都 機械学習勉強会
59
# (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]
まとめ(機械学習の流れ)
2016-02-27 GDG京都 機械学習勉強会
60
学
習
予
測
①予測式(モデル)をつくる
②誤差を計算する
③誤差を最小にする点を探す(最適化)
予測式&学習済パラメタで予測
参考書籍
2016-02-27 GDG京都 機械学習勉強会
61
ディープラーニングの基礎的な理論と
TensorFlowなどのサンプルコードあり
ディープラーニングの
理論理解を深めたいかたはこちら。

More Related Content

What's hot

最適化計算の概要まとめ
最適化計算の概要まとめ最適化計算の概要まとめ
最適化計算の概要まとめYuichiro MInato
 
機械学習モデルの判断根拠の説明
機械学習モデルの判断根拠の説明機械学習モデルの判断根拠の説明
機械学習モデルの判断根拠の説明Satoshi Hara
 
[DL輪読会]Flow-based Deep Generative Models
[DL輪読会]Flow-based Deep Generative Models[DL輪読会]Flow-based Deep Generative Models
[DL輪読会]Flow-based Deep Generative ModelsDeep Learning JP
 
Skip Connection まとめ(Neural Network)
Skip Connection まとめ(Neural Network)Skip Connection まとめ(Neural Network)
Skip Connection まとめ(Neural Network)Yamato OKAMOTO
 
スパースモデリングによる多次元信号・画像復元
スパースモデリングによる多次元信号・画像復元スパースモデリングによる多次元信号・画像復元
スパースモデリングによる多次元信号・画像復元Shogo Muramatsu
 
[DL輪読会]Focal Loss for Dense Object Detection
[DL輪読会]Focal Loss for Dense Object Detection[DL輪読会]Focal Loss for Dense Object Detection
[DL輪読会]Focal Loss for Dense Object DetectionDeep Learning JP
 
畳み込みニューラルネットワークの研究動向
畳み込みニューラルネットワークの研究動向畳み込みニューラルネットワークの研究動向
畳み込みニューラルネットワークの研究動向Yusuke Uchida
 
密度比推定による時系列データの異常検知
密度比推定による時系列データの異常検知密度比推定による時系列データの異常検知
密度比推定による時系列データの異常検知- Core Concept Technologies
 
生成系ニューラルネットワークまとめ Summary of Generative Neural Network
生成系ニューラルネットワークまとめ Summary of  Generative Neural Network生成系ニューラルネットワークまとめ Summary of  Generative Neural Network
生成系ニューラルネットワークまとめ Summary of Generative Neural NetworkYouichiro Miyake
 
ようやく分かった!最尤推定とベイズ推定
ようやく分かった!最尤推定とベイズ推定ようやく分かった!最尤推定とベイズ推定
ようやく分かった!最尤推定とベイズ推定Akira Masuda
 
「深層学習」第6章 畳込みニューラルネット
「深層学習」第6章 畳込みニューラルネット「深層学習」第6章 畳込みニューラルネット
「深層学習」第6章 畳込みニューラルネットKen'ichi Matsui
 
2014 3 13(テンソル分解の基礎)
2014 3 13(テンソル分解の基礎)2014 3 13(テンソル分解の基礎)
2014 3 13(テンソル分解の基礎)Tatsuya Yokota
 
時系列問題に対するCNNの有用性検証
時系列問題に対するCNNの有用性検証時系列問題に対するCNNの有用性検証
時系列問題に対するCNNの有用性検証Masaharu Kinoshita
 
畳み込みニューラルネットワークの高精度化と高速化
畳み込みニューラルネットワークの高精度化と高速化畳み込みニューラルネットワークの高精度化と高速化
畳み込みニューラルネットワークの高精度化と高速化Yusuke Uchida
 
モデル高速化百選
モデル高速化百選モデル高速化百選
モデル高速化百選Yusuke Uchida
 
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料 「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料 Ken'ichi Matsui
 
論文紹介 Pixel Recurrent Neural Networks
論文紹介 Pixel Recurrent Neural Networks論文紹介 Pixel Recurrent Neural Networks
論文紹介 Pixel Recurrent Neural NetworksSeiya Tokui
 
最適輸送入門
最適輸送入門最適輸送入門
最適輸送入門joisino
 
XAI (説明可能なAI) の必要性
XAI (説明可能なAI) の必要性XAI (説明可能なAI) の必要性
XAI (説明可能なAI) の必要性西岡 賢一郎
 
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料Yusuke Uchida
 

What's hot (20)

最適化計算の概要まとめ
最適化計算の概要まとめ最適化計算の概要まとめ
最適化計算の概要まとめ
 
機械学習モデルの判断根拠の説明
機械学習モデルの判断根拠の説明機械学習モデルの判断根拠の説明
機械学習モデルの判断根拠の説明
 
[DL輪読会]Flow-based Deep Generative Models
[DL輪読会]Flow-based Deep Generative Models[DL輪読会]Flow-based Deep Generative Models
[DL輪読会]Flow-based Deep Generative Models
 
Skip Connection まとめ(Neural Network)
Skip Connection まとめ(Neural Network)Skip Connection まとめ(Neural Network)
Skip Connection まとめ(Neural Network)
 
スパースモデリングによる多次元信号・画像復元
スパースモデリングによる多次元信号・画像復元スパースモデリングによる多次元信号・画像復元
スパースモデリングによる多次元信号・画像復元
 
[DL輪読会]Focal Loss for Dense Object Detection
[DL輪読会]Focal Loss for Dense Object Detection[DL輪読会]Focal Loss for Dense Object Detection
[DL輪読会]Focal Loss for Dense Object Detection
 
畳み込みニューラルネットワークの研究動向
畳み込みニューラルネットワークの研究動向畳み込みニューラルネットワークの研究動向
畳み込みニューラルネットワークの研究動向
 
密度比推定による時系列データの異常検知
密度比推定による時系列データの異常検知密度比推定による時系列データの異常検知
密度比推定による時系列データの異常検知
 
生成系ニューラルネットワークまとめ Summary of Generative Neural Network
生成系ニューラルネットワークまとめ Summary of  Generative Neural Network生成系ニューラルネットワークまとめ Summary of  Generative Neural Network
生成系ニューラルネットワークまとめ Summary of Generative Neural Network
 
ようやく分かった!最尤推定とベイズ推定
ようやく分かった!最尤推定とベイズ推定ようやく分かった!最尤推定とベイズ推定
ようやく分かった!最尤推定とベイズ推定
 
「深層学習」第6章 畳込みニューラルネット
「深層学習」第6章 畳込みニューラルネット「深層学習」第6章 畳込みニューラルネット
「深層学習」第6章 畳込みニューラルネット
 
2014 3 13(テンソル分解の基礎)
2014 3 13(テンソル分解の基礎)2014 3 13(テンソル分解の基礎)
2014 3 13(テンソル分解の基礎)
 
時系列問題に対するCNNの有用性検証
時系列問題に対するCNNの有用性検証時系列問題に対するCNNの有用性検証
時系列問題に対するCNNの有用性検証
 
畳み込みニューラルネットワークの高精度化と高速化
畳み込みニューラルネットワークの高精度化と高速化畳み込みニューラルネットワークの高精度化と高速化
畳み込みニューラルネットワークの高精度化と高速化
 
モデル高速化百選
モデル高速化百選モデル高速化百選
モデル高速化百選
 
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料 「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
 
論文紹介 Pixel Recurrent Neural Networks
論文紹介 Pixel Recurrent Neural Networks論文紹介 Pixel Recurrent Neural Networks
論文紹介 Pixel Recurrent Neural Networks
 
最適輸送入門
最適輸送入門最適輸送入門
最適輸送入門
 
XAI (説明可能なAI) の必要性
XAI (説明可能なAI) の必要性XAI (説明可能なAI) の必要性
XAI (説明可能なAI) の必要性
 
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
 

Viewers also liked

TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。tak9029
 
機械学習概論 講義テキスト
機械学習概論 講義テキスト機械学習概論 講義テキスト
機械学習概論 講義テキストEtsuji Nakai
 
Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015Ryosuke Okuta
 
機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual TalksYuya Unno
 
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tatsuya Tojima
 
Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識Ken Morishita
 
scikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアルscikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアル敦志 金谷
 
機械学習によるデータ分析まわりのお話
機械学習によるデータ分析まわりのお話機械学習によるデータ分析まわりのお話
機械学習によるデータ分析まわりのお話Ryota Kamoshida
 
深層学習とTensorFlow入門
深層学習とTensorFlow入門深層学習とTensorFlow入門
深層学習とTensorFlow入門tak9029
 
TensorFlowによるニューラルネットワーク入門
TensorFlowによるニューラルネットワーク入門TensorFlowによるニューラルネットワーク入門
TensorFlowによるニューラルネットワーク入門Etsuji Nakai
 
基礎からのベイズ統計学 2章 勉強会資料
基礎からのベイズ統計学 2章 勉強会資料基礎からのベイズ統計学 2章 勉強会資料
基礎からのベイズ統計学 2章 勉強会資料at grandpa
 
基礎からのベイズ統計学 輪読会資料 第1章 確率に関するベイズの定理
基礎からのベイズ統計学 輪読会資料 第1章 確率に関するベイズの定理基礎からのベイズ統計学 輪読会資料 第1章 確率に関するベイズの定理
基礎からのベイズ統計学 輪読会資料 第1章 確率に関するベイズの定理Ken'ichi Matsui
 
統計学の基礎の基礎
統計学の基礎の基礎統計学の基礎の基礎
統計学の基礎の基礎Ken'ichi Matsui
 
TensorFlowを使ってテキストをクラス分類してみた
TensorFlowを使ってテキストをクラス分類してみたTensorFlowを使ってテキストをクラス分類してみた
TensorFlowを使ってテキストをクラス分類してみたYuya Kato
 
サルでもわかるディープラーニング入門 (2017年) (In Japanese)
サルでもわかるディープラーニング入門 (2017年) (In Japanese)サルでもわかるディープラーニング入門 (2017年) (In Japanese)
サルでもわかるディープラーニング入門 (2017年) (In Japanese)Toshihiko Yamakami
 
これから始める人の為のディープラーニング基礎講座
これから始める人の為のディープラーニング基礎講座これから始める人の為のディープラーニング基礎講座
これから始める人の為のディープラーニング基礎講座NVIDIA Japan
 
NVIDIA Seminar ディープラーニングによる画像認識と応用事例
NVIDIA Seminar ディープラーニングによる画像認識と応用事例NVIDIA Seminar ディープラーニングによる画像認識と応用事例
NVIDIA Seminar ディープラーニングによる画像認識と応用事例Takayoshi Yamashita
 
ディープラーニングの最新動向
ディープラーニングの最新動向ディープラーニングの最新動向
ディープラーニングの最新動向Preferred Networks
 
ディープラーニングが活かすIoT
ディープラーニングが活かすIoTディープラーニングが活かすIoT
ディープラーニングが活かすIoTPreferred Networks
 
Deep Learning基本理論とTensorFlow
Deep Learning基本理論とTensorFlowDeep Learning基本理論とTensorFlow
Deep Learning基本理論とTensorFlowTadaichiro Nakano
 

Viewers also liked (20)

TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。TensorFlowで会話AIを作ってみた。
TensorFlowで会話AIを作ってみた。
 
機械学習概論 講義テキスト
機械学習概論 講義テキスト機械学習概論 講義テキスト
機械学習概論 講義テキスト
 
Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015
 
機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks
 
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
 
Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識
 
scikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアルscikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアル
 
機械学習によるデータ分析まわりのお話
機械学習によるデータ分析まわりのお話機械学習によるデータ分析まわりのお話
機械学習によるデータ分析まわりのお話
 
深層学習とTensorFlow入門
深層学習とTensorFlow入門深層学習とTensorFlow入門
深層学習とTensorFlow入門
 
TensorFlowによるニューラルネットワーク入門
TensorFlowによるニューラルネットワーク入門TensorFlowによるニューラルネットワーク入門
TensorFlowによるニューラルネットワーク入門
 
基礎からのベイズ統計学 2章 勉強会資料
基礎からのベイズ統計学 2章 勉強会資料基礎からのベイズ統計学 2章 勉強会資料
基礎からのベイズ統計学 2章 勉強会資料
 
基礎からのベイズ統計学 輪読会資料 第1章 確率に関するベイズの定理
基礎からのベイズ統計学 輪読会資料 第1章 確率に関するベイズの定理基礎からのベイズ統計学 輪読会資料 第1章 確率に関するベイズの定理
基礎からのベイズ統計学 輪読会資料 第1章 確率に関するベイズの定理
 
統計学の基礎の基礎
統計学の基礎の基礎統計学の基礎の基礎
統計学の基礎の基礎
 
TensorFlowを使ってテキストをクラス分類してみた
TensorFlowを使ってテキストをクラス分類してみたTensorFlowを使ってテキストをクラス分類してみた
TensorFlowを使ってテキストをクラス分類してみた
 
サルでもわかるディープラーニング入門 (2017年) (In Japanese)
サルでもわかるディープラーニング入門 (2017年) (In Japanese)サルでもわかるディープラーニング入門 (2017年) (In Japanese)
サルでもわかるディープラーニング入門 (2017年) (In Japanese)
 
これから始める人の為のディープラーニング基礎講座
これから始める人の為のディープラーニング基礎講座これから始める人の為のディープラーニング基礎講座
これから始める人の為のディープラーニング基礎講座
 
NVIDIA Seminar ディープラーニングによる画像認識と応用事例
NVIDIA Seminar ディープラーニングによる画像認識と応用事例NVIDIA Seminar ディープラーニングによる画像認識と応用事例
NVIDIA Seminar ディープラーニングによる画像認識と応用事例
 
ディープラーニングの最新動向
ディープラーニングの最新動向ディープラーニングの最新動向
ディープラーニングの最新動向
 
ディープラーニングが活かすIoT
ディープラーニングが活かすIoTディープラーニングが活かすIoT
ディープラーニングが活かすIoT
 
Deep Learning基本理論とTensorFlow
Deep Learning基本理論とTensorFlowDeep Learning基本理論とTensorFlow
Deep Learning基本理論とTensorFlow
 

Similar to TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)

TensorFlowで機械学習ことはじめ(summer edition)
TensorFlowで機械学習ことはじめ(summer edition)TensorFlowで機械学習ことはじめ(summer edition)
TensorFlowで機械学習ことはじめ(summer edition)徹 上野山
 
独立成分分析とPerfume
独立成分分析とPerfume独立成分分析とPerfume
独立成分分析とPerfumeYurie Oka
 
RDB入門 ~アプリケーション開発者が陥りやすいDB開発の落とし穴~
RDB入門 ~アプリケーション開発者が陥りやすいDB開発の落とし穴~RDB入門 ~アプリケーション開発者が陥りやすいDB開発の落とし穴~
RDB入門 ~アプリケーション開発者が陥りやすいDB開発の落とし穴~nisobe58
 
ASTERIA WARPをもっと便利に使いこなすためのtips紹介
ASTERIA WARPをもっと便利に使いこなすためのtips紹介ASTERIA WARPをもっと便利に使いこなすためのtips紹介
ASTERIA WARPをもっと便利に使いこなすためのtips紹介ASTERIA User Group
 
S2 第3回DSEカンファレンス資料_okura
S2 第3回DSEカンファレンス資料_okuraS2 第3回DSEカンファレンス資料_okura
S2 第3回DSEカンファレンス資料_okurayoroz okura
 
QGISプログラミング入門 FOSS4G 2013 Tokyo
QGISプログラミング入門 FOSS4G 2013 TokyoQGISプログラミング入門 FOSS4G 2013 Tokyo
QGISプログラミング入門 FOSS4G 2013 TokyoKosuke Asahi
 
RとStanでクラウドセットアップ時間を分析してみたら #TokyoR
RとStanでクラウドセットアップ時間を分析してみたら #TokyoRRとStanでクラウドセットアップ時間を分析してみたら #TokyoR
RとStanでクラウドセットアップ時間を分析してみたら #TokyoRShuyo Nakatani
 
kagami_comput2015_7
kagami_comput2015_7kagami_comput2015_7
kagami_comput2015_7swkagami
 
【Unity道場】ゲーム制作に使う数学を学習しよう
【Unity道場】ゲーム制作に使う数学を学習しよう【Unity道場】ゲーム制作に使う数学を学習しよう
【Unity道場】ゲーム制作に使う数学を学習しようUnity Technologies Japan K.K.
 
kagami_comput2016_07
kagami_comput2016_07kagami_comput2016_07
kagami_comput2016_07swkagami
 
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato KinugawaCODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato KinugawaCODE BLUE
 
強化学習による 「Montezuma's Revenge」への挑戦
強化学習による 「Montezuma's Revenge」への挑戦強化学習による 「Montezuma's Revenge」への挑戦
強化学習による 「Montezuma's Revenge」への挑戦孝好 飯塚
 
実践で学ぶネットワーク分析
実践で学ぶネットワーク分析実践で学ぶネットワーク分析
実践で学ぶネットワーク分析Mitsunori Sato
 
「データサイエンティスト・ブーム」後の企業におけるデータ分析者像を探る
「データサイエンティスト・ブーム」後の企業におけるデータ分析者像を探る「データサイエンティスト・ブーム」後の企業におけるデータ分析者像を探る
「データサイエンティスト・ブーム」後の企業におけるデータ分析者像を探るTakashi J OZAKI
 
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V6
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V6データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V6
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V6Shunsuke Nakamura
 
最近のRのランダムフォレストパッケージ -ranger/Rborist-
最近のRのランダムフォレストパッケージ -ranger/Rborist-最近のRのランダムフォレストパッケージ -ranger/Rborist-
最近のRのランダムフォレストパッケージ -ranger/Rborist-Shintaro Fukushima
 
マルチコアを用いた画像処理
マルチコアを用いた画像処理マルチコアを用いた画像処理
マルチコアを用いた画像処理Norishige Fukushima
 

Similar to TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会) (20)

TensorFlowで機械学習ことはじめ(summer edition)
TensorFlowで機械学習ことはじめ(summer edition)TensorFlowで機械学習ことはじめ(summer edition)
TensorFlowで機械学習ことはじめ(summer edition)
 
独立成分分析とPerfume
独立成分分析とPerfume独立成分分析とPerfume
独立成分分析とPerfume
 
RDB入門 ~アプリケーション開発者が陥りやすいDB開発の落とし穴~
RDB入門 ~アプリケーション開発者が陥りやすいDB開発の落とし穴~RDB入門 ~アプリケーション開発者が陥りやすいDB開発の落とし穴~
RDB入門 ~アプリケーション開発者が陥りやすいDB開発の落とし穴~
 
ASTERIA WARPをもっと便利に使いこなすためのtips紹介
ASTERIA WARPをもっと便利に使いこなすためのtips紹介ASTERIA WARPをもっと便利に使いこなすためのtips紹介
ASTERIA WARPをもっと便利に使いこなすためのtips紹介
 
JAWSUG 20210128
JAWSUG 20210128JAWSUG 20210128
JAWSUG 20210128
 
S2 第3回DSEカンファレンス資料_okura
S2 第3回DSEカンファレンス資料_okuraS2 第3回DSEカンファレンス資料_okura
S2 第3回DSEカンファレンス資料_okura
 
QGISプログラミング入門 FOSS4G 2013 Tokyo
QGISプログラミング入門 FOSS4G 2013 TokyoQGISプログラミング入門 FOSS4G 2013 Tokyo
QGISプログラミング入門 FOSS4G 2013 Tokyo
 
NGK2022S
NGK2022SNGK2022S
NGK2022S
 
RとStanでクラウドセットアップ時間を分析してみたら #TokyoR
RとStanでクラウドセットアップ時間を分析してみたら #TokyoRRとStanでクラウドセットアップ時間を分析してみたら #TokyoR
RとStanでクラウドセットアップ時間を分析してみたら #TokyoR
 
kagami_comput2015_7
kagami_comput2015_7kagami_comput2015_7
kagami_comput2015_7
 
【Unity道場】ゲーム制作に使う数学を学習しよう
【Unity道場】ゲーム制作に使う数学を学習しよう【Unity道場】ゲーム制作に使う数学を学習しよう
【Unity道場】ゲーム制作に使う数学を学習しよう
 
kagami_comput2016_07
kagami_comput2016_07kagami_comput2016_07
kagami_comput2016_07
 
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato KinugawaCODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
 
強化学習による 「Montezuma's Revenge」への挑戦
強化学習による 「Montezuma's Revenge」への挑戦強化学習による 「Montezuma's Revenge」への挑戦
強化学習による 「Montezuma's Revenge」への挑戦
 
実践で学ぶネットワーク分析
実践で学ぶネットワーク分析実践で学ぶネットワーク分析
実践で学ぶネットワーク分析
 
Tokyo r33 beginner
Tokyo r33 beginnerTokyo r33 beginner
Tokyo r33 beginner
 
「データサイエンティスト・ブーム」後の企業におけるデータ分析者像を探る
「データサイエンティスト・ブーム」後の企業におけるデータ分析者像を探る「データサイエンティスト・ブーム」後の企業におけるデータ分析者像を探る
「データサイエンティスト・ブーム」後の企業におけるデータ分析者像を探る
 
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V6
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V6データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V6
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V6
 
最近のRのランダムフォレストパッケージ -ranger/Rborist-
最近のRのランダムフォレストパッケージ -ranger/Rborist-最近のRのランダムフォレストパッケージ -ranger/Rborist-
最近のRのランダムフォレストパッケージ -ranger/Rborist-
 
マルチコアを用いた画像処理
マルチコアを用いた画像処理マルチコアを用いた画像処理
マルチコアを用いた画像処理
 

Recently uploaded

IGDA Japan SIG Audio #22 オンラインセミナー VRの知る.pdf
IGDA Japan SIG Audio #22 オンラインセミナー VRの知る.pdfIGDA Japan SIG Audio #22 オンラインセミナー VRの知る.pdf
IGDA Japan SIG Audio #22 オンラインセミナー VRの知る.pdfIGDA Japan SIG-Audio
 
AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。
AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。
AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。iPride Co., Ltd.
 
バイオリンの運弓動作計測による初心者と経験者の差異分析
バイオリンの運弓動作計測による初心者と経験者の差異分析バイオリンの運弓動作計測による初心者と経験者の差異分析
バイオリンの運弓動作計測による初心者と経験者の差異分析sugiuralab
 
The 86th National Convention of IPSJ (Student Encouragement Award))
The 86th National Convention of IPSJ (Student Encouragement Award))The 86th National Convention of IPSJ (Student Encouragement Award))
The 86th National Convention of IPSJ (Student Encouragement Award))yoshidakids7
 
チームで開発するための環境を整える
チームで開発するための環境を整えるチームで開発するための環境を整える
チームで開発するための環境を整えるonozaty
 
キャラで動かすGPT ~GPTsでどんな感じに作っているとか考えていることとか~
キャラで動かすGPT ~GPTsでどんな感じに作っているとか考えていることとか~キャラで動かすGPT ~GPTsでどんな感じに作っているとか考えていることとか~
キャラで動かすGPT ~GPTsでどんな感じに作っているとか考えていることとか~honeshabri
 
キンドリル_ネットワーク自動化成熟度診断サービス ご紹介資料 2024年3月版
キンドリル_ネットワーク自動化成熟度診断サービス ご紹介資料 2024年3月版キンドリル_ネットワーク自動化成熟度診断サービス ご紹介資料 2024年3月版
キンドリル_ネットワーク自動化成熟度診断サービス ご紹介資料 2024年3月版Takayuki Nakayama
 
JAWS DAYS 2024 E-3 ランチにまつわるちょっといい話 〜給食がない町の小中学生に温かい昼食を〜
JAWS DAYS 2024 E-3 ランチにまつわるちょっといい話 〜給食がない町の小中学生に温かい昼食を〜JAWS DAYS 2024 E-3 ランチにまつわるちょっといい話 〜給食がない町の小中学生に温かい昼食を〜
JAWS DAYS 2024 E-3 ランチにまつわるちょっといい話 〜給食がない町の小中学生に温かい昼食を〜Naomi Yamasaki
 
00001_test_automation_portfolio_20240313
00001_test_automation_portfolio_2024031300001_test_automation_portfolio_20240313
00001_test_automation_portfolio_20240313ssuserf8ea02
 
これからはじめるAnsible - Ansible Night Tokyo 2024
これからはじめるAnsible - Ansible Night Tokyo 2024これからはじめるAnsible - Ansible Night Tokyo 2024
これからはじめるAnsible - Ansible Night Tokyo 2024Hideki Saito
 
AWS Lambdaと AWS API Gatewayを使ったREST API作り
AWS Lambdaと AWS API Gatewayを使ったREST API作りAWS Lambdaと AWS API Gatewayを使ったREST API作り
AWS Lambdaと AWS API Gatewayを使ったREST API作りiPride Co., Ltd.
 
SIG-AUDIO 2024 Vol.02 オンラインセミナー 「必殺使音人(ひっさつしおとにん)カットシーンを成敗せよ」
SIG-AUDIO 2024 Vol.02 オンラインセミナー 「必殺使音人(ひっさつしおとにん)カットシーンを成敗せよ」SIG-AUDIO 2024 Vol.02 オンラインセミナー 「必殺使音人(ひっさつしおとにん)カットシーンを成敗せよ」
SIG-AUDIO 2024 Vol.02 オンラインセミナー 「必殺使音人(ひっさつしおとにん)カットシーンを成敗せよ」IGDA Japan SIG-Audio
 

Recently uploaded (12)

IGDA Japan SIG Audio #22 オンラインセミナー VRの知る.pdf
IGDA Japan SIG Audio #22 オンラインセミナー VRの知る.pdfIGDA Japan SIG Audio #22 オンラインセミナー VRの知る.pdf
IGDA Japan SIG Audio #22 オンラインセミナー VRの知る.pdf
 
AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。
AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。
AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。
 
バイオリンの運弓動作計測による初心者と経験者の差異分析
バイオリンの運弓動作計測による初心者と経験者の差異分析バイオリンの運弓動作計測による初心者と経験者の差異分析
バイオリンの運弓動作計測による初心者と経験者の差異分析
 
The 86th National Convention of IPSJ (Student Encouragement Award))
The 86th National Convention of IPSJ (Student Encouragement Award))The 86th National Convention of IPSJ (Student Encouragement Award))
The 86th National Convention of IPSJ (Student Encouragement Award))
 
チームで開発するための環境を整える
チームで開発するための環境を整えるチームで開発するための環境を整える
チームで開発するための環境を整える
 
キャラで動かすGPT ~GPTsでどんな感じに作っているとか考えていることとか~
キャラで動かすGPT ~GPTsでどんな感じに作っているとか考えていることとか~キャラで動かすGPT ~GPTsでどんな感じに作っているとか考えていることとか~
キャラで動かすGPT ~GPTsでどんな感じに作っているとか考えていることとか~
 
キンドリル_ネットワーク自動化成熟度診断サービス ご紹介資料 2024年3月版
キンドリル_ネットワーク自動化成熟度診断サービス ご紹介資料 2024年3月版キンドリル_ネットワーク自動化成熟度診断サービス ご紹介資料 2024年3月版
キンドリル_ネットワーク自動化成熟度診断サービス ご紹介資料 2024年3月版
 
JAWS DAYS 2024 E-3 ランチにまつわるちょっといい話 〜給食がない町の小中学生に温かい昼食を〜
JAWS DAYS 2024 E-3 ランチにまつわるちょっといい話 〜給食がない町の小中学生に温かい昼食を〜JAWS DAYS 2024 E-3 ランチにまつわるちょっといい話 〜給食がない町の小中学生に温かい昼食を〜
JAWS DAYS 2024 E-3 ランチにまつわるちょっといい話 〜給食がない町の小中学生に温かい昼食を〜
 
00001_test_automation_portfolio_20240313
00001_test_automation_portfolio_2024031300001_test_automation_portfolio_20240313
00001_test_automation_portfolio_20240313
 
これからはじめるAnsible - Ansible Night Tokyo 2024
これからはじめるAnsible - Ansible Night Tokyo 2024これからはじめるAnsible - Ansible Night Tokyo 2024
これからはじめるAnsible - Ansible Night Tokyo 2024
 
AWS Lambdaと AWS API Gatewayを使ったREST API作り
AWS Lambdaと AWS API Gatewayを使ったREST API作りAWS Lambdaと AWS API Gatewayを使ったREST API作り
AWS Lambdaと AWS API Gatewayを使ったREST API作り
 
SIG-AUDIO 2024 Vol.02 オンラインセミナー 「必殺使音人(ひっさつしおとにん)カットシーンを成敗せよ」
SIG-AUDIO 2024 Vol.02 オンラインセミナー 「必殺使音人(ひっさつしおとにん)カットシーンを成敗せよ」SIG-AUDIO 2024 Vol.02 オンラインセミナー 「必殺使音人(ひっさつしおとにん)カットシーンを成敗せよ」
SIG-AUDIO 2024 Vol.02 オンラインセミナー 「必殺使音人(ひっさつしおとにん)カットシーンを成敗せよ」
 

TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)

  • 2. 自己紹介  電機メーカ勤務の 似非ソフト屋  もともと組込み  画像処理  データ解析 と変遷  最近は Android より R言語(統計処理言語)と 格闘中 2 上野山 徹 うえのやま とおる
  • 3. 1. TensorFlow とは 2016-02-27 GDG京都 機械学習勉強会 3
  • 4. TensorFlow とは  Google社のMachine Intelligence 研究所が開発した数値計算ライブラリ  Deep Learning をはじめとする 機械学習 の 研究や活用にGoogle社内で用いられている  2011年から使用していたDistBeliefを強化  複数のCPU/GPUや、複数のマシンに分散して 実行できる。(※複数マシン対応版は未公開)  C++とPython 2or3 APIを持っている  2015年11月にオープンソース(Apache2.0)公開 2016-02-27 GDG京都 機械学習勉強会 4
  • 5. データフローグラフ 2016-02-27 GDG京都 機械学習勉強会 5  掛け算  足し算  関数 テンソル が データフローグラフ 上を 流れるように計算処理している テンソル  (多次元配列) 𝐶 = … (𝑅𝑒𝐿𝑈 𝑏 + 𝑊𝑋 )  数式で表現すると、 TensorFlow 巨大なデータにも使える 行列計算ライブラリ ビッグデータの 機械学習に使える!出典)TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems, Google, 2015
  • 7. 詳細は Web へ 2016-02-27 GDG京都 機械学習勉強会 7 https://speakerdeck.com/kazunori279/cloud-vision-api-and-tensorflow 例えば、佐藤さん@Google の資料など
  • 8. 2. TensorFlow を使った 機械学習 2016-02-27 GDG京都 機械学習勉強会 8
  • 10. 円 式で表すと... 2016-02-27 GDG京都 機械学習勉強会 10 円 × 1 + 円 × 3 = 190 円 円 × 3 + 円 × 1 = 330 円 円 × 2 + 円 × 4 = ?
  • 11. 円 回答 2016-02-27 GDG京都 機械学習勉強会 11 円 × 1 + 円 × 3 = 190 円 円 × 3 + 円 × 1 = 330 円 円 × 2 + 円 × 4 = ? 100 30 100 30 100 30
  • 12. 円 回答 2016-02-27 GDG京都 機械学習勉強会 12 円 × 1 + 円 × 3 = 190 円 円 × 3 + 円 × 1 = 330 円 円 × 2 + 円 × 4 = 320 100 30 100 30 100 30
  • 13. 円 これも機械学習(回帰)の問題です! 2016-02-27 GDG京都 機械学習勉強会 13 円 × 1 + 円 × 3 = 190 円 円 × 3 + 円 × 1 = 330 円 円 × 2 + 円 × 4 = 320 100 30 100 30 100 30 学習 予測 実績データからパラメータを推定 パラメータを使って結果を予測
  • 14. 実は店のおやじは気まぐれでした 2016-02-27 GDG京都 機械学習勉強会 14 円 円 × 1 + 円 × 3 = 190 円 円 × 3 + 円 × 1 = 330 円 円 × 2 + 円 × 4 = ? 円 × 5 + 円 × 7 = 660 円
  • 15. 実は店のおやじは気まぐれでした 2016-02-27 GDG京都 機械学習勉強会 15 円 円 × 1 + 円 × 3 = 190 円 円 × 3 + 円 × 1 = 330 円 円 × 2 + 円 × 4 = ? 円 × 5 + 円 × 7 = 660 円 100 30 100 30 100 30
  • 16. どうやってパラメータ(単価)を見つけるか? 2016-02-27 GDG京都 機械学習勉強会 16 考え方 合計金額の誤差が小さくなるような 単価を採用しよう! 円 × 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
  • 17. すべての組合せを計算 2016-02-27 GDG京都 機械学習勉強会 17 ミカン 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種類買ったら?)
  • 18. よく見ると、徐々に変化している 2016-02-27 GDG京都 機械学習勉強会 18 ミカン 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 リンゴ 最小値
  • 19. 小さくなる方向へたどっていくと... 2016-02-27 GDG京都 機械学習勉強会 19 ミカン 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 リンゴ 最小値 少ない計算で早く最小値に! ※最小(大)値を求める処理="最適化"
  • 20. 気まぐれおやじのこころを読む 2016-02-27 GDG京都 機械学習勉強会 20 円 円 × 1 + 円 × 3 ≒ 190 円 円 × 3 + 円 × 1 ≒ 330 円 円 × 2 + 円 × 4 ≒ 円 × 5 + 円 × 7 ≒ 660 円 90 30 90 30 90 30 90 30 310
  • 22. 線形回帰(線形重回帰)の1つ 2016-02-27 GDG京都 機械学習勉強会 22 入力層 出力層 𝑦 𝑥1 𝑥2 × 𝑎1 𝑦 = 𝑎1 𝑥1 + 𝑎2 𝑥2 × 𝑎2 リンゴの数  ミカンの数  合計金額 リンゴ の単価 ↓ ↑ ミカン の単価
  • 23. TensorFlow の処理の流れ 2016-02-27 GDG京都 機械学習勉強会 23 # 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. 後片付け
  • 24. 0. ライブラリをロード 2016-02-27 GDG京都 機械学習勉強会 24 import numpy as np import matplotlib.pyplot as plt import tensorflow as tf TensorFlow のほか 高速な配列演算パッケージであるNumPyや プロットしたい場合はmatplotlib.pyplotなど 使用するライブラリをロードする
  • 25. 1. 予測式(モデル)を記述 2016-02-27 GDG京都 機械学習勉強会 25 # 入力変数と出力変数のプレースホルダを生成 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
  • 26. 2.誤差関数と最適化手法を記述 2016-02-27 GDG京都 機械学習勉強会 26 # 誤差関数(loss) loss = tf.reduce_mean(tf.square(y_ - y)) # 最適化手段を選ぶ(最急降下法) train_step = tf.train.GradientDescentOptimizer(0.02).minimize(loss) ・誤差関数を記述 ふつうの回帰問題  平均二乗誤差 1 𝑁 𝑦𝑖 − 𝑦𝑖 2 𝑁 𝑖 ・最適化手法を選ぶ ・入門  最急降下法(勾配降下法) GradientDescent~ ※どれを選ぶかで学習(最適化)の速さが変わる ・引数に適度な"学習率"を指定する ※大きすぎると学習失敗(発散), 小さすぎると学習が遅い
  • 27. 3. 訓練データを作成(or読込)し, 2016-02-27 GDG京都 機械学習勉強会 27 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
  • 28. 学習実行 2016-02-27 GDG京都 機械学習勉強会 28 # (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 を呼び出す。
  • 29. 参考: 実行結果 2016-02-27 GDG京都 機械学習勉強会 29 うまく学習できると... 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 順 調 に 低 下 推定されたパラメータの値
  • 30. 参考: 実行結果 2016-02-27 GDG京都 機械学習勉強会 30 学習率が大きすぎて学習失敗していると... step= 10, (中略), loss=72692296.00 step= 20, (中略), loss=54651076608.00 step= 30, (中略), loss=41087909494784.00 : : 順 調 に 増 加 学習率を小さくしてみる
  • 31. 4. 予測 2016-02-27 GDG京都 機械学習勉強会 31 # (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
  • 32. 5. 後片付け 2016-02-27 GDG京都 機械学習勉強会 32 # セッションを閉じる sess.close()
  • 33. TensorFlow の処理の流れ (再掲) 2016-02-27 GDG京都 機械学習勉強会 33 # 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. 後片付け
  • 34. (補足) 線形回帰の応用場面  家賃  家賃 = a * 駅からの距離 + b * 築年数 + c * 広さ  明日の客数  客数 = a * 気温 + b * 昨年同日の客数 などなど 2016-02-27 GDG京都 機械学習勉強会 34
  • 37. 式で表そうとしてみる... 2016-02-27 GDG京都 機械学習勉強会 37 円 ×1+ 円 円 ×2+ 円 × 3) 円 ×0+ 円 ×16) 円 ×3+ 円 × 1) 円 円 円 円 ×2+ 円 × 8 )円 ×11)円 -( -( -( -( -( 買える 買える 買えない 買えない ?
  • 38. 式で表そうとしてみる... 2016-02-27 GDG京都 機械学習勉強会 38 円 ×1+ 円 円 ×2+ 円 × 3) 円 ×0+ 円 ×16) 円 ×3+ 円 × 1) 円 円 円 円 ×2+ 円 × 8 )円 ×11)円 -( -( -( -( -( 買える 買える 買えない 買えない ? 予想される残金 買える : 1 買えない : 0
  • 40. 予測式(モデル)が作れた! 2016-02-27 GDG京都 機械学習勉強会 40 円 ×1+ 円 円 ×2+ 円 × 3)) = 1 円 ×0+ 円 ×16)) = 1 円 ×3+ 円 × 1)) = 0 円 円 円 円 ×2+ 円 × 8 )) = 0円 ×11) ) =円 -( -( -( -( -( ? σ( σ( σ( σ( σ(
  • 41. ロジスティック回帰 2016-02-27 GDG京都 機械学習勉強会 41 入力層 出力層 ※ロジスティック「回帰」ですが,識別(分類)の手法です。 𝑦 = 𝜎(𝑏 + 𝑎1 𝑥1 + 𝑎2 𝑥2) 𝑦 𝑥1 𝑥2 × 𝑎1 × 𝑎2 リンゴの数  ミカンの数  買えるか リンゴ の単価 ↓ ↑ ミカン の単価 𝑏 財布の中身
  • 42. TensorFlow での実装 2016-02-27 GDG京都 機械学習勉強会 42 # 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. 後片付け ※線形回帰の実装と,ほとんど同一
  • 43. 1. 予測式(モデル)を記述 2016-02-27 GDG京都 機械学習勉強会 43 # 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 今回の予測式に合わせて モデルとパラメータを修正 追加
  • 44. 2. 誤差関数と最適化手法を記述 2016-02-27 GDG京都 機械学習勉強会 44 # 誤差関数(loss) loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(u, y_)) # 最適化手段(最急降下法) train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) ・誤差関数を変更 識別(分類)問題  クロスエントロピー −𝑦𝑖 log 𝑦𝑖 − 1 − 𝑦𝑖 log(1 − 𝑦𝑖) 𝑁 𝑖 正解 予測値: 𝑦𝑖 正解 予測値: 𝑦𝑖
  • 45. 3. 学習実行 2016-02-27 GDG京都 機械学習勉強会 45 # (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回 に ※更新回数は,対象問題やデータ,初期値,モデルなどでまちまちです。
  • 46. 学習結果 2016-02-27 GDG京都 機械学習勉強会 46 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 順 調 に 低 下 推定されたパラメータの値
  • 47. 予測結果 2016-02-27 GDG京都 機械学習勉強会 47 円 ×1+ 円 ×11) ) =円 -( 0.96σ( 185 60 11 リンゴ1個+ミカン11個は,おそらく買えそう
  • 50. one-hot ベクトル (one-of-K表現) 2016-02-27 GDG京都 機械学習勉強会 50 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クラス識別問題へ分解
  • 51. 案1: ロジスティック回帰を拡張 2016-02-27 GDG京都 機械学習勉強会 51 入力層 (768ノード) 出力層 (10ノード) 𝑦0 𝑦1 𝑦9 ソフトマックス(Softmax) 𝑦 = 𝑠𝑜𝑓𝑡𝑚𝑎𝑥(𝑥𝑊 + 𝑏)
  • 52. 案1: ロジスティック回帰を拡張 2016-02-27 GDG京都 機械学習勉強会 52 入力層 (768ノード) 出力層 (10ノード) 𝑦0 𝑦1 𝑦9 ソフトマックス(Softmax)
  • 53. 案2: さらに中間層を追加 2016-02-27 GDG京都 機械学習勉強会 53 入力層 (768ノード) 出力層 (10ノード) 𝑦0 𝑦1 𝑦9 ニューラルネット(パーセプトロン) 隠れ層 (□ノード) 中間層(隠れ層)を追加すると,より複雑なパターンも見分けられる
  • 54. TensorFlow での実装 2016-02-27 GDG京都 機械学習勉強会 54 # 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. 後片付け
  • 55. 1. 予測式(モデル)を記述 2016-02-27 GDG京都 機械学習勉強会 55 # 入力変数と出力変数のプレースホルダを生成 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 予測式(モデル, ネットワーク)を実装
  • 56. 2. 誤差関数と最適化手法を記述 2016-02-27 GDG京都 機械学習勉強会 56 # 誤差関数(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)
  • 57. 3. 学習実行 2016-02-27 GDG京都 機械学習勉強会 57 # 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個の訓練データを ランダムに取り出して学習 (確率的勾配降下法)  速く学習が進む
  • 58. 参考: 学習結果 2016-02-27 GDG京都 機械学習勉強会 58 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 ゆ ら ぎ な が ら 低 下
  • 59. 4. 予測 2016-02-27 GDG京都 機械学習勉強会 59 # (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]