PyTorch 0.4.1 examples : 画像分類 – Fashion MNIST
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 07/31/2018 (0.4.1)
* 本ページは、github 上の以下の pytorch/examples と keras/examples レポジトリのサンプル・コードを参考にしています:
- https://github.com/pytorch/examples/tree/master/mnist
- https://github.com/keras-team/keras/tree/master/examples
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
Fashion MNIST
MNIST データセットの分類タスクについて、PyTorch で MLP, 単純な ConvNet (CNN) そして Network in Network それぞれのモデルを実装しました。
次に Fashion MNIST を扱います。
Fashion MNIST は (既にご存知かと思いますが) 衣料品の分類タスクのためのデータセットです。MNIST の代替として公開され MNIST フォーマット互換な点が特徴です。
この Fashion MNIST データセットを利用してモデルを訓練してみましょう。
訓練と評価
Fashion-MNIST のデータセットは MNIST 互換ですから、MNIST 用のモデルの実装や訓練コードがそのまま流用できます。
下の図は MLP, 単純な ConvNet そして Network in Network モデルを訓練した際の損失グラフを重ねたものです。すぐに分かるようにオレンジ色が MLP です :
精度は次のような結果が得られました。MNIST データセットよりも多少難しいタスクになっていますので、精度も MNIST よりも少し低めです :
- MLP – 90.44 %
- ConvNet – 93.57 %
- Network in Network – 94.52 %
明示的な初期化を伴う ConvNet
次に明示的な初期化を加えてみます。
まずは単純な ConvNet モデルについて、畳み込み層を複数のアルゴリズムで初期化した上で訓練して比較してみました。
以下は損失グラフです :
そして以下の画像は精度の比較グラフです。初期化を遂行しない場合に比べて僅かばかり改善されています :
まとめてみると以下のような精度が得られました :
- (初期化なし) : 93.57 %
- init.xavier_uniform_ : 93.70 %
- init.kaiming_uniform_ : 93.91 %
- init.orthogonal_ : 93.84 %
概ね、orthogonal_ > kaiming_uniform_ > xavier_uniform_ で推移しますが、200 エポック直前に kaiming_uniform_ と orthogonal_ が逆転しています。
初期化を伴う Network in Network
同様に、Network in Network モデルについても畳み込み層を複数のアルゴリズムで初期化した上で訓練して比較してみました。
以下は損失グラフです :
そして精度グラフです :
グラフを見ると、収束速度に差はあるものの大きな差異は見られません。
一応まとめると :
- 初期化なし : 94.44 %
- init.xavier_uniform_ : 94.47 %
- init.kaiming_uniform_ : 94.51 %
- init.orthogonal_ : 94.45 %
単純な ConvNet では 94 % 未満でしたが、Network in Network モデルの場合には 94 % を超えます。
以上