예제 #1
0
    def __init__(self, depth, k, num_classes=10, depthwise=True):
        super().__init__()
        num_blocks = (depth - 4) // 6
        self.stem = Conv2d(3, self.stages[0], kernel_size=3)

        self.layer1 = self._make_layer(self.stages[0] * 1,
                                       self.stages[1] * k,
                                       num_blocks,
                                       stride=1,
                                       depthwise=depthwise)
        self.layer2 = self._make_layer(self.stages[1] * k,
                                       self.stages[2] * k,
                                       num_blocks,
                                       stride=2,
                                       depthwise=depthwise)
        self.layer3 = self._make_layer(self.stages[2] * k,
                                       self.stages[3] * k,
                                       num_blocks,
                                       stride=2,
                                       depthwise=depthwise)

        self.norm = Norm(self.stages[3] * k)
        self.act = Act()
        self.avgpool = GlobalAvgPool()
        self.fc = Linear(self.stages[3] * k, num_classes)
예제 #2
0
    def __init__(self, C, layers, auxiliary, drop_path, num_classes, genotype):
        super().__init__()
        self._num_layers = layers
        self._auxiliary = auxiliary
        self._drop_path = drop_path

        stem_multiplier = 3
        C_curr = stem_multiplier * C
        self.stem = Conv2d(3, C_curr, 3, norm='def')

        C_prev_prev, C_prev, C_curr = C_curr, C_curr, C
        self.cells = nn.ModuleList()
        reduction_prev = False
        for i in range(layers):
            if i in [layers // 3, 2 * layers // 3]:
                C_curr *= 2
                reduction = True
            else:
                reduction = False
            cell = Cell(genotype, C_prev_prev, C_prev, C_curr, reduction,
                        reduction_prev, drop_path)
            reduction_prev = reduction
            self.cells.append(cell)
            C_prev_prev, C_prev = C_prev, cell.multiplier * C_curr
            if auxiliary and i == 2 * layers // 3:
                C_to_auxiliary = C_prev

        if auxiliary:
            self.auxiliary_head = AuxiliaryHeadCIFAR(C_to_auxiliary,
                                                     num_classes)
        self.classifier = nn.Sequential(
            GlobalAvgPool(),
            Linear(C_prev, num_classes),
        )
예제 #3
0
    def __init__(self, depth, group_channels=(64, 128, 256), cardinality=(8, 8, 8),
                 num_classes=100, stages=(64, 64, 128, 256)):
        super().__init__()
        self.stages = stages
        block = Bottleneck
        layers = [(depth - 2) // 9] * 3
        if isinstance(group_channels, int):
            group_channels = [group_channels] * 3
        if isinstance(cardinality, int):
            cardinality = [cardinality] * 3

        self.stem = Conv2d(3, self.stages[0], kernel_size=3, norm='def', act='def')
        self.in_channels = self.stages[0]

        self.layer1 = self._make_layer(
            block, self.stages[1], layers[0], stride=1,
            group_channels=group_channels[0], cardinality=cardinality[0])
        self.layer2 = self._make_layer(
            block, self.stages[2], layers[1], stride=2,
            group_channels=group_channels[1], cardinality=cardinality[1])
        self.layer3 = self._make_layer(
            block, self.stages[3], layers[2], stride=2,
            group_channels=group_channels[2], cardinality=cardinality[2])

        self.avgpool = GlobalAvgPool()
        self.fc = Linear(self.in_channels, num_classes)
예제 #4
0
    def __init__(self, in_channels=1, num_classes=10, dropout=None):
        super().__init__()
        self.features = nn.Sequential(
            Conv2d(in_channels, 6, 5, stride=1, padding=0, act='def'),
            nn.MaxPool2d(2, 2),
            Conv2d(6, 16, 5, stride=1, padding=0, act='def'),
            nn.MaxPool2d(2, 2),
        )

        classifier = [
            Flatten(),
            Linear(400, 120, act='def'),
            Linear(120, 84, act='def'),
            Linear(84, num_classes)
        ]
        if dropout:
            classifier.insert(0, nn.Dropout(dropout))
            classifier.insert(2, nn.Dropout(dropout))
            classifier.insert(4, nn.Dropout(dropout))
        self.classifier = nn.Sequential(*classifier)
예제 #5
0
 def __init__(self, C, num_classes):
     """assuming input size 8x8"""
     super().__init__()
     self.features = nn.Sequential(
         Act('relu', inplace=True),
         Pool2d(5, stride=3, padding=0, type='avg'),
         Conv2d(C, 128, 1, norm='def', act='relu'),
         Conv2d(128, 768, 2, norm='def', act='relu', padding=0),
     )
     self.classifier = nn.Sequential(
         GlobalAvgPool(),
         Linear(768, num_classes),
     )
예제 #6
0
    def __init__(self,
                 depth,
                 block='basic',
                 dropout=0,
                 drop_path=0,
                 num_classes=10,
                 stages=(64, 64, 128, 256)):
        super().__init__()
        self.stages = stages
        if block == 'basic':
            block = BasicBlock
            layers = [(depth - 2) // 6] * 3
        else:
            block = Bottleneck
            layers = [(depth - 2) // 9] * 3

        self.conv = Conv2d(3,
                           self.stages[0],
                           kernel_size=3,
                           norm='def',
                           act='def')
        self.in_channels = self.stages[0]

        self.layer1 = self._make_layer(block,
                                       self.stages[1],
                                       layers[0],
                                       stride=1,
                                       dropout=dropout,
                                       drop_path=drop_path)
        self.layer2 = self._make_layer(block,
                                       self.stages[2],
                                       layers[1],
                                       stride=2,
                                       dropout=dropout,
                                       drop_path=drop_path)
        self.layer3 = self._make_layer(block,
                                       self.stages[3],
                                       layers[2],
                                       stride=2,
                                       dropout=dropout,
                                       drop_path=drop_path)

        self.avgpool = GlobalAvgPool()
        self.fc = Linear(self.in_channels, num_classes)
예제 #7
0
    def __init__(self,
                 depth,
                 k,
                 num_classes=10,
                 dropout=0,
                 use_se=False,
                 drop_path=0,
                 depthwise=True):
        super().__init__()
        num_blocks = (depth - 4) // 6
        self.stem = Conv2d(3, self.stages[0], kernel_size=3)

        self.layer1 = self._make_layer(self.stages[0] * 1,
                                       self.stages[1] * k,
                                       num_blocks,
                                       stride=1,
                                       dropout=dropout,
                                       use_se=use_se,
                                       drop_path=drop_path,
                                       depthwise=depthwise)
        self.layer2 = self._make_layer(self.stages[1] * k,
                                       self.stages[2] * k,
                                       num_blocks,
                                       stride=2,
                                       dropout=dropout,
                                       use_se=use_se,
                                       drop_path=drop_path,
                                       depthwise=depthwise)
        self.layer3 = self._make_layer(self.stages[2] * k,
                                       self.stages[3] * k,
                                       num_blocks,
                                       stride=2,
                                       dropout=dropout,
                                       use_se=use_se,
                                       drop_path=drop_path,
                                       depthwise=depthwise)

        self.post_activ = nn.Sequential(Norm(self.stages[3] * k), Act())

        self.classifier = nn.Sequential(
            GlobalAvgPool(),
            Linear(self.stages[3] * k, num_classes),
        )
예제 #8
0
    def __init__(self,
                 depth,
                 block='basic',
                 erase_relu=False,
                 num_classes=10,
                 stages=(16, 16, 32, 64)):
        super().__init__()
        self.stages = stages
        if block == 'basic':
            block = BasicBlock
            layers = [(depth - 2) // 6] * 3
        else:
            block = Bottleneck
            layers = [(depth - 2) // 9] * 3

        self.stem = Conv2d(3,
                           self.stages[0],
                           kernel_size=3,
                           norm='def',
                           act='def')
        self.in_channels = self.stages[0]

        self.layer1 = self._make_layer(block,
                                       self.stages[1],
                                       layers[0],
                                       stride=1,
                                       erase_relu=erase_relu)
        self.layer2 = self._make_layer(block,
                                       self.stages[2],
                                       layers[1],
                                       stride=2,
                                       erase_relu=erase_relu)
        self.layer3 = self._make_layer(block,
                                       self.stages[3],
                                       layers[2],
                                       stride=2,
                                       erase_relu=erase_relu)

        self.avgpool = GlobalAvgPool()
        self.fc = Linear(self.in_channels, num_classes)
예제 #9
0
    def __init__(self,
                 depth,
                 cardinality,
                 base_width,
                 num_classes=10,
                 stages=(64, 64, 128, 256)):
        super().__init__()
        self.stages = stages
        block = Bottleneck
        layers = [(depth - 2) // 9] * 3

        self.stem = Conv2d(3,
                           self.stages[0],
                           kernel_size=3,
                           norm='def',
                           act='def')
        self.in_channels = self.stages[0]

        self.layer1 = self._make_layer(block,
                                       self.stages[1],
                                       layers[0],
                                       stride=1,
                                       cardinality=cardinality,
                                       base_width=base_width)
        self.layer2 = self._make_layer(block,
                                       self.stages[2],
                                       layers[1],
                                       stride=2,
                                       cardinality=cardinality,
                                       base_width=base_width)
        self.layer3 = self._make_layer(block,
                                       self.stages[3],
                                       layers[2],
                                       stride=2,
                                       cardinality=cardinality,
                                       base_width=base_width)

        self.avgpool = GlobalAvgPool()
        self.fc = Linear(self.in_channels, num_classes)