使用_max_pool_gradient进行Tensorflow解除操作

时间:2016-07-02 10:56:37

标签: machine-learning neural-network tensorflow conv-neural-network

如所述的解开操作,例如在Zeiler 2014中:https://arxiv.org/abs/1311.2901,相当于最大池操作的梯度。

在tensorflow中你可以例如使用gen_nn_ops._max_pool_gradient来做到这一点,该函数将参数grad作为输入,在文档中说:

grad: A `Tensor`. Must have the same type as `orig_input`.
        4-D.  Gradients w.r.t. the output of `max_pool`

我尝试使用优化器的compute_gradients()函数计算最大池操作的梯度,但是那些需要一个可以采用渐变的变量列表,但是在最大池操作的情况下,你会对于池化层的输入采用渐变,因此如果compute_gradients()的varlist参数是张量,则它不起作用。

有人可以告诉我如何获取max_pool op的渐变,以便我可以使_max_pool_gradient工作吗?

1 个答案:

答案 0 :(得分:1)

TensorFlow支持这种操作,但它们的级别更低。特别是tf.gradients(...),您可以访问计算偏导数。您所要做的就是指定应该被区分的张量,这些张量应该用于区分,因此它可以有效地生成d ys / d xs。此外,您提供grad_ys,这是他们将被附加的地方。 (原来它设计用于使用链规则生成渐变,而TF仅附加,因此您以后无法连接渐变)。