max pooling 当有多个最大值时,索引应该是啥?

Posted

技术标签:

【中文标题】max pooling 当有多个最大值时,索引应该是啥?【英文标题】:maxpooling what should the indices be when there're multiple max values?max pooling 当有多个最大值时,索引应该是什么? 【发布时间】:2021-11-28 10:19:38 【问题描述】:

当内核中有多个等于最大值的值时该怎么办?例如,对于这些值:

array([[0., 0.],
       [0., 0.]])

最大值只是 0。最大索引应该是什么样的? all 出现最大值是否应该是 True:

array([[ True,  True],
       [ True,  True]])

或最大值的第一次出现:

array([[ True, False],
       [False, False]])

Pytorch 使用第一次出现的最大值,而一些 source 使用另一个(他使用 pos = np.where(result == view, 1, 0),它基本上记录了所有出现的最大值)。

编辑:对于前向 prop 没关系,但是在反向传播的时候,比如上游的梯度是[[1,1],[1,1]],那么当前节点的梯度会不一样:[[1,1],[1,1]] (所有出现)vs [[1,0],[0,0]](第一次出现)

【问题讨论】:

【参考方案1】:

即使在一次反向传播之后,内核值也不太可能保持相等。所以这应该不是一个真正的问题,不是吗?

【讨论】:

是的,这是有道理的。只是我将我的结果与 pytorch 进行比较,但它们不匹配。我花了很长时间才找到这个问题:) 所以最终这是一个设计决定。

以上是关于max pooling 当有多个最大值时,索引应该是啥?的主要内容,如果未能解决你的问题,请参考以下文章

进程池Pool

进程池

PyTorch 的 Pooling 和 UnPooling函数中的 indices 参数:nn.MaxPool2d/nn.MaxUnpool2dF.max_pool2d/F.max_unpool2d

Pythn 使用进程池Pool进行并发编程

Max-pooling VS Sum-pooling

tensorflow max_pool(最大池化)应用