TIM Labs

Chainer: 中間層のユニット数は非常に少なくてもOK

| コメント(0) | トラックバック(0)
デフォルのままだと、中間層が2層で、それぞれ1000ユニットで、
784 ==> 1000 ==> 1000 ==> 10
として動かしていた。

中間層の2層のノード数を自由に変更できるようになったので、まず次のようにしてみた。
784 ==> 300 ==> 30 ==> 10

Chainer$ python train_mnist1.py -g 0 -u 300 30
GPU: 0
# number: 60000
# units: [300, 30]
# Minibatch-size: 100
# epoch: 20

epoch       main/loss   validation/main/loss  main/accuracy  validation/main/accuracy  elapsed_time
1           0.307806    0.150247              0.913467       0.954                     2.44043       
2           0.123374    0.112284              0.963534       0.9662                    4.77677       
3           0.0812434   0.0797795             0.975833       0.9758                    7.09853  
・・・・・・・・・・・・・・・      中  略      ・・・・・・・・・・・・・・・                  
18          0.00678134  0.0989654             0.997766       0.9799                    42.7799       
19          0.00394047  0.107429              0.998866       0.9782                    45.2334       
20          0.00806017  0.0969633             0.997466       0.9803                    47.6298       
Chainer$ 
かなり中間層を小さくしたのだが、テスト精度は98%あり、精度は落ちていない。
つまり、中間層を小さくしても影響は少ないようだ。

ということで、どんどん減らしてみよう。
中間層の第2層を出力層と同じ10まで下げてみた。
分類数と同じだが、どうなるだろうか?

784 ==> 50 ==> 10 ==> 10

Chainer$ python train_mnist1.py -g 0 -u 50 10
GPU: 0
# number: 60000
# units: [50, 10]
# Minibatch-size: 100
# epoch: 20

epoch       main/loss   validation/main/loss  main/accuracy  validation/main/accuracy  elapsed_time
1           0.583669    0.312933              0.828284       0.9087                    2.45214       
2           0.26503     0.23423               0.925767       0.931                     4.88362       
3           0.202712    0.191492              0.942717       0.9448                    7.3304        
・・・・・・・・・・・・・・・      中  略      ・・・・・・・・・・・・・・・                  
18          0.0472231   0.132507              0.985798       0.9636                    42.9347       
19          0.0456997   0.120474              0.986715       0.9653                    45.3106       
20          0.0433583   0.123629              0.986148       0.9672                    47.6485       
Chainer$ 

かなり中間層を絞ったのだが、まだ96%の正解率である。
ということで、思いっきり絞ってみた。
784 ==> 40 ==> 2 ==> 10

Chainer$ python train_mnist1.py -g 0 -u 40 2
GPU: 0
# number: 60000
# units: [40, 2]
# Minibatch-size: 100
# epoch: 20

epoch       main/loss   validation/main/loss  main/accuracy  validation/main/accuracy  elapsed_time
1           1.66372     1.36298               0.392867       0.5006                    2.45188       
2           1.20082     1.08511               0.562367       0.6294                    4.81112       
3           0.997415    0.951765              0.65775        0.6989                    7.13735       

18          0.3529      0.502587              0.915784       0.8996                    42.5103       
19          0.341643    0.48146               0.918735       0.9035                    44.8852       
20          0.329597    0.491561              0.920851       0.9042                    47.2294       
Chainer$ 
という訳で、中間層のユニット数をどんどん減らし、第2層のユニット数を2まで減らしても正解率90%を維持しているのは脅威だ。

といっても、手書き数字の読み取りでの場合なのだ。
少々手書き数字には飽きてきたので、別のデータセットなども考えてみることにする。

トラックバック(0)

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

コメントする

このブログ記事について

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

ひとつ前のブログ記事は「データ解析のための統計モデリング入門 GLMの応用範囲をひろげる 読書メモ5」です。

次のブログ記事は「Chainer:GPUを使うプログラムはどう書くか」です。

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