※現在、ブログ記事を移行中のため一部表示が崩れる場合がございます。
順次修正対応にあたっておりますので何卒ご了承いただけますよう、お願い致します。

Chainer:畳み込み層を2層に増やしたら、さらに性能向上


2017年 05月 19日

前回、畳み込み層を1層入れたら、10%精度が向上した。
ということは、もう1層追加したら、さらに精度が上がるかも知れない。

では、さっそく追加してみよう。

# 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, 3),     # 追加行
l1=L.Linear(None, n_units[0]),  # n_in -> 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))                 # 追加行
h1 = F.relu(self.l1(c2))
h2 = F.relu(self.l2(h1))
return self.l3(h2)
変更は僅かであり、説明する必要もないだろう。 1層のときの出力チャネル数は48だったが、今回は36チャンネルにした。 チャネル数をいくつにするのがベストなのかよくわからないので、適当に値を変えて、一番良さそうな値を選んだだけであり、根拠はない。
では、早速走らせてみよう。
CIFAR-10$ python train_cifar3.py -g 0 -u 200 200 -e 20
GPU: 0
# number: 50000
# units: [200, 200]
# Minibatch-size: 100
# epoch: 20

epoch       main/loss   validation/main/loss  main/accuracy  validation/main/accuracy  elapsed_time
1           1.4159      1.13834               0.48884        0.599                     9.25972
2           0.97892     0.988769              0.65318        0.654                     18.4154
3           0.746028    0.980138              0.73654        0.6667                    27.5391
4           0.542533    1.07012               0.810679       0.66                      36.6622
5           0.343509    1.23141               0.88124        0.6609                    45.7941
6           0.203577    1.43938               0.930721       0.6502                    54.9523
7           0.130787    1.79407               0.955861       0.6455                    64.1065
8           0.10182     2.02728               0.965981       0.641                     73.2419
9           0.0723793   2.26742               0.976501       0.6303                    82.3618
10          0.069895    2.23746               0.976921       0.6361                    91.4902
11          0.0561796   2.46271               0.98124        0.6307                    100.622
12          0.0611673   2.62696               0.979021       0.6274                    109.749
13          0.0434337   2.80836               0.985561       0.6262                    118.893
14          0.0537561   2.52369               0.9824         0.6351                    128.022
15          0.054097    2.75292               0.98178        0.6274                    137.158
16          0.045905    2.88034               0.9847         0.6354                    146.3
17          0.038558    2.94397               0.98716        0.6351                    155.418
18          0.0468413   2.75888               0.98436        0.627                     164.583
19          0.0346255   3.07014               0.98884        0.6249                    173.721
20          0.0300259   3.2695                0.99022        0.6193                    182.873
CIFAR-10$

accuracy-CNN2.png
畳み込みを1層から2層にすることで、テスト精度の最大値が、61.89%から66.67%に向上した。
約5%精度が向上した。
まあまあだ。
でも、向上の割合は半減しているので、畳み込み層を単純に増加させるだけでは限界が近いようだ。
何か別のことも試さないといけない。