def setUp(self):
     self.size = 3
     self.link = links.GroupNormalization(self.groups)
     self.shape = (1, self.size, 1)
    def __init__(self, n_layers, class_labels=None):
        super(ResNet, self).__init__()
        w = chainer.initializers.HeNormal()

        # expected insize = 224
        if n_layers == 18:
            block = [2, 2, 2, 2]
        elif n_layers == 19:
            block = [2, 2, 2, 2]
        elif n_layers == 20:
            block = [2, 2, 2, 2, 2]
        elif n_layers == 21:
            block = [2, 2, 2, 2, 2, 2]
        elif n_layers == 34:
            block = [3, 4, 6, 3]
        elif n_layers == 50:
            block = [3, 4, 6, 3]
        elif n_layers == 101:
            block = [3, 4, 23, 3]
        elif n_layers == 152:
            block = [3, 4, 36, 3]
        # expected insize = 32
        elif n_layers == 32:
            block = [5, 5, 5]
        elif n_layers == 44:
            block = [7, 7, 7]
        elif n_layers == 56:
            block = [9, 9, 9]
        elif n_layers == 110:
            block = [18, 18, 18]
        else:
            raise ValueError(
                "You tried to create a ResNet variant that does not exist")

        with self.init_scope():
            if n_layers == 16:
                self.conv1 = L.Convolution2D(3,
                                             64,
                                             7,
                                             2,
                                             3,
                                             initialW=w,
                                             nobias=True)
                self.bn1 = L.GroupNormalization(32)
                self.res2 = BasicBlock(block[0], 128, 1)
                self.res3 = BasicBlock(block[1], 256)
                self.res4 = BasicBlock(block[2], 512)
            elif n_layers in [18, 20, 21, 34]:
                self.conv1 = L.Convolution2D(3,
                                             64,
                                             7,
                                             2,
                                             3,
                                             initialW=w,
                                             nobias=True)
                self.bn1 = L.GroupNormalization(16)
                self.res2 = BasicBlock(block[0], 64, 1, num_groups=16)
                self.res3 = BasicBlock(block[1], 128)
                self.res4 = BasicBlock(block[2], 256)
                self.res5 = BasicBlock(block[3], 512)
            elif n_layers in [32, 44, 56, 110]:
                self.conv1 = L.Convolution2D(3,
                                             16,
                                             7,
                                             2,
                                             3,
                                             initialW=w,
                                             nobias=True)
                self.bn1 = L.GroupNormalization(8)
                self.res2 = BasicBlock(block[0], 16, 1)
                self.res3 = BasicBlock(block[1], 32)
                self.res4 = BasicBlock(block[2], 64)
            elif n_layers in [19, 50, 101, 152]:
                self.conv1 = L.Convolution2D(3,
                                             64,
                                             7,
                                             2,
                                             3,
                                             initialW=w,
                                             nobias=True)
                self.bn1 = L.GroupNormalization(32)
                self.res2 = BottleNeckBlock(block[0], 64, 64, 256, 1)
                self.res3 = BottleNeckBlock(block[1], 256, 128, 512)
                self.res4 = BottleNeckBlock(block[2], 512, 256, 1024)
                self.res5 = BottleNeckBlock(block[3], 1024, 512, 2048)
            if n_layers in [20, 21]:
                self.res6 = BasicBlock(block[4], 512)
            if n_layers in [21]:
                self.res7 = BasicBlock(block[5], 512)
            if class_labels is not None:
                self.fc = L.Linear(None, class_labels)

        self.n_layers = n_layers
        self.class_labels = class_labels
 def test_invalid_groups(self):
     self.link = links.GroupNormalization(groups=3)
     with self.assertRaises(ValueError):
         self.link(self.x)
 def test_invalid_type_groups(self):
     self.link = links.GroupNormalization(groups=3.5)
     with self.assertRaises(TypeError):
         self.link(self.x)
 def setUp(self):
     self.link = links.GroupNormalization(groups=3)