为什么我的tf.gradients不应该返回[none]?

时间:2019-06-04 11:08:35

标签: python tensorflow machine-learning linear-gradients

我是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)

我可能正在犯一些愚蠢的错误,但是正如我告诉我的那样,我正在这个世界上起步,我担心我可能会错误地理解一些概念。你们有没有看到我可能在做的任何错误?我应该在这里添加更多信息吗?

0 个答案:

没有答案