解池操作如所描述的,例如在 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 工作吗?
最佳答案
TensorFlow 支持这种类型的操作,但它们的级别要低一些。特别是有tf.gradients(...)这使您可以计算偏导数。您所要做的就是指定应该微分的张量以及应该用于微分的张量,因此它可以有效地生成 d ys / d xs
。此外,您还提供grad_ys
这是它们将被“附加”的地方(因为最初它被设计为使用链规则生成渐变,而 TF 是仅附加的,因此您以后无法连接渐变)。
关于machine-learning - 使用 _max_pool_gradient 的 Tensorflow 反池化操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38159352/