[英]Understanding how tf.gradients evaluates
我正在研究如何破坏线性分类器,但是在理解tf.gradients
遇到了麻烦。
该项目的重点是建立模型并将其训练在mnist
数据集上。 训练完成后,我将拍摄一张图像,对其稍作更改,然后将其反馈给模型。 但是,当我反馈它时,预测应该有所不同。 例如,如果我的图像为2,并且我希望模型预测为6,则我将略微更改图像,以使图像看起来仍然像2,但是模型会将其视为6。
如何做到这一点很简单。 我们取损失函数的导数,取它的正负号,并将其应用到乘以某些ε值的图像上。 例如,方程式是这样的...
new image = image + (epsilon * sign of derivative of loss function)
让我tf.gradients
困惑的部分是tf.gradients
。 我正在看一个示例,但是我很难理解它。
首先,提取10张数字为2的图像。 接下来,创建代表标签6的10个标签。因此,标签如下所示...
[[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的10张图像, y_six
是表示数字6的标签。该导数的符号然后用在上面展示的方程式I中。
我的问题是,返回的tf.gradients
到底是什么?为什么要使用6而不是2来评估导数? 我很难理解返回的内容以及为何使用假标签。 我知道伪造标签可能是欺骗分类器的必要条件,但由于我不了解tf.gradients
返回的内容,因此很难看到这一点。
tf.gradient(ys, xs)
返回tf.gradient(ys, xs)
中ys wrt x的和的符号偏导数。 在您的情况下,您要相对于x
定义cross_entropy
的偏导数(并提取第一个(也是唯一的)元素,因为tf.gradient
返回一个列表)。
成本相对于输入的梯度可指示您必须更新多少网络参数,以及在哪个方向上执行此更新以最小化成本。
因此,由于要欺骗分类器,因此需要使用不同的标签来计算特定输入的梯度,为了找到“指示”(或信号),必须遵循该指示才能使网络将输入视为6
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.