我正在研究如何打破线性分类器,但我很难理解
tf.gradients
。
该项目的重点是采用模型并在
mnist
数据集。训练完成后,我会拍摄一张图像,稍微改变一下,然后反馈给模型。然而,当我反馈时,预测应该是不同的。例如,如果我有一个2的图像,我希望模型预测6,我会稍微更改图像,使图像看起来仍然像2,但模型会认为它是6。
如何做到这一点是一个简单的方程式。我们取损失函数的导数,并取其符号,然后将其应用于乘以某个ε值的图像。例如,方程式是这样的。。。
new image = image + (epsilon * sign of derivative of loss function)
让我困惑的是
tf。渐变色
。我正在看一个例子,但我很难理解它。
首先,提取数字2的10幅图像。接下来,创建10个表示标签6的标签。因此标签如下所示。。。
[[0, 0, 0, 0, 0, 1, 0, 0, 0 ,0],
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
...etc...
然后是成本函数的导数(
cross_entropy
是成本函数)。。。
im_derivative = tf.gradients(cross_entropy, x)[0]
im_derivative = im_derivative.eval({x: x0,
y_: y_six,
keep_prob: 1.0})
x0
是2和
y_six
是表示数字6的标签。这个导数的符号然后用在我上面演示的方程中。
我的问题是
tf。渐变色
返回,为什么导数的评估标签是6而不是2?我很难理解被退回的是什么以及为什么使用假标签。我知道可能需要一个假标签来欺骗分类器,但很难看到这一点,因为我不明白是什么
tf。渐变色
正在返回。