def __init__(self, class_num=62): super(res18, self).__init__() model_ft = ResNet(BasicBlock, [2, 2, 2, 2]) self.base_model = nn.Sequential(*list(model_ft.children())[:-3]) # attention schema self.avgpool = nn.AdaptiveAvgPool2d(1) self.maxpool = nn.AdaptiveMaxPool2d(1) self.sign = nn.Sigmoid() in_plances = 256 ratio = 8 self.a_fc1 = nn.Conv2d(in_plances,in_plances//ratio,1,bias=False) self.a_relu = nn.ReLU() self.a_fc2 = nn.Conv2d(in_plances//ratio, in_plances, 1, bias=False) self.avg_pool = nn.AdaptiveAvgPool2d(1) self.max_pool = nn.AdaptiveMaxPool2d(1) self.reduce_layer = nn.Conv2d(512, 256, 1) # self.classifier = ClassBlock(512, 1024) self.fc1 = nn.Sequential(nn.Dropout(0.5), nn.Linear(256, class_num)) self.fc2 = nn.Sequential(nn.Dropout(0.5), nn.Linear(256, class_num)) self.fc3 = nn.Sequential(nn.Dropout(0.5), nn.Linear(256, class_num)) self.fc4 = nn.Sequential(nn.Dropout(0.5), nn.Linear(256, class_num))
return out def se_resnet50(num_classes=1_000, pretrained=True): """Constructs a ResNet-50 model. Args: pretrained (bool): If True, returns a model pre-trained on ImageNet """ model = ResNet(SEBottleneck, [3, 4, 6, 3], num_classes=num_classes) model.avgpool = nn.AdaptiveAvgPool2d(1) if pretrained: model.load_state_dict( load_state_dict_from_url( "https://github.com/moskomule/senet.pytorch/releases/download/archive/seresnet50-60a8950a85b2b.pkl" )) for child in model.children(): for param in child.parameters(): param.requires_grad = False return model class vae_fc(nn.Module): def __init__(self): super(vae_fc, self).__init__() self.fc1 = nn.Linear(1000, 512) self.fc21 = nn.Linear(512, 256) self.fc22 = nn.Linear(512, 256) def encode(self, x): h1 = F.relu(self.fc1(x))