繁体   English   中英

了解tf.gradients如何评估

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM