【发布时间】:2016-11-01 19:45:24
【问题描述】:
假设我们有一个经过训练的卷积神经网络,可以在 Tensor-Flow 中对图像进行分类(w.l.o.g. 灰度)。
给定经过训练的网络和测试图像,我们可以追踪其中哪些像素是显着的,或者“等效地”哪些像素对图像的输出分类负有最大责任。这个article 给出了Theano 中的一个很好的解释和实现细节。
假设对于与输入图像直接相关的第一层卷积,我们确实有每个卷积核参数的梯度。分类功能。
如何将梯度传播回输入层,从而计算图像每个像素的偏导数?
向回传播和累积梯度,将为我们提供显着像素(它们是那些具有较大量导数的像素)。
-
找到梯度wrt。第一层的内核,到目前为止我做到了:
- 将通常的损失算子替换为输出层算子。
- 使用了“compute_gradient”函数,
总而言之,它看起来像:
- opt = tf.train.GradientDescentOptimizer(1)
- grads = opt.compute_gradients(输出)
- grad_var = [(grad1) for grads]
- g1 = sess.run([grad_var[0]])
其中,“输出”是神经网络输出层的最大值。 g1, 是 (k, k, 1, M) 张量,因为我在第一层使用了 M: k x k 卷积核。
现在,我需要找到在每个输入像素上传播 g1 的正确方法,以计算它们的导数 wrt。输出。
【问题讨论】:
标签: classification tensorflow gradient