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