def __init__(self, block, depth, num_classes, Ddim): """ Constructor Args: depth: number of layers. num_classes: number of classes base_width: base width """ super(CifarResNet, self).__init__() #Model type specifies number of layers for CIFAR-10 and CIFAR-100 model assert (depth - 2) % 6 == 0, 'depth should be one of 20, 32, 44, 56, 110' layer_blocks = (depth - 2) // 6 print('CifarResNet : Depth : {} , Layers for each block : {}'.format( depth, layer_blocks)) self.num_classes = num_classes self.Ddim = Ddim self.conv_1_3x3 = nn.Conv2d(3, 16, kernel_size=3, stride=1, padding=1, bias=False) self.bn_1 = nn.BatchNorm2d(16) self.inplanes = 16 self.stage_1 = self._make_layer(block, 16, layer_blocks, 1) self.stage_2 = self._make_layer(block, 32, layer_blocks, 2) self.stage_3 = self._make_layer(block, 64, layer_blocks, 2) self.avgpool = nn.AvgPool2d(8) self.classifier = ops.LinearCapsPro(64 * block.expansion, num_classes, Ddim) # self.classifier = nn.Linear(64*block.expansion, num_classes) for m in self.modules(): if isinstance(m, nn.Conv2d): n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels m.weight.data.normal_(0, math.sqrt(2. / n)) #m.bias.data.zero_() elif isinstance(m, nn.BatchNorm2d): m.weight.data.fill_(1) m.bias.data.zero_() elif isinstance(m, nn.Linear): init.kaiming_normal(m.weight) m.bias.data.zero_()
def __init__(self, growthRate, depth, reduction, nClasses, bottleneck, Ddim): super(DenseNet, self).__init__() if bottleneck: nDenseBlocks = int((depth - 4) / 6) else: nDenseBlocks = int((depth - 4) / 3) nChannels = 2 * growthRate self.conv1 = nn.Conv2d(3, nChannels, kernel_size=3, padding=1, bias=False) self.dense1 = self._make_dense(nChannels, growthRate, nDenseBlocks, bottleneck) nChannels += nDenseBlocks * growthRate nOutChannels = int(math.floor(nChannels * reduction)) self.trans1 = Transition(nChannels, nOutChannels) nChannels = nOutChannels self.dense2 = self._make_dense(nChannels, growthRate, nDenseBlocks, bottleneck) nChannels += nDenseBlocks * growthRate nOutChannels = int(math.floor(nChannels * reduction)) self.trans2 = Transition(nChannels, nOutChannels) nChannels = nOutChannels self.dense3 = self._make_dense(nChannels, growthRate, nDenseBlocks, bottleneck) nChannels += nDenseBlocks * growthRate self.bn1 = nn.BatchNorm2d(nChannels) self.fc = ops.LinearCapsPro(nChannels, nClasses, Ddim) # self.fc = nn.Linear(nChannels, nClasses) for m in self.modules(): if isinstance(m, nn.Conv2d): n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels m.weight.data.normal_(0, math.sqrt(2. / n)) elif isinstance(m, nn.BatchNorm2d): m.weight.data.fill_(1) m.bias.data.zero_() elif isinstance(m, nn.Linear): m.bias.data.zero_()
def __init__(self, block, depth, cardinality, base_width, num_classes, Ddim): super(CifarResNeXt, self).__init__() #Model type specifies number of layers for CIFAR-10 and CIFAR-100 model assert (depth - 2) % 9 == 0, 'depth should be one of 29, 38, 47, 56, 101' layer_blocks = (depth - 2) // 9 self.cardinality = cardinality self.base_width = base_width self.num_classes = num_classes self.Ddim = Ddim self.conv_1_3x3 = nn.Conv2d(3, 64, 3, 1, 1, bias=False) self.bn_1 = nn.BatchNorm2d(64) self.inplanes = 64 self.stage_1 = self._make_layer(block, 64, layer_blocks, 1) self.stage_2 = self._make_layer(block, 128, layer_blocks, 2) self.stage_3 = self._make_layer(block, 256, layer_blocks, 2) self.avgpool = nn.AvgPool2d(8) # self.classifier = nn.Linear(256*block.expansion, num_classes) self.classifier = ops.LinearCapsPro(256 * block.expansion, num_classes, Ddim) for m in self.modules(): if isinstance(m, nn.Conv2d): n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels m.weight.data.normal_(0, math.sqrt(2. / n)) elif isinstance(m, nn.BatchNorm2d): m.weight.data.fill_(1) m.bias.data.zero_() elif isinstance(m, nn.Linear): init.kaiming_normal(m.weight) m.bias.data.zero_()