【问题标题】:Tensorflow unpooling operation using _max_pool_gradient使用 _max_pool_gradient 的 TensorFlow 反池化操作
【发布时间】: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


【解决方案1】:

TensorFlow 支持这种操作,但它们的级别有点低。特别是 tf.gradients(...) 可以让您访问计算偏导数。您所要做的就是指定应该区分的张量以及应该用于区分的张量,因此它可以有效地产生d ys / d xs。此外,您提供grad_ys,这是它们将被“附加”的位置(因为最初它旨在使用链式规则生成渐变,并且 TF 是仅附加的,因此您以后无法连接渐变)。

【讨论】:

    猜你喜欢
    • 2019-04-22
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多