示例#1
0
    def __init__(self, params):
        self.params = params
        # specify the gpu id if using only 1 gpu
        if params.ngpu == 1:
            os.environ['CUDA_VISIBLE_DEVICES'] = str(params.gpu_id)
        try:
            os.makedirs(params.outf)
        except OSError:
            pass
        if params.manualSeed is None:
            params.manualSeed = random.randint(1, 10000)
        print("Random Seed: ", params.manualSeed)
        random.seed(params.manualSeed)
        torch.manual_seed(params.manualSeed)
        if params.cuda:
            torch.cuda.manual_seed_all(params.manualSeed)

        cudnn.benchmark = True

        if torch.cuda.is_available() and not params.cuda:
            print(
                "WARNING: You have a CUDA device, so you should probably run with --cuda"
            )

        # datase t
        if params.dataset == 'imagenet':
            # folder dataset
            self.dataset = ImageFolder(
                root=params.dataroot,
                transform=transforms.Compose([
                    transforms.Scale(params.imageSize),
                    transforms.CenterCrop(params.imageSize),
                    transforms.ToTensor(),
                    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)),
                ]),
                classes_idx=(10, 20))
        elif params.dataset == 'cifar10':
            self.dataset = dset.CIFAR10(root=params.dataroot,
                                        download=True,
                                        transform=transforms.Compose([
                                            transforms.Scale(params.imageSize),
                                            transforms.ToTensor(),
                                            transforms.Normalize(
                                                (0.5, 0.5, 0.5),
                                                (0.5, 0.5, 0.5)),
                                        ]))
        else:
            raise NotImplementedError("No such dataset {}".format(
                params.dataset))

        assert self.dataset
        self.dataloader = torch.utils.data.DataLoader(
            self.dataset,
            batch_size=params.batchSize,
            shuffle=True,
            num_workers=int(params.workers))

        # some hyper parameters
        self.ngpu = int(params.ngpu)
        self.nz = int(params.nz)
        self.ngf = int(params.ngf)
        self.ndf = int(params.ndf)
        self.num_classes = int(params.num_classes)
        self.nc = 3

        # Define the generator and initialize the weights
        if params.dataset == 'imagenet':
            self.netG = _netG(self.ngpu, self.nz)
        else:
            self.netG = _netG_CIFAR10(self.ngpu, self.nz)
        self.netG.apply(weights_init)
        if params.netG != '':
            self.netG.load_state_dict(torch.load(params.netG))
        print(self.netG)
        # Define the discriminator and initialize the weights
        if params.dataset == 'imagenet':
            self.netD = _netD(self.ngpu, self.num_classes)
        else:
            self.netD = _netD_CIFAR10(self.ngpu, self.num_classes)
        self.netD.apply(weights_init)
        if params.netD != '':
            self.netD.load_state_dict(torch.load(params.netD))
        print(self.netD)
        # loss functions
        self.dis_criterion = nn.BCELoss()
        self.aux_criterion = nn.NLLLoss()

        # tensor placeholders
        self.input = torch.FloatTensor(params.batchSize, 3, params.imageSize,
                                       params.imageSize)
        self.noise = torch.FloatTensor(params.batchSize, self.nz, 1, 1)
        self.eval_noise = torch.FloatTensor(params.batchSize, self.nz, 1,
                                            1).normal_(0, 1)
        self.dis_label = torch.FloatTensor(params.batchSize)
        self.aux_label = torch.LongTensor(params.batchSize)
        self.real_label = 1
        self.fake_label = 0

        # if using cuda
        if params.cuda:
            self.netD.cuda()
            self.netG.cuda()
            self.dis_criterion.cuda()
            self.aux_criterion.cuda()
            self.input, self.dis_label, self.aux_label = self.input.cuda(
            ), self.dis_label.cuda(), self.aux_label.cuda()
            self.noise, self.eval_noise = self.noise.cuda(
            ), self.eval_noise.cuda()

        # define variables
        self.input = Variable(self.input)
        self.noise = Variable(self.noise)
        self.eval_noise = Variable(self.eval_noise)
        self.dis_label = Variable(self.dis_label)
        self.aux_label = Variable(self.aux_label)
        # noise for evaluation
        self.eval_noise_ = np.random.normal(0, 1, (params.batchSize, self.nz))
        self.eval_label = np.random.randint(0, self.num_classes,
                                            params.batchSize)
        self.eval_onehot = np.zeros((params.batchSize, self.num_classes))
        self.eval_onehot[np.arange(params.batchSize), self.eval_label] = 1
        self.eval_noise_[np.arange(params.batchSize), :self.
                         num_classes] = self.eval_onehot[np.arange(
                             params.batchSize)]
        self.eval_noise_ = (torch.from_numpy(self.eval_noise_))
        self.eval_noise.data.copy_(
            self.eval_noise_.view(params.batchSize, self.nz, 1, 1))
        # setup optimizer
        self.optimizerD = optim.Adam(self.netD.parameters(),
                                     lr=params.lr,
                                     betas=(params.beta1, 0.999))
        self.optimizerG = optim.Adam(self.netG.parameters(),
                                     lr=params.lr,
                                     betas=(params.beta1, 0.999))
示例#2
0
# Define the generator and initialize the weights
if opt.dataset == 'cifar10':
    netG = _netG_CIFAR10(ngpu, nz)
else:
    netG = _netG(ngpu, nz)
netG.apply(weights_init)
if opt.netG != '':
    netG.load_state_dict(torch.load(opt.netG))
print(netG)

# Define the discriminator and initialize the weights
if opt.dataset == 'cifar10':
    netD = _netD_CIFAR10(ngpu, num_classes)
else:
    netD = _netD(ngpu, num_classes)
netD.apply(weights_init)
if opt.netD != '':
    netD.load_state_dict(torch.load(opt.netD))
print(netD)

# loss functions
dis_criterion = nn.BCELoss()
aux_criterion = nn.NLLLoss()

# tensor placeholders
input = torch.FloatTensor(opt.batchSize, 3, opt.imageSize, opt.imageSize)
noise = torch.FloatTensor(opt.batchSize, nz, 1, 1)
eval_noise = torch.FloatTensor(opt.batchSize, nz, 1, 1).normal_(0, 1)
dis_label = torch.FloatTensor(opt.batchSize)
aux_label = torch.LongTensor(opt.batchSize)
示例#3
0
    netG = _netG_CIFAR10(ngpu,
                         nz,
                         ny,
                         num_classes,
                         one_hot=opt.use_onehot_embed,
                         ignore_y=opt.ignore_y)
else:
    raise NotImplementedError
netG.apply(weights_init)
if opt.netG != '':
    netG.load_state_dict(torch.load(opt.netG))
print(netG)

# Define the discriminator and initialize the weights
if opt.dataset == 'imagenet':
    netD = _netD(ngpu, num_classes, tac=opt.loss_type == 'tac')
elif opt.dataset == 'mnist' or opt.dataset == 'cifar10' or opt.dataset == 'cifar100':
    if opt.loss_type == 'cgan':
        netD = SNResNetProjectionDiscriminator32(
            opt.ndf,
            opt.num_classes,
            use_cy=False,
            dis_fc_dim=opt.dis_fc_dim,
            dis_fc_activation=opt.dis_fc_activation,
            linear_no_sn=opt.linear_no_sn)
    elif opt.loss_type == 'cgan+ac':
        netD = SNResNetProjectionDiscriminator32(
            opt.ndf,
            opt.num_classes,
            use_cy=False,
            use_ac=True,