Paddle [论文复现]多次用切片方式修改tensor内容会导致反向传播梯度为0

o75abkj4  于 2021-11-30  发布在  Java
关注(0)|答案(2)|浏览(547)

1)PaddlePaddle版本:2.1.2及开发版本
2)GPU:任意版本
4)系统环境:任意环境

  • 训练信息

   1)无论单机、多机
   2)显存多少无关

  • 复现信息:100%复现
  • 问题描述:多次用切片方式修改tensor内容会导致反向传播梯度为0

比如yolox_head中的以下两个操作:
output[:, :, :2] = (output[:, :, :2] + grid) * stride
output[:, :, 2:4] = paddle.exp(output[:, :, 2:4]) * stride
单独执行任一个都不会有问题,但是两个一起操作就会导致反向传播梯度为0
改成以下方式,反向传播梯度正常:
xy = (output[:, :, :2] + grid) * stride
wh = paddle.exp(output[:, :, 2:4]) * stride
obj_cls = output[:, :, 4:]
output=paddle.concat([xy, wh, obj_cls], 2)

anhgbhbe

anhgbhbe1#

您好,我们已经收到了您的问题,会安排技术人员尽快解答您的问题,请耐心等待。请您再次检查是否提供了清晰的问题描述、复现代码、环境&版本、报错信息等。同时,您也可以通过查看官网API文档常见问题历史IssueAI社区来寻求解答。祝您生活愉快~

Hi! We've received your issue and please be patient to get responded. We will arrange technicians to answer your questions as soon as possible. Please make sure that you have posted enough message to demo your request. You may also check out the APIFAQGithub Issue and AI community to get the answer.Have a nice day!

w8ntj3qf

w8ntj3qf2#

这是由于output[:, :, :2] =value这种调用了set_value_op,这个op会发生梯度截断,梯度没办法传回output,修复这个问题的pr已经提交,在随后的版本会修复这个问题,但在2.1.2这个问题仍然存在。感谢您的宝贵意见。

相关问题