Resnetを試してみた
はじめに
ディープラーニングについて学習する上で、Resnet、Resnet-RSを実装して試行毎の損失、正解率を比較してみた。
ColaboratoryでのコードをGithubに載せました。
Resnet: https://github.com/9mao9/Resnet-RS_CIFAR100
Resnet-RS: https://github.com/9mao9/Resnet-RS_CIFAR100
Resnetについて
Resnet [1]
図1に示す残差ブロックの導入により、層を深くすると生じる勾配消失を防ぎ、従来のモデルよりも高い精度を実現した手法。モデルの作成において[2][3]を参考にした。
Resnet-RS [4]
Resnetのネットワーク構造をResnet-D [5]に変更し、SEブロック [6]を追加したモデル。モデルの作成において[7][8]を参考にした。
実装環境
バージョン情報
- torch 1.10.0+cu111
- torchvision 0.11.1+cu111
- numpy 1.19.5
- sklearn 1.0.2
訓練データはCIFAR-100を利用した。
実験条件
両者とも入力サイズ、バッチサイズなどをResnet-RS [4]に準拠。
- 入力サイズ:[3, 160, 160]
- バッチサイズ:128
- 学習率:0.0078125 (Resnetは0.001)
- weight decay:4e-5
- optimizer: SGD (momentum: 0.9)
- transform: RandAugmentation (magnitude: 10)
- Drop out: 0.25 (Resnet-rsのみ)
Resnetの学習率を0.0078125とすると学習が進まなかったため0.001とした。また、ResnetのFC層の前にドロップアウトを追加しても学習が進まなかったため、除外した。
結果
ネットワークの深さは50層とし、論文の通り350 epochも行うと時間がかかりすぎるため、50 epochで確かめた。
精度は式(1)に示す正解率である。ResnetよりもResnet-RSの方が学習が進み、精度も高くなっている傾向がある。SEブロックおよびドロップアウトの影響が大きいと考えられる。
50 epochで精度が収束してるように見えるけど試行回数を増やすとあがるのかな。
参考
[1] K. He, et.al., "Deep Residual Learning for Image Recognition", 2015.
[2] Residual Network(ResNet)の理解とチューニングのベストプラクティス
[4] I. Bello, et.al, "Revisiting ResNets: Improved Training and Scaling Strategies", 2021
[5] T. He, et.al, "Bag of Tricks for Image Classification with Convolutional Neural Networks", 2018
[6] J. Hu, et.al, "Squeeze-and-Excitation Networks", 2017)