Пример #1
0
def main(args):
    normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406],
                                     std=[0.229, 0.224, 0.225])
    img_transforms = transforms.Compose([
        transforms.Resize(256),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
        normalize,
    ])
    os.environ['TORCH_HOME'] = 'models'
    # vgg16 = torch.utils.model_zoo.load_url('vgg16.pth', model_dir="./models")
    vgg16 = getattr(models, args.arch)(pretrained=True)
    print(vgg16)
    # for name, module in vgg16._modules.iteritems():
    #     print(name, module)
    # resnet101 = models.resnet101(pretrained=True)
    # print(resnet101)

    model = FeatureExtractor(vgg16, ["avgpool"])
    model.eval()
    if args.gpu is not None:
        model = model.cuda()

    # cats = ["厨具", "个人护理", "家居日用", "食品饮料", "手机通讯"]
    cats = [
        "chuju", "gerenhuli", "jiajuriyong", "shipinyinliao", "shoujitongxun"
    ]
    cat_set = list(set(cats))
    cat_set.sort()
    cat2id = dict(map(lambda i_cat: (i_cat[1], i_cat[0]), enumerate(cat_set)))

    jddataset = JDDataSet("", args.data, img_transforms, cats=cats)
    print(jddataset.__len__())
    dataloader = torch.utils.data.DataLoader(jddataset,
                                             batch_size=args.batch_size,
                                             shuffle=False,
                                             num_workers=args.workers)
    with torch.no_grad():
        with io.open('res.txt', 'w+', encoding='utf-8') as fout:
            cnt = 0
            for batch_img, batch_cats in dataloader:
                if args.gpu is not None:
                    batch_img = batch_img.cuda()
                output = model(batch_img)
                output = output[0].reshape(args.batch_size, -1).cpu().numpy()

                for i in range(len(batch_cats)):
                    embed = map(
                        lambda i_d: str(i_d[0] + 1) + ':' + '{:.3f}'.format(
                            i_d[1]),
                        list(
                            filter(lambda i_d: i_d[1] != 0,
                                   enumerate(output[i]))))
                    fout.write(
                        str(cat2id.get(batch_cats[i])) + " " +
                        ' '.join(embed) + '\n')
                fout.flush()

                cnt += 1
                print(cnt)
                break
Пример #2
0
        g_optimizer.load_state_dict(checkpoint['G_opt'])
        print("Success! Training from epoch {}."
                .format(checkpoint['epoch']))
    else:
        print("=> no checkpoint found at '{}'".format(args.resume))

if torch.cuda.device_count() > 1:
    print "Using %d gpus." % torch.cuda.device_count()
    generator = nn.DataParallel(generator)
    discriminator = nn.DataParallel(discriminator)
    extractor = nn.DataParallel(extractor)

if torch.cuda.is_available():
    generator.cuda()
    discriminator.cuda()
    extractor.cuda()

if args.verbosity >= 1: print 'Done!'

if args.dual_discrim:
    class_loss_fn = nn.MultiLabelSoftMarginLoss()
loss_fn = nn.BCELoss()

D_total_fake_loss = 0
D_total_fake_binary_loss = 0
D_total_fake_class_loss = 0

D_total_real_loss = 0
D_total_real_binary_loss = 0
D_total_real_class_loss = 0