Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def __init__(self, model, sess, dtypestr='float32', **kwargs):
"""
Create a DeepFool instance.
"""
if not isinstance(model, Model):
wrapper_warning_logits()
model = CallableModelWrapper(model, 'logits')
super(DeepFool, self).__init__(model, sess, dtypestr, **kwargs)
self.structural_kwargs = [
'overshoot', 'max_iter', 'clip_max', 'clip_min', 'nb_candidate'
]
prec_balds_succ = []
rec_balds_succ = []
AUC_entropies_succ = []
AUC_balds_succ = []
AP_entropies_succ = []
AP_balds_succ = []
accs = []
modelnames = []
for i, (name, m) in enumerate(models_to_eval):
modelnames.append(name)
input_t = K.placeholder(shape=(None, 224, 224, 3))
wrap = CallableModelWrapper(m, 'probs')
x_adv = create_adv_examples(wrap, input_t, x_to_adv, attack_params)
# check the examples are really adversarial
preds = np.concatenate([m.predict(x).argmax(axis=1) for x in batch_gen(x_adv, batch_size=args.batch_size)],
axis=0)
acc = np.mean(np.equal(preds, x_to_adv_labels.argmax(axis=1)))
print("Accuracy on adv examples:", acc)
accs.append(acc)
succ_adv_inds = np.logical_not(
np.equal(preds, x_to_adv_labels.argmax(axis=1))) # seperate out succesful adv examples
dists = U.batch_L_norm_distances(x_to_adv, x_adv, ord=2)
noise = np.random.random(size=x_plus_noise.shape)
noise /= (dists * np.linalg.norm(noise.reshape(x_plus_noise.shape[0], -1), axis=1))[:, None, None, None]
x_plus_noise += noise
# Load model before attacks graph construction so that TF won't
# complain can't load parameters for attack
U.load_state(model_path)
if attack != None:
if attack == 'fgsm':
def wrapper(x):
return q_func(x, num_actions, scope="q_func", reuse=True, concat_softmax=True)
adversary = FastGradientMethod(CallableModelWrapper(wrapper, 'probs'), sess=U.get_session())
adv_observations = adversary.generate(observations_ph.get(), eps=1.0/255.0,
clip_min=0, clip_max=1.0) * 255.0
elif attack == 'iterative':
def wrapper(x):
return q_func(x, num_actions, scope="q_func", reuse=True, concat_softmax=True)
adversary = BasicIterativeMethod(CallableModelWrapper(wrapper, 'probs'), sess=U.get_session())
adv_observations = adversary.generate(observations_ph.get(), eps=1.0/255.0,
clip_min=0, clip_max=1.0) * 255.0
elif attack == 'cwl2':
def wrapper(x):
return q_func(x, num_actions, scope="q_func", reuse=True)
adversary = CarliniWagnerL2(CallableModelWrapper(wrapper, 'logits'), sess=U.get_session())
cw_params = {'binary_search_steps': 1,
'max_iterations': 100,
'learning_rate': 0.1,
'initial_const': 10,
'clip_min': 0,
'clip_max': 1.0}
adv_observations = adversary.generate(observations_ph.get(), **cw_params) * 255.0
craft_adv_obs = U.function(inputs=[observations_ph, stochastic_ph, update_eps_ph],
outputs=adv_observations,
def spsa_attack():
# Use tf for evaluation on adversarial data
sess = tf.Session()
x_op = tf.placeholder(tf.float32, shape=(None, 3, 32, 32,))
y_op = tf.placeholder(tf.float32, shape=(1,))
# Convert pytorch model to a tf_model and wrap it in cleverhans
tf_model_fn = convert_pytorch_model_to_tf(menet_model)
cleverhans_model = CallableModelWrapper(tf_model_fn, output_layer='logits')
# Create an SPSA attack
spsa = SPSA(cleverhans_model, sess=sess)
spsa_params = {
'eps': config['epsilon'],
'nb_iter': config['num_steps'],
'clip_min': 0.,
'clip_max': 1.,
'spsa_samples': args.spsa_sample, # in this case, the batch_size is equal to spsa_samples
'spsa_iters': 1,
}
adv_x_op = spsa.generate(x_op, y_op, **spsa_params)
adv_preds_op = tf_model_fn(adv_x_op)
# Evaluation against SPSA attacks
def __init__(self, model, sess, dtypestr='float32', **kwargs):
"""
Note: the model parameter should be an instance of the
cleverhans.model.Model abstraction provided by CleverHans.
"""
if not isinstance(model, Model):
wrapper_warning_logits()
model = CallableModelWrapper(model, 'logits')
super(CarliniWagnerL2, self).__init__(model, sess, dtypestr, **kwargs)
self.feedable_kwargs = ('y', 'y_target')
self.structural_kwargs = [
'batch_size', 'confidence', 'targeted', 'learning_rate',
'binary_search_steps', 'max_iterations', 'abort_early',
'initial_const', 'clip_min', 'clip_max'
]
def __init__(self, model, sess, dtypestr='float32', **kwargs):
if not isinstance(model, Model):
wrapper_warning()
model = CallableModelWrapper(model, 'probs')
super(LBFGS, self).__init__(model, sess, dtypestr, **kwargs)
self.feedable_kwargs = ('y_target',)
self.structural_kwargs = [
'batch_size', 'binary_search_steps', 'max_iterations',
'initial_const', 'clip_min', 'clip_max'
]
U.load_state(model_path)
except:
pass
if attack != None:
if attack == 'fgsm':
def wrapper(x):
return q_func(x, num_actions, scope="q_func", reuse=True, concat_softmax=True, noisy=noisy)
adversary = FastGradientMethod(CallableModelWrapper(wrapper, 'probs'), sess=U.get_session())
adv_observations = adversary.generate(observations_ph.get(), eps=1.0/255.0,
clip_min=0, clip_max=1.0) * 255.0
elif attack == 'iterative':
def wrapper(x):
return q_func(x, num_actions, scope="q_func", reuse=True, concat_softmax=True)
adversary = BasicIterativeMethod(CallableModelWrapper(wrapper, 'probs'), sess=U.get_session())
adv_observations = adversary.generate(observations_ph.get(), eps=1.0/255.0,
clip_min=0, clip_max=1.0) * 255.0
elif attack == 'cwl2':
def wrapper(x):
return q_func(x, num_actions, scope="q_func", reuse=True)
adversary = CarliniWagnerL2(CallableModelWrapper(wrapper, 'logits'), sess=U.get_session())
cw_params = {'binary_search_steps': 1,
'max_iterations': 100,
'learning_rate': 0.1,
'initial_const': 10,
'clip_min': 0,
'clip_max': 1.0}
adv_observations = adversary.generate(observations_ph.get(), **cw_params) * 255.0
craft_adv_obs = U.function(inputs=[observations_ph, stochastic_ph, update_eps_ph],
outputs=adv_observations,
def __init__(self, m, back='tf', sess=None):
if not isinstance(m, model.Model):
m = model.CallableModelWrapper(m, 'probs')
super(RandomAttack, self).__init__(m, back, sess)
self.feedable_kwargs = {
'eps': np.float32,
'num_samples': np.float32,
'num_batches': np.float32,
'y': np.float32,
'y_target': np.float32,
'clip_min': np.float32,
'clip_max': np.float32
}
self.structural_kwargs = ['ord']