python - 了解 tf.gradients 如何评估

标签 python tensorflow machine-learning

我正在研究如何破坏线性分类器,但我无法理解tf.gradients

该项目的重点是建立一个模型并在 mnist 数据集上对其进行训练。一旦训练完成,我就会拍摄一张图像,稍微改变一下,然后将其反馈给模型。然而,当我反馈回来时,预测应该是不同的。例如,如果我有一张 2 的图像,并且希望模型预测 6,我会稍微更改图像,使图像看起来仍然像 2,但模型会认为它是 6。

这是如何完成的只是一个简单的方程式。我们对损失函数求导并取其符号并将其应用于乘以某个 epsilon 值的图像。例如,方程是这样的......

new image = image + (epsilon * sign of derivative of loss function)

令我困惑的部分是tf.gradients。我正在查看一个示例,但我很难理解它。

首先,提取编号为​​2的10张图像。接下来,创建代表标签 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 的标签。该导数的符号随后用于我上面演示的方程中.

我的问题是,tf.gradients 返回的到底是什么?为什么使用标签 6 而不是标签 2 来评估导数?我很难理解退回的是什么以及为什么使用假标签。我知道假标签可能是欺骗分类器所必需的,但很难看到这一点,因为我不明白 tf.gradients 返回的内容。

最佳答案

tf.gradient(ys, xs) 返回 ys 之和相对于 t 的符号偏导数。 x 中的 x。 在您的情况下,您正在定义 cross_entropy 相对于 x 的偏导数(并提取第一个(也是唯一的)元素,因为 tf.gradient 返回一个列表)。

相对于输入的成本梯度可以指示您需要更新多少网络参数以及在哪个方向上执行此更新,以便最大限度地降低成本。

因此,由于您想欺骗分类器,因此您需要计算具有不同标签的特定输入的梯度,以便找到您必须遵循的“指示”(或信号),以使网络考虑该输入6

关于python - 了解 tf.gradients 如何评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49603346/

相关文章:

python - BigQuery - 在分区内嵌套操作,以便聚合具有 170 亿条记录的表中的连续记录

python - 在不保存文件的情况下将excel数据上传到django

python - 如何比较python中的两个有序列表?

python-3.x - 在 Tensorflow 中计算张量的线性组合

tensorflow - 如何在训练后获得单个测试实例的嵌入表示

python - Keras LSTM 从 CSV "expected ndim=3, found ndim=2. Full shape received: (None, 150)"加载数据

r - 创建决策树

python - 如何在 kivy-python 中使用带多线程的时钟对象更新进度条?

python - 逻辑回归中的 Sigmoid(Tom Hope 的深度学习系统构建指南)

python - 是否可以在 Google TPU 上运行常规的 python 代码?