代码之家  ›  专栏  ›  技术社区  ›  buydadip

了解tf的工作原理。渐变计算

  •  0
  • buydadip  · 技术社区  · 7 年前

    我正在研究如何打破线性分类器,但我很难理解 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。渐变色 正在返回。

    1 回复  |  直到 7 年前
        1
  •  1
  •   nessuno    7 年前

    tf.gradient(ys, xs) 返回xs中ys w.r.t.x之和的符号偏导数。 在你的例子中,你定义了 cross_entropy 关于 x (并提取第一个(也是唯一一个)元素,因为 tf.gradient 返回列表)。

    相对于输入的成本梯度可以指示您必须更新多少网络参数,以及在哪个方向执行此更新以将成本降至最低。

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