예제 #1
0
def test_targeted_attack(bn_model, bn_targeted_criterion, bn_images,
                         bn_labels):
    attack = Attack(bn_model, bn_targeted_criterion)
    advs = attack(bn_images, bn_labels, unpack=False)
    for adv in advs:
        assert adv.perturbed is not None
        assert adv.distance.value < np.inf
예제 #2
0
def test_attack_impossible(bn_model, bn_impossible_criterion, bn_images,
                           bn_labels):
    attack = Attack(bn_model, bn_impossible_criterion)
    advs = attack(bn_images, bn_labels, unpack=False)
    for adv in advs:
        assert adv.perturbed is None
        assert adv.distance.value == np.inf
예제 #3
0
def test_run_sequential(bn_model, bn_criterion, bn_images, bn_labels):
    attack = Attack(bn_model, bn_criterion)
    advs1 = attack(bn_images, bn_labels)

    advs2 = run_sequential(Attack, bn_model, bn_criterion, bn_images, bn_labels)
    advs2 = np.stack([a.perturbed for a in advs2])

    assert np.all(advs1 == advs2)
예제 #4
0
def test_attack_eps(bn_model, bn_criterion, bn_images, bn_labels):
    attack = Attack(bn_model, bn_criterion)
    advs = attack(bn_images,
                  bn_labels,
                  unpack=False,
                  epsilons=np.linspace(0., 1., 100)[1:])
    for adv in advs:
        assert adv.perturbed is not None
        assert adv.distance.value < np.inf
예제 #5
0
def test_attack_eg(request, bn_model, bn_criterion, bn_images, bn_labels):
    GradientEstimator = request.param
    gradient_estimator = GradientEstimator(epsilon=0.01)
    model = ModelWithEstimatedGradients(bn_model, gradient_estimator)
    attack = Attack(model, bn_criterion)
    advs = attack(bn_images, bn_labels, unpack=False)
    for adv in advs:
        assert adv.perturbed is not None
        assert adv.distance.value < np.inf
예제 #6
0
def test_attack_startingpoint(bn_model, bn_criterion, bn_images, bn_labels):
    attack = Attack(bn_model, bn_criterion)
    np.random.seed(2)
    starting_point = np.random.uniform(
        0, 1, size=bn_images[0].shape).astype(bn_images.dtype)
    advs = attack(bn_images, bn_labels, unpack=False,
                  starting_point=starting_point)
    for adv in advs:
        assert adv.perturbed is not None
        assert adv.distance.value < np.inf
def test_attack_notrans_norot(bn_model, bn_criterion, bn_images, bn_labels):
    attack = Attack(bn_model, bn_criterion)
    advs = attack(bn_images,
                  bn_labels,
                  unpack=False,
                  do_translations=False,
                  do_rotations=False)
    for adv in advs:
        assert adv.perturbed is None
        assert adv.distance.value == np.inf
예제 #8
0
def test_attack_impossible(bn_model, bn_impossible_criterion, bn_images,
                           bn_labels):
    attack = Attack(bn_model, bn_impossible_criterion)
    advs = attack(bn_images,
                  bn_labels,
                  unpack=False,
                  max_iterations=100,
                  binary_search_steps=20)
    for adv in advs:
        assert adv.perturbed is None
        assert adv.distance.value == np.inf
예제 #9
0
def test_targeted_attack(bn_model, bn_targeted_criterion, bn_images,
                         bn_labels):
    attack = Attack(bn_model, bn_targeted_criterion)
    advs = attack(bn_images,
                  bn_labels,
                  unpack=False,
                  max_iterations=100,
                  binary_search_steps=20)
    for adv in advs:
        assert adv.perturbed is not None
        assert adv.distance.value < np.inf
def test_unknown_image(bn_model, bn_criterion, bn_images, bn_labels):
    input_images = np.zeros_like(bn_images)
    output_images = np.zeros_like(input_images)
    attack = Attack(bn_model, bn_criterion)

    with pytest.raises(ValueError):
        attack(bn_images,
               bn_labels,
               unpack=False,
               candidate_inputs=input_images,
               candidate_outputs=output_images)
def test_attack(bn_model, bn_criterion, bn_images, bn_labels):
    input_images = bn_images
    output_images = np.zeros_like(input_images)
    attack = Attack(bn_model, bn_criterion)
    advs = attack(bn_images,
                  bn_labels,
                  unpack=False,
                  candidate_inputs=input_images,
                  candidate_outputs=output_images)
    for adv in advs:
        assert adv.perturbed is not None
        assert adv.distance.value < np.inf
def test_attack_rnd(bn_model, bn_criterion, bn_images, bn_labels):
    attack = Attack(bn_model, bn_criterion)
    advs = attack(bn_images, bn_labels, unpack=False, random_sampling=True)
    for adv in advs:
        assert adv.perturbed is not None
        assert adv.distance.value < np.inf
def test_attack(bn_model, bn_criterion, bn_images, bn_labels):
    attack = Attack(bn_model, bn_criterion)
    advs = attack(bn_images, bn_labels, unpack=False, epsilons=10, steps=5)
    for adv in advs:
        assert adv.perturbed is not None
        assert adv.distance.value < np.inf
예제 #14
0
def test_attack_gl(gl_bn_model, bn_criterion, bn_images, bn_labels):
    attack = Attack(gl_bn_model, bn_criterion)
    advs = attack(bn_images, bn_labels, unpack=False, max_iterations=100)
    for adv in advs:
        assert adv.perturbed is None
        assert adv.distance.value == np.inf
예제 #15
0
def test_targeted_attack(bn_model, bn_targeted_criterion, bn_images,
                         bn_labels):
    attack = Attack(bn_model, bn_targeted_criterion)
    with pytest.raises(AssertionError):
        attack(bn_images, bn_labels, unpack=False)