我正在阅读有关对抗性图像和破坏神经网络的信息。我正在尝试逐步完成这篇文章,但由于我缺乏经验,我很难理解以下说明。
目前,我有一个MNIST
数据集的逻辑回归模型。如果你给出一个图像,它会预测它最有可能是的数字......
saver.restore(sess, "/tmp/model.ckpt")
# image of number 7
x_in = np.expand_dims(mnist.test.images[0], axis=0)
classification = sess.run(tf.argmax(pred, 1), feed_dict={x:x_in})
print(classification)
现在,文章指出,为了打破这张图片,我们需要做的第一件事就是获取神经网络的梯度。换句话说,这将告诉我使图像看起来更像数字 2 或 3 所需的方向,即使它是 7。
文章指出,使用back propagation
. 所以你可以定义一个函数......
compute_gradient(image, intended_label)
...这基本上告诉我们当时神经网络正在寻找什么样的形状。
对于那些更有经验的人来说,这似乎很容易实现,但逻辑却让我回避了。
从函数的参数中compute_gradient
,我可以看到您向它提供了一个图像和一个标签数组,其中预期标签的值设置为 1。
但我不明白这应该如何返回神经网络的形状。
无论如何,我想了解我应该如何实现这个back propagation
算法来返回神经网络的梯度。如果答案不是很直截了当,我想要一些分步说明,了解如何让我back propagation
按照文章建议的方式工作。
换句话说,我不需要有人给我一些我可以复制的代码,但我也想了解如何实现它。