我是Tensorflow的初学者,在本练习中,我试图基于预先训练的模型(faster_rcnn_inception_v2_coco)产生对抗性攻击。 我发现以下函数可以执行快速渐变符号方法:
def step_fgsm(x, eps, logits):
label = tf.argmax(logits,1)
one_hot_label = tf.one_hot(label, NUM_CLASSES)
cross_entropy = tf.losses.softmax_cross_entropy(one_hot_label, logits,
label_smoothing=0.1, weights=1.0)
gradient = tf.gradients(cross_entropy,x)[0]
x_adv = x + eps*tf.sign(gradient)
x_adv = tf.clip_by_value(x_adv,-1.0,1.0)
return tf.stop_gradient(x_adv)
Fgsm = step_fgsm(resized_im, 0.1, Logits)
但是当我尝试计算梯度时,它返回[None],这不是我期望的。 我认为这可能与我获取Logits的形式有关,即调用以下函数:
def get_logits(self, image):
width, height = image.size
resize_ratio = 1.0 * self.INPUT_SIZE / max(width, height)
target_size = (int(resize_ratio * width), int(resize_ratio * height))
resized_image = image.convert('RGB').resize(target_size, Image.ANTIALIAS)
output_node = self.graph.get_tensor_by_name('SecondStagePostprocessor/Reshape_5:0')
output_logits = self.sess.run(
output_node,
feed_dict={self.INPUT_TENSOR_NAME: [np.asarray(resized_image)]})
return output_logits
Logits = MODEL.get_logits(resized_im)
我可能正在犯一些愚蠢的错误,但是正如我告诉我的那样,我正在这个世界上起步,我担心我可能会错误地理解一些概念。你们有没有看到我可能在做的任何错误?我应该在这里添加更多信息吗?