Esempio n. 1
0
def resnet152(pretrained=False):
    """Constructs a ResNet-152 model.
  Args:
    pretrained (bool): If True, returns a model pre-trained on ImageNet
  """
    model = ResNet(Bottleneck, [3, 8, 36, 3])
    if pretrained:
        model.load_state_dict(model_zoo.load_url(model_urls['resnet152']))
    return model
Esempio n. 2
0
def resnet34(pretrained=False):
    """Constructs a ResNet-34 model.
  Args:
    pretrained (bool): If True, returns a model pre-trained on ImageNet
  """
    model = ResNet(BasicBlock, [3, 4, 6, 3])
    if pretrained:
        model.load_state_dict(model_zoo.load_url(model_urls['resnet34']))
    return model
def MODEL(model_name, weight_decay, image, label, trainable, is_training):
    end_points = ResNet.model(image,
                              trainable=trainable,
                              is_training=is_training)

    loss = tf.reduce_mean(
        tf.nn.softmax_cross_entropy_with_logits(label, end_points['Logits']))
    accuracy = tf.reduce_mean(
        tf.cast(
            tf.equal(tf.argmax(label, 1), tf.argmax(end_points['Logits'], 1)),
            tf.float32))

    tf.compat.v1.summary.scalar('loss', loss)
    return end_points, loss, accuracy
def load_model(args, num_class, trained_param=None):
    if 'ResNet' in args.arch:
        arch = int(args.arch.split('-')[1])
        model = ResNet.Model(num_layers=arch,
                             num_class=num_class,
                             name='ResNet',
                             trainable=True)

    if trained_param is not None:
        with open(trained_param, 'rb') as f:
            trained = pickle.load(f)
        n = 0
        for k in model.Layers.keys():
            layer = model.Layers[k]
            if 'conv' in k or 'fc' in k:
                kernel = trained[layer.name + '/kernel:0']
                layer.kernel_initializer = tf.constant_initializer(kernel)
                n += 1
                if layer.use_biases:
                    layer.biases_initializer = tf.constant_initializer(
                        trained[layer.name + '/biases:0'])
                    n += 1
                layer.num_outputs = kernel.shape[-1]

            elif 'bn' in k:
                moving_mean = trained[layer.name + '/moving_mean:0']
                moving_variance = trained[layer.name + '/moving_variance:0']
                param_initializers = {
                    'moving_mean': tf.constant_initializer(moving_mean),
                    'moving_variance': tf.constant_initializer(moving_variance)
                }
                n += 2
                if layer.scale:
                    param_initializers['gamma'] = tf.constant_initializer(
                        trained[layer.name + '/gamma:0'])
                    n += 1
                if layer.center:
                    param_initializers['beta'] = tf.constant_initializer(
                        trained[layer.name + '/beta:0'])
                    n += 1
                layer.param_initializers = param_initializers
        print(n, 'params loaded')
    return model
Esempio n. 5
0
    args.input_size = list(train_images.shape[1:])

    if 'WResNet' in args.arch:
        arch = [int(a) for a in args.arch.split('-')[1:]]
        model = WResNet.Model(architecture=arch,
                              num_class=np.max(train_labels) + 1,
                              name='Student',
                              trainable=True)
    elif 'VGG' in args.arch:
        model = VGG.Model(num_class=np.max(train_labels) + 1,
                          name='Student',
                          trainable=True)
    elif 'ResNet' in args.arch:
        arch = int(args.arch.split('-')[1])
        model = ResNet.Model(num_layers=arch,
                             num_class=np.max(train_labels) + 1,
                             name='Student',
                             trainable=True)
    elif 'Mobilev2' in args.arch:
        model = Mobilev2.Model(num_class=np.max(train_labels) + 1,
                               width_mul=1.0 if args.slimmable else 1.0,
                               name='Student',
                               trainable=True)

    model(np.zeros([1] + args.input_size, dtype=np.float32), training=False)

    cardinality = tf.data.experimental.cardinality(datasets['train']).numpy()
    if args.decay_points is None:
        LR = tf.keras.optimizers.schedules.ExponentialDecay(args.learning_rate,
                                                            cardinality,
                                                            args.decay_rate,
                                                            staircase=True)
Esempio n. 6
0
def run_experiment(args):
    train_distortion, val_distortion = None, None
    if args.distortion:
        train_distortion = Distorter(loc=0,
                                     sd=args.distortion_sd,
                                     seed=args.seed)
        val_distortion = Distorter(loc=0,
                                   sd=args.distortion_sd,
                                   seed=args.seed + 1)

    train_params = dict(
        distortion=train_distortion,
        variable_binning=args.variable_binning,
        start=args.start,
        varying_start_value=args.varying_start_value,
        n_agents=args.n_agents,
        timesteps=args.timesteps,
        compute_fiv=args.compute_frequency_increment_values,
    )

    train_loader = DataLoader(
        train_params,
        batch_size=args.batch_size,
        seed=args.seed,
        distortion=args.distortion,
        n_sims=args.n_sims,
        train=True,
        n_workers=args.n_workers,
        normalize_samples=args.normalize_samples,
    )

    val_params = dict(
        distortion=val_distortion,
        variable_binning=args.variable_binning,
        start=args.start,
        varying_start_value=args.varying_start_value,
        n_agents=args.n_agents,
        timesteps=args.timesteps,
        compute_fiv=args.compute_frequency_increment_values,
    )

    val_loader = DataLoader(
        val_params,
        batch_size=args.batch_size,
        seed=args.seed + 1,
        distortion=args.distortion,
        n_sims=int(args.val_size * args.n_sims),
        train=False,
        n_workers=args.n_workers,
        normalize_samples=args.normalize_samples,
    )

    if args.cuda and torch.cuda.is_available():
        device = torch.device("cuda")
        print("Using GPU")
    else:
        device = torch.device("cpu")

    if args.model == "FCN":
        model = FCN(1, 1)
    elif args.model == "LSTMFCN":
        model = LSTMFCN(args.hidden_size, 1, args.num_layers, 1, args.dropout,
                        args.rnn_dropout, args.bidirectional)
    elif args.model == "INCEPTION":
        model = InceptionTime(1, 1)
    else:
        model = ResNet(1)

    model = model.to(device)
    trainer = Trainer(model, train_loader, val_loader, device=device)
    trainer.fit(args.n_epochs,
                learning_rate=args.learning_rate,
                lr_patience=args.learning_rate_patience,
                early_stop_patience=args.early_stop_patience,
                evaluation_maximum=args.evaluation_maximum)

    run_id = str(uuid.uuid1())[:8] if args.outfile is None else args.outfile

    trainer.model.eval()
    trainer.save_model(run_id)

    if args.test:
        print("Evaluating the model...")
        if args.test_samples is not None:
            print("Using precomputed test-samples...")
        else:
            print("Generating test samples...")
        test_samples = args.test_samples if args.test_samples is not None else generate_test_samples(
            args.timesteps, args.n_agents, args.n_workers)

        nn_results = test_model(model,
                                test_samples,
                                args.timesteps,
                                args.n_agents,
                                device=device,
                                normalize_samples=args.normalize_samples)
        nn_scores = evaluate_results(nn_results, prefix="NN_")

        return run_id, nn_results, nn_scores