CornerNet icon indicating copy to clipboard operation
CornerNet copied to clipboard

pool梯度的反向传播,逻辑是不是理解错了,感觉和原版的不太一样

Open arcral opened this issue 5 years ago • 8 comments

arcral avatar Apr 26 '19 09:04 arcral

这个我是按照论文描述的来写的,你有什么见解吗?可以交流一下

------------------ 原始邮件 ------------------ 发件人: "xujiao3628"[email protected]; 发送时间: 2019年4月26日(星期五) 下午5:28 收件人: "makalo/CornerNet"[email protected]; 抄送: "Subscribed"[email protected]; 主题: [makalo/CornerNet] pool梯度的反向传播,逻辑是不是理解错了,感觉和原版的不太一样 (#14)

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or mute the thread.

makalo avatar Apr 26 '19 09:04 makalo

我看的pytorch源码实现,反向传播的时候,梯度的值需要散落(scatter)到输入最大值的索引位置(和前向的逻辑一致),这样散落之后,梯度的值只会传播到有限的几个位置,并且会叠加(因为最大值只有有限几个)。而你的实现,是直接计算了梯度的一个mask,梯度原位传播(没有传播到索引最大位置) 其实原理和max pool有一点类似,即梯度传递到输入最大值的位置

arcral avatar May 05 '19 07:05 arcral

mask为1的地方,就是最大索引的地方。不过确实只是计算了最大值的那个位置上的梯度,没有把非最大值部分叠加到最大值部分上去。这个地方要把非最大值部分的梯度叠加到最大值位置去,后面还要改一下。多谢指教,如不介意,微信交流wl1647855685

------------------ 原始邮件 ------------------ 发件人: "xujiao3628"[email protected]; 发送时间: 2019年5月5日(星期天) 下午3:22 收件人: "makalo/CornerNet"[email protected]; 抄送: "Makalo"[email protected]; "Comment"[email protected]; 主题: Re: [makalo/CornerNet] pool梯度的反向传播,逻辑是不是理解错了,感觉和原版的不太一样 (#14)

我看的pytorch源码实现,反向传播的时候,梯度的值需要散落(scatter)到输入最大值的索引位置(和前向的逻辑一致),这样散落之后,梯度的值只会传播到有限的几个位置,并且会叠加(因为最大值只有有限几个)。而你的实现,是直接计算了梯度的一个mask,梯度原位传播(没有传播到索引最大位置) 其实原理和max pool有一点类似,即梯度传递到输入最大值的位置

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or mute the thread.

makalo avatar May 05 '19 09:05 makalo

之前写CornerPool用了一个更脏的手法,直接边上填Batch最小,然后Maxpool。这样就没问题了。 https://tensorlayer.readthedocs.io/en/2.0.0/_modules/tensorlayer/layers/pooling.html#CornerPool2d

Windaway avatar May 06 '19 09:05 Windaway

@arcral 我也在尝试读懂pytorch 的源码,但是其中的一些函数很能找到定义,比如at::gt_out,at::masked_select_out, 请问您是在哪里找到函数的作用的,我在官方文档中没有找到定义。

caiya55 avatar Jun 17 '19 09:06 caiya55

Did anyone manage to build a correct implementation of corner pooling ?

The provided corner pooling doesn't work as the one in the official pytorch repository. It doesn't give the same output, given the same input.

UmarSpa avatar Dec 17 '19 15:12 UmarSpa

@arcral 我也在尝试读懂pytorch 的源码,但是其中的一些函数很能找到定义,比如at::gt_out,at::masked_select_out, 请问您是在哪里找到函数的作用的,我在官方文档中没有找到定义。

I have the same confusion.

SWHL avatar Jan 02 '20 01:01 SWHL

mask为1的地方,就是最大索引的地方。不过确实只是计算了最大值的那个位置上的梯度,没有把非最大值部分叠加到最大值部分上去。这个地方要把非最大值部分的梯度叠加到最大值位置去,后面还要改一下。多谢指教,如不介意,微信交流wl1647855685 ------------------ 原始邮件 ------------------ 发件人: "xujiao3628"[email protected]; 发送时间: 2019年5月5日(星期天) 下午3:22 收件人: "makalo/CornerNet"[email protected]; 抄送: "Makalo"[email protected]; "Comment"[email protected]; 主题: Re: [makalo/CornerNet] pool梯度的反向传播,逻辑是不是理解错了,感觉和原版的不太一样 (#14) 我看的pytorch源码实现,反向传播的时候,梯度的值需要散落(scatter)到输入最大值的索引位置(和前向的逻辑一致),这样散落之后,梯度的值只会传播到有限的几个位置,并且会叠加(因为最大值只有有限几个)。而你的实现,是直接计算了梯度的一个mask,梯度原位传播(没有传播到索引最大位置) 其实原理和max pool有一点类似,即梯度传递到输入最大值的位置 — You are receiving this because you commented. Reply to this email directly, view it on GitHub, or mute the thread.

请问mask是表达的什么

ChrisWang10 avatar Feb 04 '21 12:02 ChrisWang10