一、坑
Keras采用self.kernel = (self.kernelself*it_weights)这种方式可以运算,Paddle中采用这种方式会影响梯度回传。
二、解决过程:
在GitHub上就这个问题 loss.backward() RuntimeError 提了 Issue #38062 ,
(1)百度同学帮忙检查后发现,运行时先报这个信息:
RuntimeError: (NotFound) Inputs and outputs of reshape2_grad do not exist. This may be because:
1. You use some output variables of the previous batch as the inputs of the current batch. Please try to call "stop_gradient = True" or "detach()" for these variables.
2. You calculate backward twice for the same subgraph without setting retain_graph=True. Please set retain_graph=True in the first backward call.
[Hint: Expected ins_.empty() && outs_.empty() != true, but received ins_.empty() && outs_.empty():1 == true:1.] (at /paddle/paddle/fluid/imperative/op_base.h:164)
(2)再次执行时,才报:
RuntimeError: (AlreadyExists) Accumulators are not empty before preparing it for backward network execution.
[Hint: Expected accumulators_.empty() == true, but received accumulators_.empty():0 != true:1.] (at /paddle/paddle/fluid/imperative/basic_engine.cc:55)
(3)百度同学给出的建议:
后续的测试报错应该不是真正的报错,只是测试不是一个干净的 paddle 环境导致的。建议先排查一下模型,可以根据上述第一个报错,试着逐渐增加模型的复杂度试试。
我这边做了如下修改之后可以正常训练,但是不一定是您需要的。
loss.backward(retain_graph=True)这样可正常训练。
(4)排查后发现前面提到的问题
self.kernel = (self.kernel*self.it_weights).reshape([64,64,-1,1]),改为k = (self.kernel*self.it_weights).reshape([64,64,-1,1])
就可以正常训练。
为百度同学的效率点个赞
兄弟,开源出来做基线呗?
项目已经开源了,跑起来没问题:
去除摩尔纹,治愈强迫症, 来卷网盘赛
https://aistudio.baidu.com/aistudio/projectdetail/3204731
欢迎来卷,哈哈哈哈哈
感谢大佬的baseline,我发现baseline里有两处问题:
1,dataset部分:以下操作对input_data和label的作用会有差别,会导致input_data或label中的一个翻转,而不是实际需要的同时翻转或同时不翻转
transforms.RandomHorizontalFlip()
2,mbcnn部分:以下代码块中,_t1_global_block的名字重复使用了,按照论文中,应分别命名为_t1_global_block1和_t1_global_block2
self._t1_conv_rl=conv_rl(self.nFilters*2+3,self.nFilters*2, 1)
self._t1_global_block = global_block(self.nFilters)
self._t1_pre_block = pre_block( d_list_a, self.nFilters,True)
self._t1_global_block = global_block(self.nFilters)
self._t1_pos_block = pos_block( d_list_a,self.nFilters)
self._t1_conv = conv(self.nFilters*2,12,3)
self.dts3=depth_to_space(scale_factor=2)
感谢发现的问题,我核对一下
确实存在问题,已修复,待测试后,会发一个新版本
已发布一个新版1.2,调了一下,榜评0.55623。
继续提点方法:
1.加大训练轮次;
2.大尺度训练,多尺度预测
已发布一个新版1.2,调了一下,榜评0.55623
继续提点方法:
1.加大训练轮次;
2.大尺度训练,多尺度预测
来卷吧
大佬,有个问题想请教,请问你知道怎样把别的框架的项目转成paddle的吗
我实了X2Paddle,报了很多unsupport,真的难受啊