【问题标题】:How to compute gradients to implement deepfool using tensorflow 2.0如何计算梯度以使用 tensorflow 2.0 实现 deepfool
【发布时间】:2019-06-30 06:00:45
【问题描述】:

我正在使用 tensorflow 实现 deepfool,但我不知道如何计算梯度,所以希望您能帮我解决这个问题。 源代码文件在https://drive.google.com/drive/folders/1JEiIidq8sNi03aliHFaYEESjDu87O6Tv?usp=sharing

    with tf.GradientTape() as tape:
        tape.watch(x)
        fs = model(x)
        loss_value = loss_func(one_hot_label_0, fs)
    grad_orig = tape.gradient(fs[0, I[0]], x)

我已经多次更改了 tape.gradient() 的参数,但没用。

def loss_func(labels, logits):
        return tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits)

    while k_i == label and loop_i < max_iter:

        pert = np.inf

        one_hot_label_0 = tf.one_hot(label, num_classes)
        with tf.GradientTape() as tape:
            tape.watch(x)
            fs = model(x)
            loss_value = loss_func(one_hot_label_0, fs)
        grad_orig = tape.gradient(fs[0, I[0]], x)

        for k in range(1, num_classes):
            one_hot_label_k = tf.one_hot(I[k], num_classes)
            with tf.GradientTape() as tape:
                tape.watch(x)
                fs = model(x)
                loss_value = loss_func(one_hot_label_k, fs)
            cur_grad = tape.gradient(fs[0, I[k]], x)

【问题讨论】:

    标签: tensorflow2.0


    【解决方案1】:

    您能否详细说明为什么梯度计算不起作用?你有堆栈跟踪吗?

    Here's an example 作为 CleverHans 中快速梯度方法实现的一部分执行的梯度计算。您可能还想查看PGD implementation,它在 for 循环中调用了快速渐变方法。

    【讨论】:

      【解决方案2】:

      首先非常感谢“偶像”Nicolas,Merci beaucoup。这里我定义loss_func如下。

      def loss_func(logits, I, k): 
          # return tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits)
          return logits[0, I[k]]
      ... 
      loss_value = loss_func(fs, I, 0)
      grad_orig = tape.gradient(loss_value, x)
      

      然后我就可以正常计算梯度了。我有两个明显的发现,一个是攻击是依赖于模型的,因为不同的模型使用相同的图像得到不同的攻击样本;另一个是对 mnist 数据集的许多攻击是可以察觉的,因为大多数图像都发生了很大变化,但我确实发现了论文中报告的几乎没有变化的样本。但是,我不确定我所做的是否与 deepfool 论文中的方式一样,尤其是渐变。

      【讨论】:

        猜你喜欢
        • 2019-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-27
        • 2018-06-28
        • 1970-01-01
        • 2022-01-04
        相关资源
        最近更新 更多