【发布时间】:2016-07-02 10:56:36
【问题描述】:
如描述的解池操作,例如在 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 操作的梯度,以便我可以使 _max_pool_gradient 工作?
【问题讨论】:
-
这里的参数 grad 应该只是转置池的输入。如果将操作用作转置池,则没有梯度的概念
-
@OlivierMoindrot 感谢您的评论。转置池到底是什么意思?我在这里读过:github.com/tensorflow/tensorflow/issues/2169,解池是由最大池操作的梯度给出的。所以我想我的问题是如何使 _max_pool_gradient 操作起作用。我究竟需要为参数 grad 提供什么?
标签: machine-learning neural-network tensorflow conv-neural-network