コード例 #1
0
from darts.operations import *

import sys
sys.path.append('../cnn')
from model import NetworkCIFAR as Network
from chainer.datasets import get_cifar10

c_model = NetworkCIFAR(DARTS)
chainer.serializers.load_npz('model.npz', c_model)
chainer.global_config.train = False

t_model = Network(36, 10, 20, True, DARTS)
t_model.drop_path_prob = 0.2
t_model.load_state_dict(torch.load('cifar10_model.pt'))
t_model.eval()

train, val = get_cifar10()
img, _ = train[0]
x = img[None]
t_x = torch.autograd.Variable(torch.FloatTensor(x))
c_y = c_model(x)
t_y = t_model(t_x)
np.testing.assert_almost_equal(c_y[0].data,
                               t_y[0].detach().data.numpy(),
                               decimal=5)

#####################
# c_prev_s = c_model.stem(x)
# c_prev_prev_s = c_prev_s
# for i in range(7):
コード例 #2
0
ファイル: ensemble.py プロジェクト: iksmada/PC-DARTS
def main(args):
    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)

    models_folder = args.models_folder
    if not os.path.isdir(models_folder):
        logging.error("The models_folder argument %s is not a directory", models_folder)
        sys.exit(1)

    models = dict()
    for dir in os.listdir(models_folder):
        if dir.startswith("eval"):
            weights_file = os.path.join(models_folder, dir, "weights.pt")
            if os.path.exists(weights_file):
                arch = dir.split("-")[1]
                genotype = genotypes.__dict__.get(arch, None)
                if genotype is not None:
                    model = Network(args.init_channels, CIFAR_CLASSES, args.layers, args.auxiliary, genotype)
                    model = model.cuda()
                    utils.load(model, weights_file)
                    model.drop_path_prob = args.drop_path_prob
                    model.eval()
                    models[arch] = model
                    logging.info("%s param size = %fMB", dir, utils.count_parameters_in_MB(model))
                else:
                    logging.info("Ignoring %s because there is no genotype %s on genotype.py", dir, arch)
    if len(models) == 0:
        logging.error("No model was found on %s", models_folder)
        sys.exit(1)

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

    train_transform, test_transform = utils._data_transforms_cifar10(args)
    if args.set == 'cifar100':
        train_data = dset.CIFAR100(root=args.data, train=True, download=True, transform=train_transform)
        valid_data = dset.CIFAR100(root=args.data, train=True, download=True, transform=test_transform)
        test_data = dset.CIFAR100(root=args.data, train=False, download=True, transform=test_transform)
    else:
        train_data = dset.CIFAR10(root=args.data, train=True, download=True, transform=train_transform)
        valid_data = dset.CIFAR10(root=args.data, train=True, download=True, transform=test_transform)
        test_data = dset.CIFAR10(root=args.data, train=False, download=True, transform=test_transform)

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

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

    valid_queue = torch.utils.data.DataLoader(
        valid_data, batch_size=args.batch_size,
        sampler=torch.utils.data.sampler.SubsetRandomSampler(indices[split:num_train]),
        pin_memory=True, num_workers=4)

    test_queue = DataLoader(
        test_data, batch_size=args.batch_size, shuffle=False, pin_memory=True, num_workers=4)

    if args.calculate:
        # return n_models x n_classes matrix of weights
        if args.per_class:
            weights = calc_ensemble(valid_queue, models, len(valid_data.classes))
        else:
            weights = calc_ensemble(valid_queue, models)
    else:
        weights = torch.ones(len(models), device='cuda')
    logging.info('train final weights = %s', weights)

    # scale weights per maximum value per class
    test_acc, top5_acc, test_obj = infer(test_queue, models, criterion, weights / weights.amax(dim=0))
    logging.info('test loss %e, acc top1: %.2f, acc top5 %.2f', test_obj, test_acc, top5_acc)

    train_acc, top5_acc, train_obj = infer(train_queue, models, criterion)
    logging.info('train loss %e, acc top1: %f, acc top5 %f', train_obj, train_acc, top5_acc)
コード例 #3
0
ファイル: evaluate_model.py プロジェクト: zjersey/FairDARTS
    model = Network(36, 10, 20, 0.4, genotype, args.parse_method)

    flops, params = profile(model, inputs=(torch.randn(1, 3, 32, 32),), verbose=False)
    print('flops = %fM' % (flops / 1e6))
    print('param size = %fM' %( params / 1e6))

    model = model.cuda()

    if args.model_path and os.path.isfile(args.model_path):
        checkpoint = torch.load(args.model_path)
        model.load_state_dict(checkpoint['state_dict'])
    else:
        print('The Pre-Trained Model Is InValid!')
        sys.exit(-1)

    top1 = dutils.AvgrageMeter()
    top5 = dutils.AvgrageMeter()
    model.eval()
    with torch.no_grad():
        for step, (input, target) in enumerate(valid_queue):
            input = input.cuda(non_blocking=True)
            target = target.cuda(non_blocking=True)
            logits, _ = model(input)
            prec1, prec5 = dutils.accuracy(logits, target, topk=(1, 5))
            n = input.size(0)
            top1.update(prec1.item(), n)
            top5.update(prec5.item(), n)

            if step % args.report_freq == 0:
                print('valid %03d %f %f' % (step, top1.avg, top5.avg))
        print("Final Mean Top1: {}, Top5: {}".format(top1.avg, top5.avg))