CornerNet
CornerNet copied to clipboard
pool梯度的反向传播,逻辑是不是理解错了,感觉和原版的不太一样
这个我是按照论文描述的来写的,你有什么见解吗?可以交流一下
------------------ 原始邮件 ------------------ 发件人: "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.
我看的pytorch源码实现,反向传播的时候,梯度的值需要散落(scatter)到输入最大值的索引位置(和前向的逻辑一致),这样散落之后,梯度的值只会传播到有限的几个位置,并且会叠加(因为最大值只有有限几个)。而你的实现,是直接计算了梯度的一个mask,梯度原位传播(没有传播到索引最大位置) 其实原理和max pool有一点类似,即梯度传递到输入最大值的位置
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.
之前写CornerPool用了一个更脏的手法,直接边上填Batch最小,然后Maxpool。这样就没问题了。 https://tensorlayer.readthedocs.io/en/2.0.0/_modules/tensorlayer/layers/pooling.html#CornerPool2d
@arcral 我也在尝试读懂pytorch 的源码,但是其中的一些函数很能找到定义,比如at::gt_out,at::masked_select_out, 请问您是在哪里找到函数的作用的,我在官方文档中没有找到定义。
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.
@arcral 我也在尝试读懂pytorch 的源码,但是其中的一些函数很能找到定义,比如at::gt_out,at::masked_select_out, 请问您是在哪里找到函数的作用的,我在官方文档中没有找到定义。
I have the same confusion.
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是表达的什么