Successfully reported this slideshow.                                      Upcoming SlideShare
×

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

12,623 views

Published on

Published in: Data & Analytics
• Full Name
Comment goes here.

Are you sure you want to Yes No • Dating for everyone is here: ❶❶❶ http://bit.ly/2Q98JRS ❶❶❶

Are you sure you want to  Yes  No
• Sex in your area is here: ❶❶❶ http://bit.ly/2Q98JRS ❶❶❶

Are you sure you want to  Yes  No

Are you sure you want to  Yes  No
• Hi there! Essay Help For Students | Discount 10% for your first order! - Check our website! https://vk.cc/80SakO

Are you sure you want to  Yes  No

### 「深層学習」勉強会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) ! 交差エントロピー関数 ソフトマックス関数
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. 結果 間違ったのはこの１つだけ。 でも、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/