0
Chainer使ってみた
@kenmatsu4
2015.8.5
機械学習プロフェッショナルシリーズ輪読会 #4
Lightning Talk  
自己紹介
・Twitterアカウント
   @kenmatsu4
・Qiitaでブログを書いています(統計、機械学習、Python等)
   http://qiita.com/kenmatsu4
   (2500 contributionを超え...
2015.6.9
Deep Learning Framework Chainer Release!
特徴
• All Pythonで記載ができるので、設定ファイル等
のフォーマットを覚える必要がない。
• インストールが簡単
pip install chainer
王道、MNIST手書き数字で試す。
モデルは入力784 units、出力10 units
# Prepare multi-layer perceptron model
# 多層パーセプトロンモデルの設定
# 入力 784次元、出力 10次元
model = FunctionSet(
l1=F.Linear(784, n_units)...
# Prepare multi-layer perceptron model
# 多層パーセプトロンモデルの設定
# 入力 784次元、出力 10次元
model = FunctionSet(
l1=F.Linear(784, n_units)...
# ニューラルネットの構造
def forward(x_data, y_data, train=True):
x, t = Variable(x_data), Variable(y_data)
h1 = F.dropout(F.relu(mod...
# ニューラルネットの構造
def forward(x_data, y_data, train=True):
x, t = Variable(x_data), Variable(y_data)
h1 = F.dropout(F.relu(mod...
基本クラスの一つです
http://docs.chainer.org/en/latest/reference/core/variable.html#variable
基本クラスの一つです
http://docs.chainer.org/en/latest/reference/core/variable.html#variable
このクラスに、データ、パラメータ、
モデルの構造等を持たせて、
誤差逆伝播を行...
# ニューラルネットの構造
def forward(x_data, y_data, train=True):
x, t = Variable(x_data), Variable(y_data)
h1 = F.dropout(F.relu(mod...
コード:順伝播(POINT: relu関数)
relu(x) = max(0, x)
# ニューラルネットの構造
def forward(x_data, y_data, train=True):
x, t = Variable(x_data), Variable(y_data)
h1 = F.dropout(F.relu(mod...
コード:順伝播(POINT: dropout関数)
x2#
x783
x784
x1
x0
z10u10
z1u1
z2u1
z9u9
z1000u1000
z999u999
u1##z1
u2##z2
z0
z1000u1000
z999u9...
コード:順伝播(POINT: dropout関数)
x2#
x784
x0
z10u10
z1u1
z2u1
z9u9
z999u999
u1##z1
z0
z1000u1000
u1##z1
z0
# ニューラルネットの構造
def forward(x_data, y_data, train=True):
x, t = Variable(x_data), Variable(y_data)
h1 = F.dropout(F.relu(mod...
コード:順伝播(POINT: softmax関数)
yk = zk = fk(u) =
exp(uk)
PK
j exp(uj)
En =
X
k
dk log
exp(uk)
PK
j exp(uj)
!
交差エントロピー関数
ソフトマックス...
# Setup optimizer
optimizer = optimizers.Adam()
optimizer.setup(model.collect_parameters())
コード:Optimizerの設定
Optimizerで勾配法...
for epoch in xrange(1, n_epoch+1):
perm = np.random.permutation(N)
# 0∼Nまでのデータをバッチサイズごとに使って学習
for i in xrange(0, N, batchs...
train_loss.append(loss.data)
train_acc.append(acc.data)
sum_loss += float(cuda.to_cpu(loss.data))
* batchsize
sum_accuracy...
#evaluation
#テストデータで誤差と、正解精度を算出し汎化性能を確認
sum_accuracy = 0
sum_loss = 0
for i in xrange(0, N_test, batchsize):
x_batch = x_t...
sum_loss += float(cuda.to_cpu(loss.data))
* batchsize
sum_accuracy += float(cuda.to_cpu(acc.data))
* batchsize
# テストデータでの誤...
結果
結果
間違ったのはこの1つだけ。
でも、9にも見えるので仕方ない!?
結果:パラメーター の可視化w
Autoencoder
概要
時間がないので結果だけ・・・
活性化関数 中間層数 Dropout ノイズ付加
Sigmoid 1000 あり なし
誤差の推移:20回しくらいで大体収束
活性化関数 中間層数 Dropout ノイズ付加
Sigmoid 1000 あり なし
出力結果:ほとんど復元できている
活性化関数 中間層数 Dropout ノイズ付加
Sigmoid 1000 あり なし
第一層 w
(1)
ji の可視化
活性化関数 中間層数 Dropout ノイズ付加
Sigmoid 1000 あり なし
第一層 w
(1)
ji の可視化
結構、数字のエッジ等、
特徴らしきものを捉えられている
活性化関数 中間層数 Dropout ノイズ付加
Sigmoid 1000 あり なし
第二層 の可視化w
(2)
ji
詳細はこちらをご覧ください!
• 【機械学習】ディープラーニング フレームワーク
Chainerを試しながら解説してみる。
http://qiita.com/kenmatsu4/items/7b8d24d4c5144a686412
• 【ディー...
また、Chainerの仕組みについては作者の方が非常に
わかりやすくまとめられているので、ぜひご参考ください!
http://www.slideshare.net/beam2d/chainer-atfpgax7
Thanks
• Chainer Homepage
http://chainer.org
• Chainer Github page
https://github.com/pfnet/chainer
• Chainer Document
htt...
Upcoming SlideShare
Loading in...5
×

「深層学習」勉強会LT資料 "Chainer使ってみた"

82

Published on

機械学習プロフェッショナルシリーズの「深層学習」勉強会のLTスライドです。

Published in: Data & Analytics
0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
82
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
9
Embeds 0
No embeds

No notes for slide

Transcript of "「深層学習」勉強会LT資料 "Chainer使ってみた""

  1. 1. Chainer使ってみた @kenmatsu4 2015.8.5 機械学習プロフェッショナルシリーズ輪読会 #4 Lightning Talk  
  2. 2. 自己紹介 ・Twitterアカウント    @kenmatsu4 ・Qiitaでブログを書いています(統計、機械学習、Python等)    http://qiita.com/kenmatsu4    (2500 contributionを超えました!) ・趣味    - バンドでベースを弾いたりしています。    - 主に東南アジアへバックパック旅行に行ったりします    (カンボジア、ミャンマー、バングラデシュ、新疆ウイグル自治区 etc) 旅行の写真 : http://matsu-ken.jimdo.com Twitterアイコン
  3. 3. 2015.6.9 Deep Learning Framework Chainer Release!
  4. 4. 特徴 • All Pythonで記載ができるので、設定ファイル等 のフォーマットを覚える必要がない。 • インストールが簡単 pip install chainer
  5. 5. 王道、MNIST手書き数字で試す。
  6. 6. モデルは入力784 units、出力10 units
  7. 7. # Prepare multi-layer perceptron model # 多層パーセプトロンモデルの設定 # 入力 784次元、出力 10次元 model = FunctionSet( l1=F.Linear(784, n_units), l2=F.Linear(n_units, n_units), l3=F.Linear(n_units, 10)) コード:モデル定義
  8. 8. # Prepare multi-layer perceptron model # 多層パーセプトロンモデルの設定 # 入力 784次元、出力 10次元 model = FunctionSet( l1=F.Linear(784, n_units), l2=F.Linear(n_units, n_units), l3=F.Linear(n_units, 10)) コード:モデル定義(POINT:入出力定義)
  9. 9. # ニューラルネットの構造 def forward(x_data, y_data, train=True): x, t = Variable(x_data), Variable(y_data) h1 = F.dropout(F.relu(model.l1(x)),            train=train) h2 = F.dropout(F.relu(model.l2(h1)),         train=train) y = model.l3(h2) # 多クラス分類なので誤差関数としてソフトマックス関数の # 交差エントロピー関数を用いて、誤差を導出 return F.softmax_cross_entropy(y, t), F.accuracy(y, t) コード:順伝播
  10. 10. # ニューラルネットの構造 def forward(x_data, y_data, train=True): x, t = Variable(x_data), Variable(y_data) h1 = F.dropout(F.relu(model.l1(x)),            train=train) h2 = F.dropout(F.relu(model.l2(h1)),         train=train) y = model.l3(h2) # 多クラス分類なので誤差関数としてソフトマックス関数の # 交差エントロピー関数を用いて、誤差を導出 return F.softmax_cross_entropy(y, t), F.accuracy(y, t) コード:順伝播(POINT: Variableクラス)
  11. 11. 基本クラスの一つです http://docs.chainer.org/en/latest/reference/core/variable.html#variable
  12. 12. 基本クラスの一つです http://docs.chainer.org/en/latest/reference/core/variable.html#variable このクラスに、データ、パラメータ、 モデルの構造等を持たせて、 誤差逆伝播を行います。
  13. 13. # ニューラルネットの構造 def forward(x_data, y_data, train=True): x, t = Variable(x_data), Variable(y_data) h1 = F.dropout(F.relu(model.l1(x)),            train=train) h2 = F.dropout(F.relu(model.l2(h1)),         train=train) y = model.l3(h2) # 多クラス分類なので誤差関数としてソフトマックス関数の # 交差エントロピー関数を用いて、誤差を導出 return F.softmax_cross_entropy(y, t), F.accuracy(y, t) コード:順伝播(POINT: relu関数)
  14. 14. コード:順伝播(POINT: relu関数) relu(x) = max(0, x)
  15. 15. # ニューラルネットの構造 def forward(x_data, y_data, train=True): x, t = Variable(x_data), Variable(y_data) h1 = F.dropout(F.relu(model.l1(x)),            train=train) h2 = F.dropout(F.relu(model.l2(h1)),         train=train) y = model.l3(h2) # 多クラス分類なので誤差関数としてソフトマックス関数の # 交差エントロピー関数を用いて、誤差を導出 return F.softmax_cross_entropy(y, t), F.accuracy(y, t) コード:順伝播(POINT: dropout関数)
  16. 16. コード:順伝播(POINT: dropout関数) x2# x783 x784 x1 x0 z10u10 z1u1 z2u1 z9u9 z1000u1000 z999u999 u1##z1 u2##z2 z0 z1000u1000 z999u999 u1##z1 u2##z2 z0
  17. 17. コード:順伝播(POINT: dropout関数) x2# x784 x0 z10u10 z1u1 z2u1 z9u9 z999u999 u1##z1 z0 z1000u1000 u1##z1 z0
  18. 18. # ニューラルネットの構造 def forward(x_data, y_data, train=True): x, t = Variable(x_data), Variable(y_data) h1 = F.dropout(F.relu(model.l1(x)),            train=train) h2 = F.dropout(F.relu(model.l2(h1)),         train=train) y = model.l3(h2) # 多クラス分類なので誤差関数としてソフトマックス関数の # 交差エントロピー関数を用いて、誤差を導出 return F.softmax_cross_entropy(y, t), F.accuracy(y, t) コード:順伝播(POINT: softmax関数)
  19. 19. コード:順伝播(POINT: softmax関数) yk = zk = fk(u) = exp(uk) PK j exp(uj) En = X k dk log exp(uk) PK j exp(uj) ! 交差エントロピー関数 ソフトマックス関数
  20. 20. # Setup optimizer optimizer = optimizers.Adam() optimizer.setup(model.collect_parameters()) コード:Optimizerの設定 Optimizerで勾配法を選択する。 今回はAdamを使用。 http://ja.scribd.com/doc/260859670/30minutes-Adam Adamの参考
  21. 21. for epoch in xrange(1, n_epoch+1): perm = np.random.permutation(N) # 0∼Nまでのデータをバッチサイズごとに使って学習 for i in xrange(0, N, batchsize): x_batch = x_train[perm[i:i+batchsize]] y_batch = y_train[perm[i:i+batchsize]] # 勾配を初期化 optimizer.zero_grads() # 順伝播させて誤差と精度を算出 loss, acc = forward(x_batch, y_batch) # 誤差逆伝播で勾配を計算 loss.backward() optimizer.update() コード:学習
  22. 22. train_loss.append(loss.data) train_acc.append(acc.data) sum_loss += float(cuda.to_cpu(loss.data)) * batchsize sum_accuracy += float(cuda.to_cpu(acc.data)) * batchsize # 訓練データの誤差と、正解精度を表示 print 'train mean loss={}, accuracy={}' .format(sum_loss / N,sum_accuracy / N) コード:学習
  23. 23. #evaluation #テストデータで誤差と、正解精度を算出し汎化性能を確認 sum_accuracy = 0 sum_loss = 0 for i in xrange(0, N_test, batchsize): x_batch = x_test[i:i+batchsize] y_batch = y_test[i:i+batchsize] # 順伝播させて誤差と精度を算出 loss, acc = forward(x_batch, y_batch, train=False) test_loss.append(loss.data) test_acc.append(acc.data) コード:評価
  24. 24. sum_loss += float(cuda.to_cpu(loss.data)) * batchsize sum_accuracy += float(cuda.to_cpu(acc.data)) * batchsize # テストデータでの誤差と、正解精度を表示 print 'test mean loss={}, accuracy={}’ .format(sum_loss / N_test, sum_accuracy / N_test) コード:評価
  25. 25. 結果
  26. 26. 結果 間違ったのはこの1つだけ。 でも、9にも見えるので仕方ない!?
  27. 27. 結果:パラメーター の可視化w
  28. 28. Autoencoder
  29. 29. 概要
  30. 30. 時間がないので結果だけ・・・
  31. 31. 活性化関数 中間層数 Dropout ノイズ付加 Sigmoid 1000 あり なし 誤差の推移:20回しくらいで大体収束
  32. 32. 活性化関数 中間層数 Dropout ノイズ付加 Sigmoid 1000 あり なし 出力結果:ほとんど復元できている
  33. 33. 活性化関数 中間層数 Dropout ノイズ付加 Sigmoid 1000 あり なし 第一層 w (1) ji の可視化
  34. 34. 活性化関数 中間層数 Dropout ノイズ付加 Sigmoid 1000 あり なし 第一層 w (1) ji の可視化 結構、数字のエッジ等、 特徴らしきものを捉えられている
  35. 35. 活性化関数 中間層数 Dropout ノイズ付加 Sigmoid 1000 あり なし 第二層 の可視化w (2) ji
  36. 36. 詳細はこちらをご覧ください! • 【機械学習】ディープラーニング フレームワーク Chainerを試しながら解説してみる。 http://qiita.com/kenmatsu4/items/7b8d24d4c5144a686412 • 【ディープラーニング】ChainerでAutoencoderを試 して結果を可視化してみる。 http://qiita.com/kenmatsu4/items/99d4a54d5a57405ecaf8
  37. 37. また、Chainerの仕組みについては作者の方が非常に わかりやすくまとめられているので、ぜひご参考ください! http://www.slideshare.net/beam2d/chainer-atfpgax7
  38. 38. Thanks • Chainer Homepage http://chainer.org • Chainer Github page https://github.com/pfnet/chainer • Chainer Document http://docs.chainer.org • Azusa Colors (Keynote template) http://sanographix.github.io/azusa-colors/
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×