TIM Labs

CIFAR-10のカラー画像学習にプーリングを入れてみた

| コメント(0) | トラックバック(0)
前回は、プーリングの説明をした。
今回からは、プーリングの実装について書く。
といっても、僅かな変更を加えるだけである。

とりあえす、プーリングのサイズが2の場合を試す。
# Network definition
class CNN(chainer.Chain):

    def __init__(self, n_units, n_out):
        super(CNN, self).__init__(
            conv1=L.Convolution2D(None, 36, 3),     # 畳み込み
            conv2=L.Convolution2D(None, 36, 4),     # 畳み込み
            l1=L.Linear(None, n_units[0]),  #            -> n_units[0]
            l2=L.Linear(None, n_units[1]),  # n_units[0] -> n_units[1]
            l3=L.Linear(None, n_out),  	    # n_units[1] -> n_out
        )
        
    def __call__(self, x):
        c1 = F.relu(self.conv1(x))                  # 畳み込み
        c2 = F.relu(self.conv2(c1))                 # 畳み込み
        p1 = F.max_pooling_2d(c2,2)                 # プーリング
        h1 = F.relu(self.l1(p1))
        h2 = F.relu(self.l2(h1))
        return self.l3(h2)

畳み込みでは、1層増やす毎に、__init__() と __call__() が1行ずつ増えたのだが、プーリングでは、__call__()の中に1行書き加えただけである。 畳み込みの2回目が終わって、全結合層に入る直前にプーリング層を入れている。 何も説明することがないくらい簡単で困る。
CIFAR-10$ python train_cifar4.py -g 0 -u 500 500
GPU: 0
# number: 50000
# units: [500, 500]
# Minibatch-size: 100
# epoch: 20

epoch       main/loss   validation/main/loss  main/accuracy  validation/main/accuracy  elapsed_time
1           1.37013     1.07603               0.50554        0.6189                    10.172        
2           0.925518    0.927358              0.674221       0.6721                    20.1767       
3           0.702369    0.863335              0.75472        0.698                     30.1597       
4           0.497263    0.943865              0.826219       0.6971                    40.1821       
5           0.309668    1.07688               0.89288        0.6817                    50.2104       
6           0.190367    1.31478               0.934821       0.6863                    60.2692       
7           0.114691    1.6023                0.961002       0.6772                    70.3088       
8           0.0909024   1.62564               0.969121       0.6843                    80.3344       
9           0.081165    1.91912               0.973141       0.6817                    90.3658       
10          0.0655271   1.89566               0.9781         0.6801                    100.399       
11          0.0500345   2.14553               0.983081       0.6807                    110.461       
12          0.0604023   2.11143               0.980221       0.6803                    120.45        
13          0.0505119   2.14404               0.98318        0.6804                    130.529       
14          0.0511697   2.21828               0.98332        0.6772                    140.634       
15          0.0505931   2.21631               0.983          0.6765                    150.707       
16          0.0434303   2.23873               0.98596        0.6814                    160.816       
17          0.037501    2.39804               0.98786        0.6787                    170.89        
18          0.0337717   2.64839               0.989279       0.6776                    180.98        
19          0.0455601   2.3579                0.985121       0.6756                    191.067       
20          0.0406653   2.50223               0.98644        0.6817                    201.16        
CIFAR-10$ 
accuracy-CNN4.png
テスト精度がほぼ0.7まで上昇した。
前回は67%には届かなかったので、また約3%性能アップしたようだ。

さて、次は、どうしよう。
プーリング層を増やすか、それともプーリングのサイズを変えて効果の違いを探るか、やるべきことは色々ありそうだ。

トラックバック(0)

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

コメントする

このブログ記事について

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

ひとつ前のブログ記事は「データ解析のための統計モデリング入門 一般化線形混合モデル(GLMM) 読書メモ3」です。

次のブログ記事は「データ解析のための統計モデリング入門 一般化線形混合モデル(GLMM) 読書メモ4」です。

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