示例#1
0
def main():
    if not torch.cuda.is_available():
        logging.info('no gpu device available')
        sys.exit(1)

    if args.gpu == -1:
        device = torch.device('cpu')
    else:
        device = torch.device('cuda:{}'.format(args.gpu))

    np.random.seed(args.seed)
    cudnn.benchmark = True
    torch.manual_seed(args.seed)
    cudnn.enabled = True
    torch.cuda.manual_seed(args.seed)

    logging.info('gpu device = %d' % args.gpu)
    logging.info("args = %s", args)

    genotype = eval("genotypes.%s" % args.arch)
    #model = Network(args.init_channels, dataset_classes, args.layers, args.auxiliary, genotype)
    model = Network(args)
    model = model.to(device)
    util.load(model, args.model_path)

    logging.info("param size = %fMB", util.count_parameters_in_MB(model))

    criterion = nn.CrossEntropyLoss()
    criterion = criterion.cuda()

    test_data = MyDataset(args=args, subset='test')

    test_queue = torch.utils.data.DataLoader(test_data,
                                             batch_size=args.batch_size,
                                             shuffle=False,
                                             pin_memory=True,
                                             num_workers=2)

    model.drop_path_prob = args.drop_path_prob
    test_acc, test_obj, test_fscores, test_MIoU = infer(
        test_queue, model, criterion)
    logging.info('test_acc %f _fscores %f _MIoU %f', test_acc, test_fscores,
                 test_MIoU)
示例#2
0
def main():
  '''
  if not torch.cuda.is_avaitargetsle():
    logging.info('no gpu device avaitargetsle')
    sys.exit(1)'''

  np.random.seed(args.seed)
  if args.gpu == -1:
    device = torch.device('cpu')
  else:
    device = torch.device('cuda:{}'.format(args.gpu))
  cudnn.benchmark = True
  # 为CPU设置种子用于生成随机数,以使得结果是确定的
  torch.manual_seed(args.seed)
  cudnn.enabled=True

  logging.info('gpu device = %d' % args.gpu)
  logging.info("args = %s", args)

  criterion = nn.CrossEntropyLoss()#损失函数,交叉熵
  criterion = criterion.to(device)
  model = Network(args.gpu,args.init_channels, dataset_classes, args.layers, criterion)
  model = model.to(device)
  logging.info("param size = %fMB", utils.count_parameters_in_MB(model))

  optimizer = torch.optim.SGD(
      model.parameters(),
      args.learning_rate,
      momentum=args.momentum,
      weight_decay=args.weight_decay)

  train_data = MyDataset(args=args, subset='train')
  valid_data = MyDataset(args=args, subset='valid')

  train_queue = torch.utils.data.DataLoader(
      train_data, batch_size=args.batch_size, shuffle=True, pin_memory=True, num_workers=2)

  valid_queue = torch.utils.data.DataLoader(
      valid_data, batch_size=args.batch_size, shuffle=False, pin_memory=True, num_workers=2)

  scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(
        optimizer, float(args.epochs), eta_min=args.learning_rate_min)

  architect = Architect(model, args)
  f_arch = open(os.path.join(args.save, 'arch.txt'),'a')
  for epoch in range(args.epochs):
    scheduler.step()
    lr = scheduler.get_lr()[0]
    logging.info('epoch %d lr %e', epoch, lr)

    #选出来α,把结构从连续的又变回离散的。
    genotype = model.genotype()
    logging.info('genotype = %s', genotype)

    print(F.softmax(model.alphas_normal, dim=-1))
    print(F.softmax(model.alphas_reduce, dim=-1))

    # training
    train_acc, train_obj, train_fscores, train_MIoU = train(train_queue, valid_queue, model, architect, criterion, optimizer, lr)
    logging.info('train_acc %f _fscores %f _MIoU %f', train_acc, train_fscores, train_MIoU)

    # validation
    valid_acc, valid_obj, valid_fscores, valid_MIoU = infer(valid_queue, model, criterion)
    logging.info('valid_acc %f _fcores %f _MIoU %f', valid_acc, valid_fscores, valid_MIoU)

    utils.save(model, os.path.join(args.save, 'weights.pt'))
    f_arch.write(str(F.softmax(model.arch_parameters()[0],-1)))
  f_arch.close()
示例#3
0
文件: train.py 项目: MartrixG/CODES
def main(arg):
    ##################################
    for key in arg:
        parse[key] = arg[key]
    global args
    args = SimpleNamespace(**parse)
    '''
    print('seed:{:}'.format(args.seed))
    print('dataset:{:}'.format(args.dataset))
    print('hidden_layers:{:}'.format(args.hidden_layers))
    print('first_neurons:{:}'.format(args.first_neurons))
    print('cross_link:{:}'.format(args.cross_link))
    print('fully_cross:{:}'.format(args.fully_cross))
    print()
    exit(0)
    '''
    ##################################
    seed = util.prepare(args)
    if not cuda.is_available():
        logging.info('no gpu device available')
        sys.exit(1)
    np.random.seed(seed)
    random.seed(seed)
    torch.manual_seed(seed)
    cuda.manual_seed(seed)
    cuda.set_device(args.gpu)
    cudnn.benchmark = False
    cudnn.deterministic = True
    logging.info('gpu device = %d' % args.gpu)
    logging.info("args = %s", args)
    logging.info('hidden_layers:{:}'.format(args.hidden_layers))
    logging.info('first_neurons:{:}'.format(args.first_neurons))
    logging.info('change:{:}'.format(args.change))
    logging.info('activate_func:{:}'.format(args.activate_func))
    logging.info('opt:{:}'.format(args.opt))
    logging.info('cross_link:{:}'.format(args.cross_link))
    logging.info('fully_cross:{:}'.format(args.fully_cross))

    model = Network(args)
    model = model.cuda()
    logging.info("param size = %fMB", util.count_parameters_in_MB(model))
    criterion = nn.CrossEntropyLoss()
    criterion = criterion.cuda()
    optimizer = torch.optim.SGD(model.parameters(),
                                args.learning_rate,
                                momentum=args.momentum,
                                weight_decay=args.weight_decay)
    # scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, args.epochs)
    scheduler = torch.optim.lr_scheduler.StepLR(optimizer,
                                                step_size=30,
                                                gamma=0.7)

    train_data, valid_data = dataset.get_dataset(args.data, args.dataset)
    train_queue, valid_queue = dataset.get_data_loader(train_data, valid_data,
                                                       2)

    early_stop = util.EarlyStop(patience=10,
                                delta=0.0001,
                                save_path=args.save + '/best.pt')
    for epoch in range(args.epochs):
        logging.info('epoch %d lr %.6f', epoch, scheduler.get_lr()[0])

        epoch_str = '[{:03d}/{:03d}]'.format(epoch, args.epochs)
        train_acc, train_obj = train(train_queue, model, criterion, optimizer,
                                     epoch_str)
        logging.info('train_acc %.2f', train_acc)

        valid_acc, valid_obj = infer(valid_queue, model, criterion, epoch_str)
        logging.info('valid_acc %.2f', valid_acc)

        if early_stop.check(train_obj, valid_acc, model):
            logging.info('Early stopping at {:}'.format(epoch))
            break

        scheduler.step()
示例#4
0
    device = torch.device('cpu')
  else:
    device = torch.device('cuda:{}'.format(args.gpu))
  cudnn.benchmark = True
  # 为CPU设置种子用于生成随机数,以使得结果是确定的
  torch.manual_seed(args.seed)
  cudnn.enabled=True

  logging.info('gpu device = %d' % args.gpu)
  logging.info("args = %s", args)

  criterion = nn.CrossEntropyLoss()#损失函数,交叉熵
  criterion = criterion.to(device)
  model = Network(args.gpu,args.init_channels, dataset_classes, args.layers, criterion)
  model = model.to(device)
  logging.info("param size = %fMB", utils.count_parameters_in_MB(model))

  optimizer = torch.optim.SGD(
      model.parameters(),
      args.learning_rate,
      momentum=args.momentum,
      weight_decay=args.weight_decay)

  train_data = MyDataset(args=args, subset='train')
  valid_data = MyDataset(args=args, subset='valid')

  train_queue = torch.utils.data.DataLoader(
      train_data, batch_size=args.batch_size, shuffle=True, pin_memory=True, num_workers=2)

  valid_queue = torch.utils.data.DataLoader(
      valid_data, batch_size=args.batch_size, shuffle=False, pin_memory=True, num_workers=2)
示例#5
0
def main():
    if not torch.cuda.is_available():
        logging.info('no gpu device available')
        sys.exit(1)

    np.random.seed(args.seed)
    torch.cuda.set_device(args.gpu)
    cudnn.benchmark = True
    torch.manual_seed(args.seed)
    cudnn.enabled = True
    torch.cuda.manual_seed(args.seed)
    logging.info('gpu device = %d' % args.gpu)
    logging.info("args = %s", args)

    criterion = nn.CrossEntropyLoss()
    criterion = criterion.cuda()
    model = Network(args.init_channels, CIFAR_CLASSES, args.layers, criterion)
    model = model.cuda()
    logging.info("param size = %fMB", count_parameters_in_MB(model))

    optimizer = torch.optim.SGD(model.parameters(),
                                args.learning_rate,
                                momentum=args.momentum,
                                weight_decay=args.weight_decay)

    train_transform, valid_transform = get_data_transforms_cifar10(args)
    train_data = dset.CIFAR10(root=args.data,
                              train=True,
                              download=True,
                              transform=train_transform)

    num_train = len(train_data)
    indices = list(range(num_train))
    split = int(np.floor(args.train_portion * num_train))

    train_queue = torch.utils.data.DataLoader(
        train_data,
        batch_size=2,
        sampler=torch.utils.data.sampler.SubsetRandomSampler(indices[:split]),
        pin_memory=True,
        num_workers=1)

    valid_queue = torch.utils.data.DataLoader(
        train_data,
        batch_size=2,
        sampler=torch.utils.data.sampler.SubsetRandomSampler(
            indices[split:num_train]),
        pin_memory=True,
        num_workers=1)

    scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(
        optimizer, int(args.epochs), eta_min=args.learning_rate_min)

    architect = Architect(model, args)

    for epoch in range(args.epochs):
        scheduler.step()
        lr = scheduler.get_lr()[0]
        logging.info('epoch %d lr %e', epoch, lr)

        genotype = model.genotype()
        logging.info('genotype = %s', genotype)

        print(F.softmax(model.alphas_normal, dim=-1))
        print(F.softmax(model.alphas_reduce, dim=-1))

        # training
        train_acc, train_obj = train(train_queue, valid_queue, model,
                                     architect, criterion, optimizer, lr)
        logging.info('train_acc %f', train_acc)

        # validation
        valid_acc, valid_obj = infer(valid_queue, model, criterion)
        logging.info('valid_acc %f', valid_acc)

        save(model, os.path.join(args.save, 'weights.pt'))
示例#6
0
def main(args, log_dir):

    ##############################################################################
    #
    #                           Dataset Config
    #
    ##############################################################################

    if args.data_search_space == 'ENAS':
        data_config_path = 'configs/data_configs/ENAS_configspace.json'
    elif args.data_search_space == 'NB101':
        data_config_path = 'configs/data_configs/NB101_configspace.json'
    elif args.data_search_space == 'NB201':
        data_config_path = 'configs/data_configs/NB201_configspace.json'
    else:
        raise TypeError("Unknow Seach Space : {:}".format(
            args.data_search_space))

    data_config = json.load(open(data_config_path, 'r'))

    ##############################################################################
    #
    #                           Model Config
    #
    ##############################################################################

    model_config_path = 'configs/model_configs/svge_configspace.json'
    model_configspace = config_space_json_r_w.read(
        open(model_config_path, 'r').read())
    model_config = model_configspace.get_default_configuration(
    ).get_dictionary()

    ##############################################################################
    #
    #                              Dataset
    #
    ##############################################################################
    print("Creating Dataset.")
    if args.data_search_space == 'NB201':
        from datasets.NASBench201 import Dataset as Dataset201
        dataset = Dataset201(batch_size=data_config['batch_size'])
    elif args.data_search_space == 'NB101':
        from datasets.NASBench101 import Dataset as Dataset101
        dataset = Dataset101(batch_size=data_config['batch_size'])
    elif args.data_search_space == 'ENAS':
        from datasets.ENAS import Dataset as DatasetENAS
        dataset = DatasetENAS(batch_size=data_config['batch_size'])
    else:
        raise TypeError("Unknow Dataset: {:}".format(args.data_search_space))

    print(f"Dataset size: {dataset.length}")

    ##############################################################################
    #
    #                              Model
    #
    ##############################################################################
    model = eval(args.model)(model_config=model_config,
                             data_config=data_config).to(args.device)
    optimizer = torch.optim.Adam(model.parameters(),
                                 lr=model_config['learning_rate'])
    scheduler = ReduceLROnPlateau(optimizer,
                                  'min',
                                  factor=0.1,
                                  patience=10,
                                  verbose=True)

    logging.info("param size = %fMB", util.count_parameters_in_MB(model))

    if not args.only_test_mode:

        ##############################################################################
        #
        #                              Training
        #
        ##############################################################################
        budget = model_config['epochs']
        for epoch in range(1, int(budget) + 1):
            logging.info('epoch: %s', epoch)

            # training
            train_obj = train(dataset, model, optimizer, epoch, args.device,
                              log_dir)
            scheduler.step(train_obj)

            # Save the model
            if epoch % args.save_interval == 0:
                logger.info('save model checkpoint {}  '.format(epoch))
                model_name = os.path.join(
                    log_dir, 'model_checkpoint{}.obj'.format(epoch))
                torch.save(model.state_dict(), model_name)
                optimizer_name = os.path.join(
                    log_dir, 'optimizer_checkpoint{}.obj'.format(epoch))
                torch.save(optimizer.state_dict(), optimizer_name)
                scheduler_name = os.path.join(
                    log_dir, 'scheduler_checkpoint{}.obj'.format(epoch))
                torch.save(scheduler.state_dict(), scheduler_name)

            config_dict = {
                'epochs': epoch,
                'loss': train_obj,
            }

            with open(os.path.join(log_dir, 'results.txt'), 'a') as file:
                json.dump(str(config_dict), file)
                file.write('\n')

            ##############################################################################
            #
            #                              Test
            #
            ##############################################################################

            if epoch % args.save_interval == 0:

                if args.data_search_space == 'ENAS':
                    test(dataset,
                         model,
                         epoch,
                         args.device,
                         log_dir,
                         data_config,
                         DatasetENAS,
                         ENAS=True)
                elif args.data_search_space == 'NB101':
                    test(dataset,
                         model,
                         epoch,
                         args.device,
                         log_dir,
                         data_config,
                         Dataset101,
                         NB101=True)
                elif args.data_search_space == 'NB201':
                    test(dataset,
                         model,
                         epoch,
                         args.device,
                         log_dir,
                         data_config,
                         Dataset201,
                         NB201=True)
                else:
                    raise TypeError("Unknow Seach Space : {:}".format(
                        args.data_search_space))

    else:
        ##############################################################################
        #
        #                              Only Test
        #
        ##############################################################################

        log_dir = os.path.join(args.log_dir,
                               args.model + '_' + args.data_search_space)

        epoch = args.test_epoch
        m = torch.load(os.path.join(log_dir, f"model_checkpoint{epoch}.obj"),
                       map_location=args.device)
        model.load_state_dict(m)

        if args.data_search_space == 'ENAS':
            test(dataset,
                 model,
                 epoch,
                 args.device,
                 log_dir,
                 data_config,
                 DatasetENAS,
                 ENAS=True,
                 pretrained=True)
        elif args.data_search_space == 'NB101':
            test(dataset,
                 model,
                 epoch,
                 args.device,
                 log_dir,
                 data_config,
                 Dataset101,
                 NB101=True,
                 pretrained=True)
        elif args.data_search_space == 'NB201':
            test(dataset,
                 model,
                 epoch,
                 args.device,
                 log_dir,
                 data_config,
                 Dataset201,
                 NB201=True,
                 pretrained=True)
        else:
            raise TypeError("Unknow Seach Space : {:}".format(
                args.data_search_space))
示例#7
0
def main():
    seed = util.prepare(args)
    if not cuda.is_available():
        logging.info('no gpu device available')
        sys.exit(1)
    CIFAR_CLASSES = 10
    np.random.seed(seed)
    random.seed(seed)
    torch.manual_seed(seed)
    cuda.manual_seed(seed)
    cuda.set_device(args.gpu)
    cudnn.benchmark = False
    cudnn.deterministic = True
    logging.info('gpu device = %d' % args.gpu)
    logging.info("args = %s", args)
    logging.info('hidden_layers:{:}'.format(args.hidden_layers))
    logging.info('first_neurons:{:}'.format(args.first_neurons))
    logging.info('change:{:}'.format(args.change))
    logging.info('activate_func:{:}'.format(args.activate_func))
    logging.info('opt:{:}'.format(args.opt))
    logging.info('cross_link:{:}'.format(args.cross_link))

    genotype = eval("genotypes.%s" % args.arch)
    model = Network(args.init_channels, CIFAR_CLASSES, args.layers,
                    args.auxiliary, genotype, args)
    model = model.cuda()
    logging.info("param size = %fMB", util.count_parameters_in_MB(model))

    criterion = nn.CrossEntropyLoss()
    criterion = criterion.cuda()
    optimizer = torch.optim.SGD(model.parameters(),
                                args.learning_rate,
                                momentum=args.momentum,
                                weight_decay=args.weight_decay)

    train_transform, valid_transform = util.get_data_transforms_cifar10(args)
    train_data = datasets.CIFAR10(root=args.data,
                                  train=True,
                                  download=False,
                                  transform=train_transform)
    valid_data = datasets.CIFAR10(root=args.data,
                                  train=False,
                                  download=False,
                                  transform=valid_transform)

    train_queue = DataLoader(train_data,
                             batch_size=args.batch_size,
                             shuffle=True,
                             pin_memory=True,
                             num_workers=1)

    valid_queue = DataLoader(valid_data,
                             batch_size=args.batch_size,
                             shuffle=False,
                             pin_memory=True,
                             num_workers=1)

    scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(
        optimizer, args.epochs)

    best_acc = 0
    for epoch in range(args.epochs):
        logging.info('epoch %d lr %.6f', epoch, scheduler.get_lr()[0])
        model.drop_path_prob = args.drop_path_prob * epoch / args.epochs

        epoch_str = '[{:03d}/{:03d}]'.format(epoch, args.epochs)
        train_acc, train_obj = train(train_queue, model, criterion, optimizer,
                                     epoch_str)
        logging.info('train_acc %.2f', train_acc)

        valid_acc, valid_obj = infer(valid_queue, model, criterion, epoch_str)
        logging.info('valid_acc %.2f', valid_acc)

        if valid_acc > best_acc:
            logging.info(
                'find the best model. Save it to {:}'.format(args.save +
                                                             'best.pt'))
            util.save(model, os.path.join(args.save, 'best.pt'))
            best_acc = valid_acc
        scheduler.step()
    logging.info('best acc is {:}'.format(best_acc))