chainerの計算グラフについて
以下のコードでMNISTに対してCNNで学習を行なっているのですが、計算グラフ(cg.png)を見るとconcatの後のLinearからしか出力されておらず、訓練データでの精度も低いままになります。モデルの作り方がおかしいのでしょうか。
class CNN(Chain):
def __init__(self):
super(CNN, self).__init__()
with self.init_scope():
# 分岐1
self.cna1 = L.Convolution2D(1, 20, 5)
self.cna2 = L.Convolution2D(20, 50, 5)
self.fca1 = L.Linear(800, 500)
# 分岐2
self.cnb1 = L.Convolution2D(1, 20, (5, 15))
self.cnb2 = L.Convolution2D(20, 50, (5, 7))
self.fcb1 = L.Linear(400, 300)
# 分岐結合後
self.fc1 = L.Linear(800, 500)
self.fc2 = L.Linear(500, 10)
def __call__(self, x):
# 分岐1
ha1 = F.max_pooling_2d(F.relu(self.cna1(x)), 2)
ha2 = F.max_pooling_2d(F.relu(self.cna2(ha1)), 2)
ha3 = F.dropout(F.relu(self.fca1(ha2)))
# 分岐2
hb1 = F.max_pooling_2d(F.relu(self.cnb1(x)), 2)
hb2 = F.relu(self.cnb2(hb1))
hb3 = F.dropout(F.relu(self.fcb1(hb2)))
# 分岐結合
h = F.concat([ha3, hb3], axis=1).data
hab1 = F.dropout(F.relu(self.fc1(h)))
return self.fc2(hab1)