def main(args):
    import sys
    sys.path.append('/home/kp600168/semi')
    from allinone import SEMI_DATASET_REGISTRY, SEMI_TRAINER_REGISTRY, SCHEDULER_REGISTRY
    print(args)
    cifar = SEMI_DATASET_REGISTRY('mix')(CIFAR10,
                                         args.dataset,
                                         10, [
                                             tf.RandomResizedCrop((32, 32)),
                                             tf.ToTensor(),
                                             tf.Normalize(
                                                 (0.4914, 0.4822, 0.4465),
                                                 (0.2023, 0.1994, 0.2010))
                                         ],
                                         semi_size=args.semi_size)
    train_loader, test_loader, num_classes = cifar(
        args.batch_size, num_workers=args.num_workers, return_num_classes=True)
    model_dict = {
        'generator_x': MODEL_REGISTRY('Generator_x')(),
        'generator_z': MODEL_REGISTRY('Generator_z')(),
        'discriminator_x': MODEL_REGISTRY('Discriminator_x')(),
        'discriminator_z': MODEL_REGISTRY('Discriminator_z')(),
        'discriminator_x_z': MODEL_REGISTRY('Discriminator_x_z')(num_classes),
    }
    kwargs = {
        'model_dict':
        model_dict,
        'optimizer':
        Adam(lr=args.lr_100 * args.batch_size / 100, betas=(0.5, 1 - 1e-3)),
        'loss_f':
        F.cross_entropy,
        'consistency_weight':
        SCHEDULER_REGISTRY('identity')(1.),
    }
    trainer = SEMI_TRAINER_REGISTRY('AdversariallyLearnedInference')(
        **kwargs, reporters=[TQDMReporter(),
                             TensorboardReporter('.')])

    for _ in trainer.epoch_range(args.epochs):
        trainer.train(train_loader)
        trainer.test(test_loader)

    # trainer = SupervisedTrainer(lenet, SGD(lr=args.lr_256 * args.batch_size /
    #                                        256, momentum=0.9), F.cross_entropy, reporters=[TQDMReporter()])
    # for _ in trainer.epoch_range(args.epochs):
    #     trainer.train(train_loader)
    #     trainer.test(test_loader)

    print(f"Max Accuracy={max(trainer.history['accuracy/test'])}")
Esempio n. 2
0
def main(args):
    import sys
    sys.path.append('/home/kp600168/semi')
    from allinone import SEMI_DATASET_REGISTRY, SEMI_TRAINER_REGISTRY, SCHEDULER_REGISTRY
    print(args)
    mnist = SEMI_DATASET_REGISTRY('mix')(MNIST,
                                         args.dataset,
                                         10, [
                                             tf.Resize((32, 32)),
                                             tf.ToTensor(),
                                             tf.Normalize((0.1307, ),
                                                          (0.3081, ))
                                         ],
                                         semi_size=args.semi_size)
    train_loader, test_loader, num_classes = mnist(
        args.batch_size, num_workers=args.num_workers, return_num_classes=True)
    lenet = MODEL_REGISTRY(args.model)(num_classes=num_classes)
    kwargs = {
        'model':
        MODEL_REGISTRY(args.model)(num_classes=num_classes),
        'optimizer':
        SGD(lr=args.lr_256 * args.batch_size / 256, momentum=0.9),
        'loss_f':
        F.cross_entropy,
        'consistency_weight':
        SCHEDULER_REGISTRY('identity')(1e-5),
        'alpha':
        SCHEDULER_REGISTRY('lambda')(lambda epoch: min(1 - 1 /
                                                       (1 + epoch), 0.99)),
        'beta':
        0.02
    }
    trainer = SEMI_TRAINER_REGISTRY('InterpolationConsistency')(
        **kwargs, reporters=[TQDMReporter()])

    for _ in trainer.epoch_range(args.epochs):
        trainer.train(train_loader)
        trainer.test(test_loader)

    # trainer = SupervisedTrainer(lenet, SGD(lr=args.lr_256 * args.batch_size /
    #                                        256, momentum=0.9), F.cross_entropy, reporters=[TQDMReporter()])
    # for _ in trainer.epoch_range(args.epochs):
    #     trainer.train(train_loader)
    #     trainer.test(test_loader)

    print(f"Max Accuracy={max(trainer.history['accuracy/test'])}")
Esempio n. 3
0
def main(cfg):
    if cfg.use_accimage:
        enable_accimage()
    model = MODEL_REGISTRY(cfg.model.name)(num_classes=10)
    train_loader, test_loader = DATASET_REGISTRY("fast_cifar10" if cfg.use_fast_collate else "cifar10"
                                                 )(cfg.data.batch_size, num_workers=4,
                                                   use_prefetcher=cfg.use_prefetcher)
    optimizer = None if cfg.bn_no_wd else optim.SGD(lr=1e-1, momentum=0.9, weight_decay=cfg.optim.weight_decay)
    scheduler = lr_scheduler.MultiStepLR([100, 150], gamma=cfg.optim.lr_decay)

    if cfg.bn_no_wd:
        def set_optimizer(trainer):
            bn_params = []
            non_bn_parameters = []
            for name, p in trainer.model.named_parameters():
                if "bn" in name:
                    bn_params.append(p)
                else:
                    non_bn_parameters.append(p)
            optim_params = [
                {"params": bn_params, "weight_decay": 0},
                {"params": non_bn_parameters, "weight_decay": cfg.optim.weight_decay},
            ]
            trainer.optimizer = torch.optim.SGD(optim_params, lr=1e-1, momentum=0.9)

        trainers.SupervisedTrainer.set_optimizer = set_optimizer

    if cfg.use_zerograd_none:
        import types

        def set_optimizer(trainer):
            # see Apex for details
            def zero_grad(self):
                for group in self.param_groups:
                    for p in group['params']:
                        p.grad = None

            trainer.optimizer = trainer.optimizer(trainer.model.parameters())
            trainer.optimizer.zero_grad = types.MethodType(zero_grad, trainer.optimizer)

        trainers.SupervisedTrainer.set_optimizer = set_optimizer

    with trainers.SupervisedTrainer(model,
                                    optimizer,
                                    F.cross_entropy,
                                    reporters=[reporters.TensorboardReporter('.')],
                                    scheduler=scheduler,
                                    use_amp=cfg.use_amp,
                                    debug=cfg.debug
                                    ) as trainer:

        for _ in trainer.epoch_range(cfg.optim.epochs):
            trainer.train(train_loader)
            trainer.test(test_loader)

        print(f"Max Test Accuracy={max(trainer.reporter.history('accuracy/test')):.3f}")
Esempio n. 4
0
def main(cfg):
    if cfg.use_accimage:
        enable_accimage()
    model = MODEL_REGISTRY(cfg.name)(num_classes=10)
    train_loader, test_loader = DATASET_REGISTRY(
        "fast_cifar10" if cfg.use_fast_collate else "cifar10")(
            cfg.batch_size, num_workers=4, use_prefetcher=cfg.use_prefetcher)
    optimizer = None if cfg.bn_no_wd else optim.SGD(
        lr=cfg.lr, momentum=0.9, weight_decay=cfg.weight_decay)
    scheduler = lr_scheduler.CosineAnnealingWithWarmup(cfg.epochs, 4, 5)

    if cfg.bn_no_wd:

        def set_optimizer(trainer):
            bn_params = []
            non_bn_parameters = []
            for name, p in trainer.model.named_parameters():
                if "bn" in name:
                    bn_params.append(p)
                else:
                    non_bn_parameters.append(p)
            optim_params = [
                {
                    "params": bn_params,
                    "weight_decay": 0
                },
                {
                    "params": non_bn_parameters,
                    "weight_decay": cfg.weight_decay
                },
            ]
            trainer.optimizer = torch.optim.SGD(optim_params,
                                                lr=1e-1,
                                                momentum=0.9)

        trainers.SupervisedTrainer.set_optimizer = set_optimizer

    with trainers.SupervisedTrainer(
            model,
            optimizer,
            F.cross_entropy,
            reporters=[reporters.TensorboardReporter('.')],
            scheduler=scheduler,
            use_amp=cfg.use_amp,
            debug=cfg.debug) as trainer:

        for _ in trainer.epoch_range(cfg.epochs):
            trainer.train(train_loader)
            trainer.test(test_loader)
            trainer.scheduler.step()

        print(
            f"Max Test Accuracy={max(trainer.reporter.history('accuracy/test')):.3f}"
        )
Esempio n. 5
0
def main(cfg):
    train_loader, test_loader, num_classes = DATASET_REGISTRY(cfg.data.name)(cfg.data.batch_size,
                                                                             return_num_classes=True,
                                                                             num_workers=4)
    model = MODEL_REGISTRY(cfg.model.name)(num_classes=num_classes)
    optimizer = optim.SGD(lr=1e-1, momentum=0.9, weight_decay=cfg.optim.weight_decay)
    scheduler = lr_scheduler.CosineAnnealingWithWarmup(200, 4, 5)

    with Trainer(model, optimizer, naive_cross_entropy_loss, scheduler=scheduler, cfg=cfg.model,
                 num_classes=num_classes) as trainer:
        for _ in trainer.epoch_range(200):
            trainer.train(train_loader)
            trainer.test(test_loader)
        print(f"Max Test Accuracy={max(trainer.reporter.history('accuracy/test')):.4f}")
Esempio n. 6
0
class Config:
    name: str = chika.choices(*MODEL_REGISTRY.choices())
    batch_size: int = 128

    epochs: int = 200
    lr: float = 0.1
    weight_decay: float = 1e-4
    lr_decay: float = 0.1

    bn_no_wd: bool = False
    use_amp: bool = False
    use_accimage: bool = False
    use_prefetcher: bool = False
    debug: bool = False
Esempio n. 7
0
def main(args):
    import sys
    sys.path.append('/home/kp600168/semi')
    from allinone import SEMI_DATASET_REGISTRY, SEMI_TRAINER_REGISTRY
    print(args)
    mnist = SEMI_DATASET_REGISTRY('split')(MNIST,
                                           args.dataset,
                                           10, [
                                               tf.Resize((32, 32)),
                                               tf.ToTensor(),
                                               tf.Normalize((0.1307, ),
                                                            (0.3081, ))
                                           ],
                                           semi_size=args.semi_size)
    train_loader, test_loader, _, num_classes = mnist(args.batch_size,
                                                      num_workers=0,
                                                      return_num_classes=True)
    lenet = MODEL_REGISTRY(args.model)(num_classes=num_classes)
    kwargs = {
        'bn_list': [lenet.bn1, lenet.bn2, lenet.bn3],
        'sigma_list': [0.3, 0.3, 0.3],
        'v_list':
        [ConvTranspose2d(16, 6, 10, 2),
         ConvTranspose2d(120, 16, 10)],
        'lam_list': [0.1, 0.01, 0.01],
    }
    trainer = SEMI_TRAINER_REGISTRY('Ladder')(lenet,
                                              SGD(lr=args.lr_256 *
                                                  args.batch_size / 256,
                                                  momentum=0.9),
                                              F.cross_entropy,
                                              **kwargs,
                                              reporters=[TQDMReporter()])

    # for _ in trainer.epoch_range(args.epochs):
    #     trainer.train(train_loader)
    #     trainer.test(test_loader)

    trainer = SupervisedTrainer(lenet,
                                SGD(lr=args.lr_256 * args.batch_size / 256,
                                    momentum=0.9),
                                F.cross_entropy,
                                reporters=[TQDMReporter()])
    for _ in trainer.epoch_range(args.epochs):
        trainer.train(train_loader)
        trainer.test(test_loader)

    print(f"Max Accuracy={max(trainer.history['accuracy/test'])}")
Esempio n. 8
0
class Config:
    model: str = chika.choices(*MODEL_REGISTRY.choices())
    batch_size: int = 128

    epochs: int = 200
    lr: float = 0.1
    weight_decay: float = 1e-4

    data: str = chika.choices("cifar10", "cifar100", "svhn")

    bn_no_wd: bool = False
    use_amp: bool = False
    use_accimage: bool = False
    use_multi_tensor: bool = False
    use_channel_last: bool = False
    prefetch_factor: int = 2
    persistent_workers: bool = False
    debug: bool = False
    download: bool = False
def main(args):
    import sys
    sys.path.append('/home/kp600168/semi')
    from allinone import SEMI_DATASET_REGISTRY, SEMI_TRAINER_REGISTRY, SCHEDULER_REGISTRY, TRANSFORM_REGISTRY
    print(args)
    unlabel_transform = TRANSFORM_REGISTRY('ManyTimes')(tf.Compose([
        tf.RandomResizedCrop(((32, 32)), (0.9, 1.0), (0.9, 1.1)),
        tf.ToTensor(),
        tf.Normalize((0.1307, ), (0.3081, ))
    ]), 4)
    mnist = SEMI_DATASET_REGISTRY('split')(MNIST,
                                           args.dataset,
                                           10, [],
                                           [unlabel_transform.transform], [
                                               tf.Resize((32, 32)),
                                               tf.ToTensor(),
                                               tf.Normalize((0.1307, ),
                                                            (0.3081, ))
                                           ],
                                           semi_size=args.semi_size,
                                           unlabel_transform=unlabel_transform)

    train_loader, test_loader, unlabel_loader, num_classes = mnist(
        args.batch_size, num_workers=0, return_num_classes=True)
    kwargs = {
        'model': MODEL_REGISTRY(args.model)(num_classes=num_classes),
        'optimizer': SGD(lr=args.lr_256 * args.batch_size / 256, momentum=0.9),
        'loss_f': F.cross_entropy,
        'temperature': 0.5,
        'beta': 0.2,
        'consistency_weight': SCHEDULER_REGISTRY('identity')(1.),
        'dataset_type': 'split',
    }
    trainer = SEMI_TRAINER_REGISTRY('MixMatch')(**kwargs,
                                                reporters=[TQDMReporter()])

    for _ in trainer.epoch_range(args.epochs):
        trainer.train(zip(train_loader, unlabel_loader))
        trainer.test(test_loader)
    print(f"Max Accuracy={max(trainer.history['accuracy/test'])}")
Esempio n. 10
0
def _main(cfg):
    model = MODEL_REGISTRY(cfg.model)(num_classes=10)
    train_loader, test_loader = DATASET_REGISTRY("cifar10")(cfg.batch_size, num_workers=4, download=True)
    optimizer = homura.optim.SGD(lr=cfg.optim.lr, momentum=0.9, weight_decay=cfg.optim.weight_decay)
    scheduler = {
        "cosine": lr_scheduler.CosineAnnealingWithWarmup(cfg.optim.epochs, 4, 5),
        "abel": ABEL(cfg.optim.gamma),
        "steps": lr_scheduler.MultiStepLR(milestones=cfg.optim.steps, gamma=cfg.optim.gamma),
    }[cfg.optim.name]

    with Trainer(
        model,
        optimizer,
        F.cross_entropy,
        reporters=[reporters.TensorboardReporter(".")],
        scheduler=scheduler,
        use_amp=cfg.use_amp,
    ) as trainer:
        for _ in trainer.epoch_range(cfg.optim.epochs):
            trainer.train(train_loader)
            trainer.test(test_loader)
            trainer.scheduler.step()

        print(f"Max Test Accuracy={max(trainer.reporter.history('accuracy/test')):.3f}")
def main(args):
    import sys
    sys.path.append('/home/kp600168/semi')
    from allinone import SEMI_DATASET_REGISTRY, SEMI_TRAINER_REGISTRY, TRANSFORM_REGISTRY, SCHEDULER_REGISTRY
    print(args)
    unlabel_transform = TRANSFORM_REGISTRY('twice')(tf.Compose([
        tf.RandomResizedCrop(((32, 32)), (0.9, 1.0), (0.9, 1.1)),
        tf.ToTensor(),
        tf.Normalize((0.1307, ), (0.3081, ))
    ]))
    mnist = SEMI_DATASET_REGISTRY('mix')(MNIST,
                                         args.dataset,
                                         10, [], [unlabel_transform], [
                                             tf.Resize((32, 32)),
                                             tf.ToTensor(),
                                             tf.Normalize((0.1307, ),
                                                          (0.3081, ))
                                         ],
                                         semi_size=args.semi_size)
    train_loader, test_loader, num_classes = mnist(args.batch_size,
                                                   num_workers=4,
                                                   return_num_classes=True)
    kwargs = {
        'model':
        MODEL_REGISTRY(args.model)(num_classes=num_classes),
        'optimizer':
        SGD(lr=args.lr_256 * args.batch_size / 256, momentum=0.9),
        'loss_f':
        F.cross_entropy,
        'consistency_weight':
        SCHEDULER_REGISTRY('identity')(0.01),
        'alpha':
        SCHEDULER_REGISTRY('lambda')(lambda epoch: min(1 - 1 /
                                                       (1 + epoch), 0.99)),
        'dataset_type':
        'mix',
    }
    trainer = SEMI_TRAINER_REGISTRY('meanteacher')(**kwargs,
                                                   reporters=[TQDMReporter()])
    for _ in trainer.epoch_range(args.epochs):
        trainer.train(train_loader)
        trainer.test(test_loader)

    # mnist = SEMI_DATASET_REGISTRY('split')(MNIST, args.dataset, 10, [], [unlabel_transform.transform], [tf.Resize(
    #     (32, 32)), tf.ToTensor(), tf.Normalize((0.1307,), (0.3081,))], semi_size=args.semi_size, unlabel_transform=unlabel_transform)
    # train_loader, test_loader, unlabel_loader, num_classes = mnist(
    #     args.batch_size, num_workers=0, return_num_classes=True)
    # kwargs = {
    #     'model': MODEL_REGISTRY(args.model)(num_classes=num_classes),
    #     'optimizer': SGD(lr=args.lr_256 * args.batch_size / 256, momentum=0.9),
    #     'loss_f': F.cross_entropy,
    #     'consistency_weight': SCHEDULER_REGISTRY('identity')(0.01),
    #     'alpha': SCHEDULER_REGISTRY('lambda')(lambda epoch: min(1 - 1 / (1 + epoch), 0.99)),
    #     'dataset_type': 'split',
    # }
    # trainer = SEMI_TRAINER_REGISTRY('meanteacher')(
    #     **kwargs, reporters=[TQDMReporter()])
    # for _ in trainer.epoch_range(args.epochs):
    #     trainer.train(zip(train_loader, unlabel_loader))
    #     trainer.test(test_loader)

    print(f"Max Accuracy={max(trainer.history['accuracy/test'])}")
Esempio n. 12
0
def main(cfg):
    if cfg.use_accimage:
        enable_accimage()
    data = DATASET_REGISTRY(cfg.data).setup(
        cfg.batch_size,
        num_workers=4,
        download=cfg.download,
        prefetch_factor=cfg.prefetch_factor,
        persistent_workers=cfg.persistent_workers)
    model = MODEL_REGISTRY(cfg.model)(num_classes=data.num_classes)
    optimizer = None if cfg.bn_no_wd else optim.SGD(
        lr=cfg.lr,
        momentum=0.9,
        weight_decay=cfg.weight_decay,
        multi_tensor=cfg.use_multi_tensor)
    scheduler = lr_scheduler.CosineAnnealingWithWarmup(cfg.epochs, 4, 5)

    if cfg.bn_no_wd:

        def set_optimizer(trainer):
            bn_params = []
            non_bn_parameters = []
            for name, p in trainer.model.named_parameters():
                if "norm" in name:
                    bn_params.append(p)
                else:
                    non_bn_parameters.append(p)
            optim_params = [
                {
                    "params": bn_params,
                    "weight_decay": 0
                },
                {
                    "params": non_bn_parameters,
                    "weight_decay": cfg.weight_decay
                },
            ]
            trainer.optimizer = torch.optim.SGD(optim_params,
                                                lr=1e-1,
                                                momentum=0.9)

        trainers.SupervisedTrainer.set_optimizer = set_optimizer

    with trainers.SupervisedTrainer(
            model,
            optimizer,
            F.cross_entropy,
            reporters=[reporters.TensorboardReporter('.')],
            scheduler=scheduler,
            use_amp=cfg.use_amp,
            use_channel_last=cfg.use_channel_last,
            debug=cfg.debug) as trainer:

        for _ in trainer.epoch_range(cfg.epochs):
            trainer.train(data.train_loader)
            trainer.test(data.test_loader)
            trainer.scheduler.step()

        print(
            f"Max Test Accuracy={max(trainer.reporter.history('accuracy/test')):.3f}"
        )