def train_on_poisoned_data(args, poisoned_data):
    callable_ds = datasets.dataset_helper(args.dataset)
    ds = callable_ds()
    model = dnn_utils.model_helper(args.model_arch)()
    model = dnn_utils.multi_gpu_wrap(model)

    for x, y in zip(*poisoned_data):
        ds.add_point_to_train(x, y)

    model = mtp_utils.train_clean_model(ds, args, epochs=15)

    # Compute metrics for said model
    train_loader, val_loader = callable_ds().get_loaders(args.batch_size)
    _, train_loss = dnn_utils.get_model_metrics(model, train_loader)
    test_acc, _ = dnn_utils.get_model_metrics(model, val_loader)

    (trn_sub_acc, _), (trn_nsub_acc, _) = dnn_utils.get_model_metrics(
        model, train_loader, args.poison_class)
    (tst_sub_acc, _), (tst_nsub_acc, _) = dnn_utils.get_model_metrics(
        model, val_loader, args.poison_class)

    # Print accuracies on target/non-target data
    # On seen (train) and unseen (val) data
    print("Total Acc: %.3f" % test_acc)
    print('Train Target Acc : %.3f' % trn_sub_acc)
    print('Train Collat Acc : %.3f' % trn_nsub_acc)
    print('Test Target Acc : %.3f' % tst_sub_acc)
    print('Test Collat Acc : %.3f' % tst_nsub_acc)
    print()
def get_pop_accs(poison_model_path):
    # Load target model theta_p, set to eval mode
    theta_p = dnn_utils.model_helper("flat")(n_classes=2)
    theta_p = theta_p.cuda()
    theta_p.load_state_dict(ch.load(poison_model_path))
    theta_p.eval()

    # Report performance of poisoned model
    train_loader, test_loader = datasets.dataset_helper("memory")(
        path="./data/datasets/MNIST17/split_1.pt").get_loaders(512)
    # Report accuracy on unseen population data
    (tst_sub_acc, _), _ = dnn_utils.get_model_metrics(
        model=theta_p,
        loader=test_loader,
        target_prop=0)
    return tst_sub_acc
예제 #3
0
    if args.dynamic_lr and (not args.use_optim_for_optimal):
        raise ValueError("Dynamic LR only supported for optimizer currently")

    if args.skip_bad and (args.start_opt_real or args.poison_data):
        raise ValueError(
            "Re-run and real/poison start data not supported yet.")

    # Print all arguments
    utils.flash_utils(args)

    # Get number of classes
    n_classes = datasets.dataset_helper(args.dataset)().n_classes

    # Load target model theta_p, set to eval mode
    theta_p = dnn_utils.model_helper(args.model_arch)(n_classes=n_classes)
    theta_p = theta_p.cuda()
    theta_p.load_state_dict(ch.load(args.poison_model_path))
    theta_p.eval()

    # Report performance of poisoned model
    train_loader, test_loader = datasets.dataset_helper(
        args.dataset)().get_loaders(512)
    clean_acc, _ = dnn_utils.get_model_metrics(theta_p, test_loader)
    print(utils.yellow_print("[Poisoned-model] Total Acc: %.4f" % clean_acc))
    _, clean_total_loss = dnn_utils.get_model_metrics(theta_p, train_loader)
    print(
        utils.yellow_print("[Poisoned-model] Loss on train: %.4f" %
                           clean_total_loss))
    # Report weight norm for poisoned model
    poisoned_norm = dnn_utils.get_model_l2_norm(theta_p).item()
        assert len(theta_values) > 0, 'Provide at least one theta value'
        args.theta_values = theta_values
    except Exception:
        raise ValueError("Theta values not provided in correct format")

    if args.verbose:
        args.verbose_pretrain = True
        args.verbose_oga = True
        args.verbose_opt = True
        args.verbose_precomp = True

    # Print all arguments
    utils.flash_utils(args)

    # Load target model theta_p
    theta_p = dnn_utils.model_helper(args.model_arch)()
    theta_p = dnn_utils.multi_gpu_wrap(theta_p)
    theta_p.load_state_dict(ch.load(args.poison_model_path))
    theta_p.eval()

    # Report performance of poisoned model
    train_loader, test_loader = datasets.dataset_helper(
        args.dataset)().get_loaders(args.batch_size)
    clean_acc, _ = dnn_utils.get_model_metrics(theta_p, test_loader)
    print(utils.yellow_print("[Poisoned-model] Total Acc: %.4f" % clean_acc))
    _, clean_total_loss = dnn_utils.get_model_metrics(theta_p, train_loader)
    print(
        utils.yellow_print("[Poisoned-model] Loss on train: %.4f" %
                           clean_total_loss))
    # Report weight norm for poisoned model
    poisoned_norm = dnn_utils.get_model_l2_norm(theta_p).item()
예제 #5
0
        args.verbose_precomp = True

    # Print all arguments
    utils.flash_utils(args)

    # Get number of classes
    n_classes = 2

    # Report performance of poisoned model
    train_loader, test_loader = datasets.dataset_helper("memory")(
        path=args.path_1).get_loaders(512)

    # Load target models theta_p, set to eval mode
    thetas_p = []
    for i, mp in enumerate(os.listdir(args.poison_model_dir)):
        tp = dnn_utils.model_helper(args.poison_arch)(n_classes=n_classes)
        tp = tp.cuda()
        tp.load_state_dict(ch.load(os.path.join(args.poison_model_dir, mp)))
        tp.eval()
        thetas_p.append(tp)

        # Report performance of poisoned model
        clean_acc, _ = dnn_utils.get_model_metrics(tp, test_loader)
        print(
            utils.yellow_print("[Poisoned-model %d] Total Acc: %.4f" %
                               (i + 1, clean_acc)))
        _, clean_total_loss = dnn_utils.get_model_metrics(tp, train_loader)
        print(
            utils.yellow_print("[Poisoned-model %d] Loss on train: %.4f" %
                               (i + 1, clean_total_loss)))
        # Report weight norm for poisoned model