def __init__(self, num_features): super(GRL, self).__init__() self.model_fc = model.Resnet50Fc() # for param in self.model_fc.parameters(): # param.requires_grad=False self.bottleneck_layer1 = nn.Linear(num_features, 256) self.bottleneck_layer1.weight.data.normal_(0, 0.005) self.bottleneck_layer1.bias.data.fill_(0.1) self.bottleneck_layer = nn.Sequential(self.bottleneck_layer1, nn.ReLU(), nn.Dropout(0.5)) self.classifier_layer = nn.Linear(256, len(dset_classes)) self.classifier_layer.weight.data.normal_(0, 0.01) self.classifier_layer.bias.data.fill_(0.0) self.predict_layer = nn.Sequential(self.model_fc, self.bottleneck_layer, self.classifier_layer) self.ad_layer1 = nn.Linear(256 * len(dset_classes), 1024) self.ad_layer2 = nn.Linear(1024, 1024) self.ad_layer3 = nn.Linear(1024, 1) self.ad_layer1.weight.data.normal_(0, 0.01) self.ad_layer2.weight.data.normal_(0, 0.01) self.ad_layer3.weight.data.normal_(0, 0.3) self.ad_layer1.bias.data.fill_(0.0) self.ad_layer2.bias.data.fill_(0.0) self.ad_layer3.bias.data.fill_(0.0) self.ad_net = nn.Sequential(self.ad_layer1, nn.ReLU(), nn.Dropout(0.5), self.ad_layer2, nn.ReLU(), nn.Dropout(0.5), self.ad_layer3, nn.Sigmoid()) self.grl = ad.AdversarialLayer(high=1.0)
line_list = line.strip().split(' ') fine_coarse_map.append([int(line_list[i]) for i in range(7)]) line = file_map.readline() # network construction feature_len = 2048 # fine-grained feature extractor + fine-grained label predictor my_fine_net = fine_net(feature_len) my_fine_net = my_fine_net.to(device) my_fine_net.train(True) # domain discriminator my_discriminator = discriminator(256) my_discriminator = my_discriminator.to(device) my_discriminator.train(True) # gradient reversal layer my_grl = ad.AdversarialLayer(max_iter=args.max_iteration) # coarse-grained feature extractor + coarse-grained label predictor my_coarse_extractor = coarse_extractor() my_coarse_extractor = my_coarse_extractor.to(device) my_coarse_extractor.train(True) my_coarse_predictor = [] for i in range(num_coarse_cate_sel): my_coarse_predictor.append(predictor(256, cate_all[i + 1])) my_coarse_predictor[i].to(device) my_coarse_predictor[i].train(True) # criterion and optimizer criterion = { "classifier": nn.CrossEntropyLoss(), "kl_loss": nn.KLDivLoss(size_average=False), "adversarial": nn.BCELoss()