def __call__(self, x, train=True):
h = F.relu(self.conv1(x))
h = F.max_pooling_2d(h, ksize=(2, 2), stride=(2, 2), pad=(0, 0))
h = F.relu(self.conv2(h))
h = F.max_pooling_2d(h, ksize=(2, 2), stride=(2, 2), pad=(0, 0))
h = F.relu(self.conv3_1(h))
h = F.relu(self.conv3_2(h))
h = F.max_pooling_2d(h, ksize=(2, 2), stride=(2, 2), pad=(0, 0))
h = F.relu(self.conv4_1(h))
h = F.relu(self.conv4_2(h))
h = F.max_pooling_2d(h, ksize=(2, 2), stride=(2, 2), pad=(0, 0))
h = F.relu(self.conv5_1(h))
h = F.relu(self.conv5_2(h))
h = F.max_pooling_2d(h, ksize=(2, 2), stride=(2, 2), pad=(0, 0))
h = F.dropout(h, ratio=0.5, train=train)
h = F.relu(self.fc1(h))
h = F.dropout(h, ratio=0.5, train=train)
h = F.relu(self.fc2(h))
h = self.fc3(h)
num, categories, y, x = h.data.shape
# global average pooling
h = F.reshape(F.average_pooling_2d(h, (y, x)), (num, categories))
return h
评论列表
文章目录