Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.                                      Upcoming SlideShare
Loading in …5
×
• Full Name
Comment goes here.

Are you sure you want to Yes No
Your message goes here • Be the first to comment

### 「深層学習」勉強会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. 結果 間違ったのはこの１つだけ。 でも、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/