TIM Labs

GPU:MNISTでミニバッチを大きくしてみた

| コメント(0) | トラックバック(0)
せっかくGPUが使えるようになったので、その効果ができるだけ出るようにしてみたいものだ。
ということで、とりあえずミニバッチの数をデフォルトの100から1000に増やしてみた。

Chainer$ python train_mnist.py -g 0 -b 1000
GPU: 0
# unit: 1000
# Minibatch-size: 1000
# epoch: 20

epoch       main/loss   validation/main/loss  main/accuracy  validation/main/accuracy  elapsed_time
1           0.398479    0.165815              0.8895         0.9507                    0.972913      
2           0.130305    0.103915              0.9622         0.9661                    1.82951       
3           0.0807383   0.0763431             0.976533       0.9764                    2.68751       
・・・・・・・・・・・・・・・      中  略      ・・・・・・・・・・・・・・・   
18          0.000367914  0.0654017             1              0.9838                    15.6677       
19          0.000316801  0.0666274             1              0.984                     16.5294       
20          0.000283742  0.0675182             1              0.9839                    17.3905       
Chainer$  
実行時間は、17.39秒であり、b=100のとき(49秒)と比べて約2.8倍高速になった。 まとめて処理する単位を増やすと、全体の計算量は変わらないはずなのだが、かなり効率的になるようだ。
学習データ自体を使ったテスト(main/accuracy)は正解率100%になっているが、テストデータでは98.4%程度であり、デフォルトの場合との違いはほとんどない。

バッチサイズの変更で、GPUのメモリ使用量は、こんな感じで増加していった。
-b 100 (デフォルト)
|    0     16937    C   python                                         209MiB |

-b 1000
|    0     16917    C   python                                         317MiB |

-b 2000
|    0     16998    C   python                                         339MiB |

-b 5000
|    0     17031    C   python                                         493MiB |

-b 10000
|    0     17343    C   python                                         639MiB |
ミニバッチのサイズを大きくするとより高速になっていくと言いたいところだが、それは100を1000にした時には効果的だったのだが、10000にしても、速度はほとんど上昇しない。
Chainer$ python train_mnist.py -g 0 -b 10000
GPU: 0
# unit: 1000
# Minibatch-size: 10000
# epoch: 20

epoch       main/loss   validation/main/loss  main/accuracy  validation/main/accuracy  elapsed_time
1           1.37287     0.512147              0.660883       0.8614                    0.905861      
2           0.437023    0.361621              0.87135        0.901                     1.69545       
3           0.335709    0.294568              0.905283       0.9191                    2.50435       
・・・・・・・・・・・・・・・      中  略      ・・・・・・・・・・・・・・・   
18          0.0516563   0.0811957             0.986567       0.9746                    14.6888       
19          0.0475925   0.0765162             0.987367       0.9759                    15.4938       
20          0.0428052   0.074131              0.988917       0.9778                    16.29         
Chainer$ 
それよりも、accuracyが少し落ちてきたのがわかる。
ミニバッチ毎に学習が分けて行われるので、どうやら適度なサイズで行わないと、accuracyが落ちるようだ。
速度と精度のバランスを考えてミニバッチのサイズは決定しないといけないらしい。

ところで、MNISTデータセットは、学習用データが60000、テストデータが10000ある。
学習用データの数を変更してみようと思うが、どうやらコマンドパラメータからはできないらしい。
さて、どうしよう。

トラックバック(0)

トラックバックURL: http://labs.timedia.co.jp/mt/mt-tb.cgi/595

コメントする

このブログ記事について

このページは、fujiが2017年4月 4日 00:00に書いたブログ記事です。

ひとつ前のブログ記事は「ChainerでGPUを使ってみよう」です。

次のブログ記事は「データ解析のための統計モデリング入門 GLMの尤度比検定と検定の非対称性 読書メモ6」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。