def __init__(self, depth, num_classes, is_imagenet):
        super(ResNet_cutmix, self).__init__()
        self.in_planes = 64
        self.is_imagenet = is_imagenet

        block, num_blocks = cfg(depth)

        self.cutmix = CutMix()
        self.conv1 = conv3x3(3, 64)
        self.bn1 = nn.BatchNorm2d(64)
        self.layer1 = self._make_layer(block, 64, num_blocks[0], stride=1)
        self.layer2 = self._make_layer(block, 128, num_blocks[1], stride=2)
        self.layer3 = self._make_layer(block, 256, num_blocks[2], stride=2)
        self.layer4 = self._make_layer(block, 512, num_blocks[3], stride=2)
        self.linear = nn.Linear(512 * block.expansion, num_classes)
    def __init__(self, depth, num_classes, dropout_rate, is_immagenet):
        super(ResNet_att, self).__init__()
        self.in_planes = 64
        self.num_classes = num_classes
        self.drop_rate = dropout_rate
        self.is_imagenet = is_immagenet

        block, num_blocks = cfg(depth)

        self.conv1 = conv3x3(3, 64)
        self.bn1 = nn.BatchNorm2d(64)
        self.layer1 = self._make_layer(block, 64, num_blocks[0], stride=1)
        self.layer2 = self._make_layer(block, 128, num_blocks[1], stride=2)
        self.layer3 = self._make_layer(block, 256, num_blocks[2], stride=2)
        self.layer4 = self._make_layer(block, 512, num_blocks[3], stride=2)
        self.linear = nn.Linear(512 * block.expansion, num_classes)
        self.dropout = CAMDropout(self.linear.weight,
                                  self.linear.bias,
                                  self.drop_rate,
                                  device=torch.device('cuda'))
    def __init__(self,
                 depth,
                 widen_factor,
                 conv_bias,
                 dropout_rate,
                 num_classes,
                 is_imagenet=False):
        super(Wide_ResNet, self).__init__()
        self.in_planes = 16
        self.is_imagenet = is_imagenet

        assert ((depth - 4) % 6 == 0), 'Wide-resnet depth should be 6n+4'
        n = (depth - 4) / 6
        k = widen_factor

        print('| Wide-Resnet %dx%d' % (depth, k))
        nStages = [16, 16 * k, 32 * k, 64 * k]

        self.conv1 = conv3x3(3, nStages[0], stride=1, bias=conv_bias)
        self.layer1 = self._wide_layer(wide_basic,
                                       nStages[1],
                                       n,
                                       dropout_rate,
                                       stride=1,
                                       conv_bias=conv_bias)
        self.layer2 = self._wide_layer(wide_basic,
                                       nStages[2],
                                       n,
                                       dropout_rate,
                                       stride=2,
                                       conv_bias=conv_bias)
        self.layer3 = self._wide_layer(wide_basic,
                                       nStages[3],
                                       n,
                                       dropout_rate,
                                       stride=2,
                                       conv_bias=conv_bias)
        self.bn1 = nn.BatchNorm2d(nStages[3])  # 20200114 changed here
        self.linear = nn.Linear(nStages[3], num_classes)