def forward(self, x_data, y_data, train=True):
x = Variable(x_data, volatile=not train)
t = Variable(y_data, volatile=not train)
h = F.relu(self.conv1(x))
h = F.relu(self.conv1a(h))
h = F.relu(self.conv1b(h))
h = F.max_pooling_2d(h, 3, stride=2)
h = F.relu(self.conv2(h))
h = F.relu(self.conv2a(h))
h = F.relu(self.conv2b(h))
h = F.max_pooling_2d(h, 3, stride=2)
h = F.relu(self.conv3(h))
h = F.relu(self.conv3a(h))
h = F.relu(self.conv3b(h))
h = F.dropout(h, F.max_pooling_2d(h, 3, stride=2), train=train)
h = F.relu(self.conv4(h))
h = F.relu(self.conv4a(h))
h = F.relu(self.conv4b(h))
h = F.reshape(F.average_pooling_2d(h, 6), (x_data.shape[0], 1000))
return F.softmax_cross_entropy(h, t), F.accuracy(h, t)
Chainerの例
https://github.com/pfnet/chainer/tree/master/examples/imagenet
バイアスは のように に依存せず、画素の位置に依存
せず設定するのが一般的( 全体の濃さになるイメージ)
畳込み層
uijm =
K 1X
k=0
H 1X
p=0
H 1X
q=0
z
(l 1)
i+p,j+q,khpqkm + bijm
…
W
W
K
フィルタ1
*
…
H
H
K
hpqk0
f(·)
m = 0
uij0 zij0
uijm =
K 1X
k=0
H 1X
p=0
H 1X
q=0
z
(l 1)
i+p,j+q,khpqkm + bijmを求める式は下記となる
bijm = bm i, j
uijm
b0
局所コントラスト正規化:除算正規化
ただし、 をそのまま使うと、濃淡が少ない局所領域ほどzij =
xij ¯xij
ij
濃淡が増幅されてしまい、ノイズが強調される等の不都合がある。
これを回避するためにある定数 を設定し、濃淡の標準偏差がこれを下回ると
きは をつかって除算するようにする。
c
c
zij =
xij ¯xij
max(c, ij)
同様の効果が に応じて連続的に変化するij
を使う場合もある。
zij =
xij ¯xij
q
c + 2
ij