python
1 2 insize = 227 3 4 def __init__(self): 5 super(NIN, self).__init__() 6 conv_init = I.HeNormal() # MSRA scaling 7 8 with self.init_scope(): 9 self.mlpconv1 = L.MLPConvolution2D( 10 None, (96, 96, 96), 11, stride=4, conv_init=conv_init) 11 self.mlpconv2 = L.MLPConvolution2D( 12 None, (256, 256, 256), 5, pad=2, conv_init=conv_init) 13 self.mlpconv3 = L.MLPConvolution2D( 14 None, (384, 384, 384), 3, pad=1, conv_init=conv_init) 15 self.mlpconv4 = L.MLPConvolution2D( 16 None, (1024, 1024, 1000), 3, pad=1, conv_init=conv_init) 17 18 def __call__(self, x, t): 19 h = F.max_pooling_2d(F.relu(self.mlpconv1(x)), 3, stride=2) 20 h = F.max_pooling_2d(F.relu(self.mlpconv2(h)), 3, stride=2) 21 h = F.max_pooling_2d(F.relu(self.mlpconv3(h)), 3, stride=2) 22 h = self.mlpconv4(F.dropout(h)) 23 h = F.reshape(F.average_pooling_2d(h, 6), (len(x), 1000)) 24 25 loss = F.softmax_cross_entropy(h, t) 26 chainer.report({'loss': loss, 'accuracy': F.accuracy(h, t)}, self) 27 return loss