-1 (6月11日追記)コメント頂いたこと
@t-ae さんの指摘によりごく当然な問題が発覚しました。
直そうかとも思ったのですが、いただいた助言は後の章で修正するのに役に立たせてもらうとして、
反面教師としてそのまま残しておこうと思います。
a: 「2」のところでいうようにピラミッド型に増やしたが活性化関数がついていない
→これは線形変換になってしまうため、層を増やすメリットがまったくなくなる。
b: nn.Conv2dの引数でゼロパディングがある
→手動でやるのは大変見にくいので、ぜひこれを使いましょう
0 はじめに
2%の精度があがりました!
89%到達です!

という喜びの叫びからスタート。続きです。
前回は以下の記事にて、CIFAR10で87%を達成しました。
https://qiita.com/daikiclimate/items/020f12778200460f73f4
(やってみると85%から先がなかなかあがらなくて・・・)
ResNetは使わずにPytorchチュートリアルの改造で90%の達成が目標です。
大きく編集した個所は2か所です。
1 dropout層を消した
過学習を起こしているのはわかるんです。グラフ見れば。
ただ、調べてみると、Batchnormとdropoutは併用すると推論時にあまり良い影響を及ぼさないらしいです。
<参考になる論文>
https://arxiv.org/abs/1801.05134
ということでとりあえずDropout層を消すと
めっちゃ学習速い!
これはもろもろ実験がはかどる・・・というのと、何より
速いのに精度の最大値は変わらない
ということで消してみました。
2 Pyramid形にフィルタを増やす
かねてより、
入力層(フィルタ:3)
conv(フィルタ:64)
というのに無理を感じていた。そんなに突然情報量を増やしていけるもんかと。
というところで「MaxPoolingでフィルタを2倍にする」という手法より、「少しずつフィルタを増加させていく」ほうが良いと噂で聞きました。
どうするのが良いのか分からなかったが、1*1 conv層で1層目までに少しつフィルタを増加させていくようにしてみました。
入力層(3層)
1×1 conv(フィルタ:6)
1×1 conv(フィルタ:12)
1×1 conv(フィルタ:24)
1×1 conv(フィルタ:48)
3×3 conv(フィルタ:64)
としてみました
おわりに
短めですが、dropoutなくても性能が変わらないというのに驚きを覚え、記事にしてしまいました。
次は90%達成したときにあげようと思います。
ソース
パラメータ数
Conv2d-1 [-1, 6, 32, 32] 24
Conv2d-2 [-1, 12, 32, 32] 84
Conv2d-3 [-1, 24, 32, 32] 312
BatchNorm2d-4 [-1, 24, 32, 32] 48
Conv2d-5 [-1, 48, 32, 32] 1,200
BatchNorm2d-6 [-1, 48, 32, 32] 96
ConstantPad2d-7 [-1, 48, 34, 34] 0
Conv2d-8 [-1, 64, 32, 32] 27,712
BatchNorm2d-9 [-1, 64, 32, 32] 128
ConstantPad2d-10 [-1, 64, 34, 34] 0
Conv2d-11 [-1, 64, 32, 32] 36,928
ConstantPad2d-12 [-1, 64, 34, 34] 0
Conv2d-13 [-1, 64, 32, 32] 36,928
MaxPool2d-14 [-1, 64, 16, 16] 0
ConstantPad2d-15 [-1, 64, 18, 18] 0
Conv2d-16 [-1, 128, 16, 16] 73,856
BatchNorm2d-17 [-1, 128, 16, 16] 256
ConstantPad2d-18 [-1, 128, 18, 18] 0
Conv2d-19 [-1, 128, 16, 16] 147,584
ConstantPad2d-20 [-1, 128, 18, 18] 0
Conv2d-21 [-1, 128, 16, 16] 147,584
MaxPool2d-22 [-1, 128, 8, 8] 0
ConstantPad2d-23 [-1, 128, 10, 10] 0
Conv2d-24 [-1, 256, 8, 8] 295,168
BatchNorm2d-25 [-1, 256, 8, 8] 512
ConstantPad2d-26 [-1, 256, 10, 10] 0
Conv2d-27 [-1, 256, 8, 8] 590,080
ConstantPad2d-28 [-1, 256, 10, 10] 0
Conv2d-29 [-1, 256, 8, 8] 590,080
MaxPool2d-30 [-1, 256, 4, 4] 0
BatchNorm2d-31 [-1, 256, 4, 4] 512
Conv2d-32 [-1, 100, 4, 4] 25,700
Conv2d-33 [-1, 10, 1, 1] 16,010
Net-34 [-1, 10] 0
=================================================================
Total params: 1,990,802
Trainable params: 1,990,802
Non-trainable params: 0
-----------------------------------------------------------------
Input size (MB): 0.01
Forward/backward pass size (MB): 7.86
Params size (MB): 7.59
Estimated Total Size (MB): 15.47
-----------------------------------------------------------------