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 当有多个最大值时,索引应该是啥?的主要内容,如果未能解决你的问题,请参考以下文章
PyTorch 的 Pooling 和 UnPooling函数中的 indices 参数:nn.MaxPool2d/nn.MaxUnpool2dF.max_pool2d/F.max_unpool2d