More Related Content
Similar to Deep learning入門 (20)
More from magoroku Yamamoto (20)
Deep learning入門
- 4. ビジネスでも
• MS、Googleが音声認識をDNNで置き換え
• Googleが買った企業
– DNNresearch Inc
• ブームの火付け役トロント大Hinton教授が創立
– DeepMind Technologies:
• レトロゲームのルールを学習するDQN(Deep Q-Network)を開発
• BaiduはStanfordのAndrew Ng准教授をリクルート
– 顔認識のエラー率:Microsoftは3.67%、Facebookは1.63%、
Googleは0.37%に対してBaiduは0.15%
• クラウド上にPaaS等も登場
2015/12/18 4
- 7. 画像認識での成果
• ImageNet large-scale visual recognition challenge
(ILSVRC) 2012
– 1000種類の物体画像識別のコンベンション
– トロント大(Hinton教授)が圧勝
– エラー率が一気に10%以上向上
• ILSVRC2014のimage例
http://www.image-net.org/challenges/LSVRC/2014/index#introduction2015/12/18 7
- 8. DLアルゴリズム入門
• Web,書籍による解析主には次の2種類
– 数学を背景にした原理・アルゴリズムを説明するもの
• 大学教養レベルの数学+αの知識が必要
• 式変形のすべてを理解するのは(数か月では)厳しい
– 利用分野、今後の期待を説明するもの
• 表層的に説明に留まり、どの事業ドメインの使えるかわからない
例)音声・画像認識で大きな成果⇒他は?何に使えるの?
• ここでは、DLの入門として以下を試みる
– 手書き文字認識(MNIST)を例題に基本アルゴリズムを理解
– 数学的な説明を資料内ですべて完結(できる範囲で)
– 最初は、単純な1層のNNを対象 - Logistic Regression
– 続いて、2層のNN - Multilayer perceptron
– 最後に、物体認識で使われるConvolutio Neural Network
2015/12/18 8
- 9. Deep Learningのレイヤ
caffe
pylearn2
theano
Digits
Chainer
DNN
Feedforward Neural Network, Stochastic Gradient Descent,
Backpropagation, Autoencoder, Convolutional Neural Network,
Reccurrent Neural Network, Boltzmann machine
数学的背景
大学教養レベルの微積分、行列、ベイズ理論
教科書:“Pattern Recognition and Machine Learning”
(パターン認識と機械学習 - ベイズ理論による統計的予測)
Pycaffe MATLAB
PFIUCB Univ. of Montreal
Nvidia
C++
Torch7
Lua
アルゴリズムフレームワーク
Amazon ML
Azure ML
Google
Prediction API
クラウド
EC2 with GPU
Deep Learning非対応
Tensor
flow
Google
2015/12/18 9
- 10. Deep Learning Tutorials
• Université de Montréal - Lisa Labが以下で公開
git@github.com:lisa-lab/DeepLearningTutorials.git
http://deeplearning.net/tutorial
• 古典的なNN,DNNからCNNまで各種論理・技法を解説
– Python + theanoで記述
– 各種学習アルゴリズム
• 教師あり3種、教師なし4種、その他5種
• 教師あり3種を題材に説明
1. Logistic Regression - using Theano for something
2. Multilayer perceptron - introduction to layers
3. Deep Convolutional Network - a simplified version of LeNet5
2015/12/18 10
- 11. 教師付き学習の例題
1. Logistic Regression - using Theano for something
– 1段:単純パーセプトロン、確率的勾配降下法
2. Multilayer perceptron - introduction to layers
– 2段:線形分離問題、誤差逆伝達法
3. Deep Convolutional Network - a simplified version of LeNet5
– 多段:汎化性向上のための畳み込み
• すべて同じ数字認識(MNIST)問題を扱う
• 高速化の各種実装もあわせて理解する
– 繰り返し処理を行列積(sgemm)演算で置き換え
• refBLAS,OpenBlas, ATLAS, cuBLAS(NVIDIA)
– CNNの畳み込み演算はストライド転送+演算
• cuDNN(NVIDIA)
2015/12/18 11
- 12. 教師付き学習(MNIST )と誤答率
• 入門用向けの例題
1. Logistic Regression - using Theano for something simple 1950年代
2. Multilayer perceptron - introduction to layers 1980年代
3. Deep Convolutional Network - a simplified version of LeNet5 2010年代*
0
2
4
6
8
10
12
14
1
40
79
118
157
196
235
274
313
352
391
430
469
508
547
586
625
664
703
742
781
820
859
898
937
976
Logistic Regression
Multilayer perceptron
Deep Conventional Network
minibatch
誤答率
1.7%
0.91%
7.5%
多層(deep)化で
誤答率が大幅に
下がる
*1979年に福島邦彦氏が発表したネオコグニトロンの再発明
Deep Learning Tutorials の
例題で実測
2015/12/18 12
- 20. 写像・次元圧縮 - 行列の積
• N行M列 と M行L列 の積は N行L列
784行1列10行784列 10行1列
• 784次元から10次元への写像・次元圧縮
2015/12/18 20
- 21. 行列の積
• N行M列 と M行L列 の積は N行L列
• 2行2列 と 2行2列 の積は2行2列
𝑎 𝑏
𝑐 𝑑
x
𝑒 𝑓
𝑔 ℎ
=
𝑎𝑒 + 𝑏𝑔 𝑎𝑓 + 𝑏ℎ
𝑐𝑒 + 𝑑𝑔 𝑐𝑓 + 𝑑ℎ
• 2行3列 と 3行2列 の積は2行2列
𝑎1 𝑎2 𝑎3
𝑏1 𝑏2 𝑏3
x
𝑐1 𝑑1
𝑐2 𝑑2
𝑐3 𝑑3
=
𝑎1 𝑐1 + 𝑎2 𝑐2 + 𝑎3 𝑐3 𝑎1 𝑑1 + 𝑎2 𝑑2 + 𝑎3 𝑑3
𝑏1 𝑐1 + 𝑏2 𝑐2 + 𝑏3 𝑐3 𝑏1 𝑑1 + 𝑏2 𝑑2 + 𝑏3 𝑑3
• 2行3列 と 3行1列 の積は2行1列
𝑎1 𝑎2 𝑎3
𝑏1 𝑏2 𝑏3
x
𝑐1
𝑐2
𝑐3
=
𝑎1 𝑐1 + 𝑎2 𝑐2 + 𝑎3 𝑐3
𝑏1 𝑐1 + 𝑏2 𝑐2 + 𝑏3 𝑐3
2015/12/18 21
忘れてしまったあなたのために追加
- 24. Logistic Regression
• 入門用向けの例題
1. Logistic Regression - using Theano for something simple 1950年代
2. Multilayer perceptron - introduction to layers 1980年代
3. Deep Convolutional Network - a simplified version of LeNet5 2010年代*
0
2
4
6
8
10
12
14
1
40
79
118
157
196
235
274
313
352
391
430
469
508
547
586
625
664
703
742
781
820
859
898
937
976
Logistic Regression
Multilayer perceptron
Deep Conventional Network
minibatch
誤答率
1.7%
0.91%
7.5%
*1979年に福島邦彦氏が発表したネオコグニトロンの再発明
2015/12/18 24
最初はこれ
1960年代
- 27. モデル-確率の表現
𝑊は重み付けの行列(2次元配列)
𝑏はバイアスのベクトル(配列)
𝑃 𝑦 = 𝑖 𝑥, 𝑊, 𝑏 = 𝑠𝑜𝑓𝑡𝑚𝑎𝑥𝑖 𝑊𝑥 + 𝑏 =
𝑒 𝑊 𝑖 𝑥+𝑏 𝑖
𝑒 𝑊 𝑗 𝑥+𝑏 𝑗
𝑗
入力したベクトル𝑥がクラス𝑖に含まれる確率が最大となる
W,bを求める
𝑦 𝑝𝑟𝑒𝑑 = 𝑎𝑟𝑔𝑚𝑎𝑥𝑖 𝑃(𝑌 = 𝑖|𝑥, 𝑊, 𝑏)
ベイズの定理での表記𝑃(𝑌│𝑋)は、
事象Xが起きた前提で事象Yが起こる確率の事
⇒ベクトル𝑥、重み付けW、バイアスbの時に
クラスiがyとなる確率
2015/12/18 27
- 28. モデル-softmax
𝑊は重み付けの行列(2次元配列)
𝑏はバイアスのベクトル(配列)
𝑃 𝑦 = 𝑖 𝑥, 𝑊, 𝑏 = 𝑠𝑜𝑓𝑡𝑚𝑎𝑥𝑖 𝑊𝑥 + 𝑏 =
𝑒 𝑊 𝑖 𝑥+𝑏 𝑖
𝑒 𝑊 𝑗 𝑥+𝑏 𝑗
𝑗
入力したベクトル𝑥がクラス𝑖に含まれる確率が最大となる
W,bを求める
𝑦 𝑝𝑟𝑒𝑑 = 𝑎𝑟𝑔𝑚𝑎𝑥𝑖 𝑃(𝑌 = 𝑖|𝑥, 𝑊, 𝑏)
softmax関数は、sigmoid関数の多変量版
多変量ロジスティック回帰や多クラスのフィードフォアワード型の
ニューラルネットの活性化関数として利用される.
2015/12/18 28
- 29. モデル-sigmoid
𝑊は重み付けの行列(2次元配列)
𝑏はバイアスのベクトル(縦配列)
𝑃 𝑦 = 𝑖 𝑥, 𝑊, 𝑏 = 𝑠𝑜𝑓𝑡𝑚𝑎𝑥𝑖 𝑊𝑥 + 𝑏 =
𝑒 𝑊 𝑖 𝑥+𝑏 𝑖
𝑒 𝑊 𝑗 𝑥+𝑏 𝑗
𝑗
入力したベクトル𝑥がクラス𝑖に含まれる確率が最大となる
W,bを求める
𝑦 𝑝𝑟𝑒𝑑 = 𝑎𝑟𝑔𝑚𝑎𝑥𝑖 𝑃(𝑌 = 𝑖|𝑥, 𝑊, 𝑏)
シグモイド関数の多変量版
多変量ロジスティック回帰や多クラスのフィードフォアワード型の
ニューラルネットの活性化関数として利用される.
シグモイド関数は生物の神経細胞が持つ性質をモデル化したもの
1
1 + 𝑒−𝑥
0か1かの2分割判別につかうモデル
今回は多値(0-9)なのでsoftmaxを使う
2015/12/18 29
- 31. モデル – softmax - Σ
𝑊は重み付けの行列(2次元配列)
𝑏はバイアスのベクトル(配列)
𝑃 𝑦 = 𝑖 𝑥, 𝑊, 𝑏 = 𝑠𝑜𝑓𝑡𝑚𝑎𝑥𝑖 𝑊𝑥 + 𝑏 =
𝑒 𝑊 𝑖 𝑥+𝑏 𝑖
𝑒 𝑊 𝑗 𝑥+𝑏 𝑗
𝑗
入力したベクトル𝑥がクラス𝑖に含まれる確率が最大となる
W,bを求める
𝑦 𝑝𝑟𝑒𝑑 = 𝑎𝑟𝑔𝑚𝑎𝑥𝑖 𝑃(𝑌 = 𝑖|𝑥, 𝑊, 𝑏)
すべての事象の内,特定の事象の割合(確率)を求める
𝑓 𝑖 = 𝑒 𝑊 𝑖 𝑥+𝑏 𝑖 のとき iを1~4を与える場合
𝑓 1 +𝑓 2 +𝑓 3 +𝑓(4)
𝑓 1 +𝑓 2 +𝑓 3 +𝑓(4)
=1 、すべての事象の発生確率の合計は1
i=1の発生確率は 、
𝑓 1
𝑓 1 +𝑓 2 +𝑓 3 +𝑓(4)
0.05 入力画像が’0’である確率
0.40
0.05
0.05
0.15
0.05
0.05
0.15
0.05
0.05 入力画像が’9’である確率
--------------------------------------------
1.00 合計
2015/12/18 31
- 32. モデル – softmax 理想値
• パラメタ算出時は理想値を置く
W x + b = 確率
784行1列10行784列 10行1列
0.00
1.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
---------
1.00
10行1列 入力が’1’の場合の理想値
2015/12/18 32
- 33. モデル
𝑊は重み付けの行列(2次元配列)
𝑏はバイアスのベクトル(配列)
𝑃 𝑦 = 𝑖 𝑥, 𝑊, 𝑏 = 𝑠𝑜𝑓𝑡𝑚𝑎𝑥𝑖 𝑊𝑥 + 𝑏 =
𝑒 𝑊 𝑖 𝑥+𝑏 𝑖
𝑒 𝑊 𝑗 𝑥+𝑏 𝑗
𝑗
入力したベクトル𝑥がクラス𝑖に含まれる確率が最大となる
W,bを求める
𝑦 𝑝𝑟𝑒𝑑 = 𝑎𝑟𝑔𝑚𝑎𝑥𝑖 𝑃(𝑌 = 𝑖|𝑥, 𝑊, 𝑏)
𝑎𝑟𝑔𝑚𝑎𝑥 𝑓(𝑥): 𝑓(𝑥) を最大にする𝑥の集合
クラスiの発生確率を最大にする𝑥, 𝑊, 𝑏を求めろ
2015/12/18 33
- 34. negative log-likelihood
• Likelihood
– 尤度関数(ゆうどかんすう)とは統計学において、ある前
提条件に従って結果が出現する場合に、逆に観察結果
からみて前提条件が「何々であった」と推測する尤もらし
さ(もっともらしさ)を表す数値を、「何々」を変数とする関
数として捉えたものである。また単に尤度ともいう。
wikipedia
2015/12/18 34
- 37. 損失関数
学習の結果は損失関数を用いて最適化する
多値分類のロジステック回帰では
負の対数尤度関数を用いることが多い
𝐿 𝜃 = 𝑊, 𝑏 , 𝐷 = log(𝑃 𝑌 = 𝑦 𝑖
𝑥 𝑖
, 𝑊, 𝑏))
|𝐷|
𝑖=0
最小化問題にしたいから対数尤度関数に-1をかけ
て最小化する事を考える。
𝑙 𝜃 = 𝑊, 𝑏 , 𝐷 = −𝐿(𝜃 = 𝑊, 𝑏 , 𝐷)
𝐷は学習データの集合 カードの束
シャッフルしてカードを1枚引く
引いたカードの𝑖𝑛𝑑𝑒𝑥が𝑖(0,1,2 … )
W, b が与えられたとき、カードの束Dのそれぞれのカードが
が正しく推定される確率
2015/12/18 37
- 39. 損失関数 log(𝑃𝑖)
|𝐷|
𝑖=0
• 各カードの正解確率をlogして加算
– log(0.40) + log(0.40) + log(0.40) ・・・・ log(0.30)
– Logを取ると乗算と同じ意味
• 正解確率の乗算結果は、同時確率の意味
• 乗算は扱いにくいので対数にして、加算
i=0
0.05
0.40
0.05
0.05
0.15
0.05
0.05
0.15
0.05
0.05
i=1
0.05
0.15
0.05
0.05
0.15
0.05
0.05
0.40
0.05
0.05
i=2
0.05
0.15
0.05
0.05
0.15
0.05
0.05
0.40
0.05
0.05
i=j
0.30
0.15
0.05
0.05
0.15
0.05
0.05
0.15
0.05
0.05
….. 0.40 x 0.40 x 0.40 ・・・・・ 0.30
データを増やすと…やっかい
2015/12/18 39
- 42. 確率的勾配降下法
(SGD:Stochastic Gradient Descent)
• ランダムに学習データを1つ選んで誤差関数を計算し,その
勾配方向にパラメータを修正する操作を反復する
• モデル
𝑃 𝑦 = 𝑖 𝑥, 𝑊, 𝑏 =
𝑒 𝑊𝑖 𝑥+𝑏 𝑖
𝑒 𝑊 𝑗 𝑥+𝑏 𝑗
𝑗
• 誤差関数
𝑁𝐿𝐿 𝜃 = 𝑊, 𝑏 , 𝐷 = − log(𝑃 𝑌 = 𝑦 𝑖
𝑥 𝑖
, 𝑊, 𝑏))
|𝐷|
𝑖=0
集合𝐷の同時発生確率を最大にする
2015/12/18 42
- 43. 最急降下法と確率的勾配降下法
• 𝜃を引数とする𝑓 𝜃 の値を最小化したい
• 最急降下法
𝜃 𝑖+1
= 𝜃 𝑖
− 𝜂
𝜕
𝜕𝜃
𝑓(𝜃 𝑖
)
• 確率的勾配降下法
𝜃 𝑖+1
= 𝜃 𝑖
− 𝜂
𝜕
𝜕𝜃
𝑓 𝜃 𝑖 (𝑥 𝑛)
– 収束させるにはη を適切に設定する
– 局所的な参照のためメモリ効率が良い
2015/12/18 43
- 44. Theanoでの解法
• 同時発生確率を誤差関数costとして定義
– 加算の代わりに平均meanを使用
• costを𝑊, 𝑏で偏微分T.grad,
𝜕
𝜕𝜃
相当
• 学習率learnig_rateで減衰させながら更新
2015/12/18
def negative_log_likelihood(self, y):
return -T.mean(T.log(self.p_y_given_x)[T.arange(y.shape[0]), y])
cost = classifier.negative_log_likelihood(y)
g_W = T.grad(cost=cost, wrt=classifier.W)
g_b = T.grad(cost=cost, wrt=classifier.b)
updates = [(classifier.W, classifier.W - learning_rate * g_W),
(classifier.b, classifier.b - learning_rate * g_b)]
44
- 47. Multilayer perceptron
• 入門用向けの例題
1. Logistic Regression - using Theano for something simple 1950年代
2. Multilayer perceptron - introduction to layers 1980年代
3. Deep Convolutional Network - a simplified version of LeNet5 2010年代*
0
2
4
6
8
10
12
14
1
40
79
118
157
196
235
274
313
352
391
430
469
508
547
586
625
664
703
742
781
820
859
898
937
976
Logistic Regression
Multilayer perceptron
Deep Conventional Network
minibatch
誤答率
1.7%
0.91%
7.5%
*1979年に福島邦彦氏が発表したネオコグニトロンの再発明
Theanoの例題で実測
2015/12/18 47
次はこれ
1990年代
- 49. モデル
• 𝑓 𝑥 = 𝐺 𝑏 2 + 𝑊 2 𝑠 𝑏 1 + 𝑊 1 𝑥
• ロジステック回帰の前段に一層追加した場合を例に説明
• Layerの追加で誤答率が7%から1.69%へ大きく改善
0.05
0.40
0.05
0.05
0.15
0.05
0.05
0.15
0.05
0.05
𝑊1
𝑏1
𝑊2
𝑏2
‘1’
ロジステック回帰の例題今回追加
2015/12/18 49
- 50. 隠れ層の役割
𝑓 𝑥 = 𝐺 𝑏 2
+ 𝑊 2
𝑠 𝑏 1
+ 𝑊 1
𝑥
• 隠れ層:𝑠 𝑏 1
+ 𝑊 1
𝑥
• 線形分離不可問題に効果がある
– 空間を曲げる、次元変換
– 空間を行列演算で曲げ、平面で分離する
• どうやって?
http://sinhrks.hatenablog.com/entry/2014/11/30/192940
2015/12/18 50
- 51. Back propagation - 誤差逆伝播法
• 出力層から入力層側への学習
• 2層分のパラメタをまとめて学習
𝜃 = 𝑊 2 , 𝑏 2 , 𝑊 1 , 𝑏 1 .
– SGDと同様に𝑊 2
, 𝑏 2
誤差最小の値を計算
– 誤差が𝑊 1
, 𝑏 1
から生じたとして𝑊 1
, 𝑏 1
を更
新
• フレームワークが処理してくれるので意味と
目的が理解できればよい
2015/12/18 51
- 52. Theanoでの2層分の偏微分
• 損失関数 cost を、パラメータ HiddenLayer.W,
HiddenLayer.b, LogisticRegression.W,
LogisticRegression.bそれぞれで偏微分した偏
導関数を求めておく
• パラメータごとに勾配計算 / 更新
𝜃 = 𝑊 2
, 𝑏 2
, 𝑊 1
, 𝑏 1
を
𝜕𝑙
𝜕𝜃
class HiddenLayer self.params = [self.W, self.b]
class LogisticRegression self.params = [self.W, self.b]
self.params = self.hiddenLayer.params + self.logRegressionLayer.params
gparams = [T.grad(cost, param) for param in classifier.params]
2015/12/18 52
- 56. Convolutional Network
• 3つの入門用向け例題
1. Logistic Regression - using Theano for something simple
2. Multilayer perceptron - introduction to layers
3. Deep Convolutional Network - a simplified version of LeNet5
0
2
4
6
8
10
12
14
1
40
79
118
157
196
235
274
313
352
391
430
469
508
547
586
625
664
703
742
781
820
859
898
937
976
Logistic Regression
Multilayer perceptron
Deep Conventional Network
minibatch
誤答率
1.7%
0.91%
7.5%
56
最後はこれ
2012年
- 57. Multi Layer Perceptronを拡張
𝑓 𝑥 = 𝐺 𝑏 2
+ 𝑊 2
𝑠 𝑏 1
+ 𝑊 1
𝑥
s
s
s
s
s
G
G
G
s
0.05
0.40
0.05
0.05
0.15
0.05
0.05
0.15
0.05
0.05
𝑊1 𝑏1 𝑊2 𝑏2
‘1’
𝑤1
入力層 - 隠れ層の間で適用される係数行列
𝑏1
入力層 - 隠れ層の間で適用される重みベクトル
𝑠 隠れ層の活性化関数
𝑤2
隠れ層 - 出力層の間で適用される係数行列 = ロジスティック回帰の係数行列
𝑏2
隠れ層 - 出力層の間で適用される重みベクトル = ロジスティック回帰の重みベクトル
𝐺 出力層の活性化関数。多クラスの場合はソフトマックス関数
入力層 隠れ層 出力層
Convolutional と
maxpooling を
追加
57
- 58. convolutional_mlp.pyのモデル
• convolution 濃淡構造をフィルタで抽出
• maxpooling 位置感度を低下させる
layer0 = LeNetConvPoolLayer(
rng,
input=layer0_input,
image_shape=(batch_size, 1, 28, 28),
filter_shape=(20, 1, 5, 5),
poolsize=(2, 2)
)
layer1 = LeNetConvPoolLayer(
rng,
input=layer0.output,
image_shape=(batch_size, nkerns[0], 12, 12),
filter_shape=(50, 20, 5, 5),
poolsize=(2, 2)
)
layer2 = HiddenLayer(
rng,
input=layer2_input,
n_in=50 * 4 * 4,
n_out=500,
activation=T.tanh
)
layer3 = LogisticRegression(
input=layer2.output, n_in=500, n_out=10
)
28
28
24
24
1枚
20枚
layer0
LeNetConvPoolLayer
convolution maxpooling
layer2
HiddenLayer
layer3
LogisticRegression
800
500
10
4x4x50
1.Logistic
Regression
2.Multilayer perceptron
3.Deep ConvolutionalNetwork
W[20, 1, 5, 5]
5x5画素1chを20個
学習するフィルタ
20枚
12
12
layer1
LeNetConvPoolLayer
8
8
50枚
4
4
50枚
convolution maxpooling
W[50,20, 5, 5]
5x5画素20chを50個
学習するフィルタ
W W
58
- 59. Layer0 - Convolutionの演算
• 5x5画素1chのフィルタを20個
を学習する
• 元データに畳み込む
– ずらしながら演算
– 入力画像W×W
– フィルタがH×H
– 出力サイズ
W−2⌊H/2⌋×W−2⌊H/2⌋
layer0 = LeNetConvPoolLayer(
rng,
input=layer0_input,
image_shape=(batch_size, 1, 28, 28),
filter_shape=(20, 1, 5, 5),
poolsize=(2, 2)
)
28
28
24
24
1枚
20枚 20枚
12
12
layer0
LeNetConvPoolLayer
convolution maxpooling
20個
5
5
20個、1CH、5x5
28
24
59
- 60. Layer0 - maxpoolingの演算
• 2x2の画素の最大値を
とる
• 画素数は縦横半分に
layer0 = LeNetConvPoolLayer(
rng,
input=layer0_input,
image_shape=(batch_size, 1, 28, 28),
filter_shape=(20, 1, 5, 5),
poolsize=(2, 2)
)
28
28
24
24
1枚
20枚 20枚
12
12
layer0
LeNetConvPoolLayer
convolution maxpooling
24
24
12
12
2x2
60
- 61. Layer1 - Convolutionの演算
• 5x5画素20chのフィルタを50
個を学習する
50個、20CH、5x5
20枚
12
12
layer1
LeNetConvPoolLayer
8
8
50枚
4
4
50枚
convolution maxpooling
layer1 = LeNetConvPoolLayer(
rng,
input=layer0.output,
image_shape=(batch_size, nkerns[0], 12,
12),
filter_shape=(50, 20, 5, 5),
poolsize=(2, 2)
)
50個
5
5 20CH
20枚
12
12
8
8 1/50枚
12
12
8
85
5
20枚
12
12
8
8
50枚
convolution
X20回
X50回
61
- 62. convolutional_mlp.pyの4層モデル
28
28
24
24
1枚 20枚
convolution maxpooling
800 500 10
4x4x50
20枚
12
12
8
8
50枚
4
4
50枚
convolution maxpooling
W W
updates = [
(param_i, param_i - learning_rate * grad_i)
for param_i, grad_i in zip(params, grads)
]
train_model = theano.function(
[index],
cost,
updates=updates,
givens={
x: train_set_x[index * batch_size: (index + 1) * batch_size],
y: train_set_y[index * batch_size: (index + 1) * batch_size]
}
)
test_model = theano.function(
[index],
layer3.errors(y),
givens={
x: test_set_x[index * batch_size: (index + 1) * batch_size],
y: test_set_y[index * batch_size: (index + 1) * batch_size]
}
)
validate_model = theano.function(
[index],
layer3.errors(y),
givens={
x: valid_set_x[index * batch_size: (index + 1) * batch_size],
y: valid_set_y[index * batch_size: (index + 1) * batch_size]
}
Forwardのみ
Forward &
Backward
Backward
5x5画素
20個
5x5画素20枚
50個
5x5画素1chを20個を学習 5x5画素20chを50個を学習
Forward
layer0 layer1 layer2 layer3
flatten
62