报错信息:
这个错误是由于需要梯度反传的tensor在前传和反传时值不一样。
最常见的错误是由于x+=1这种写法,改成x=x+1
博主自查后发现是因为:
P2_mid_conv,_ = self.downsample2_3(laterals[2],fpn_masks[2])
laterals[3] = self.CA(P2_mid_conv) * laterals[3] + laterals[3]
GPT给出的回答:
这段代码中的“原地操作”错误可能是由于laterals[4]
在创建后被修改,而之后它的值在计算梯度时又被使用,从而导致PyTorch无法正确地计算梯度。为了避免这种情况,你应该避免在使用张量的值计算其他的一些值之后,再去修改这个张量的值。
修改后:
P2_mid_conv,_ = self.downsample2_3(laterals[2].clone(),fpn_masks[2])
P3_mid = self.CA(P2_mid_conv) * laterals[3].clone() + laterals[3].clone()
laterals[3] = P3_mid.clone()
定义中间变量、clone()创建副本……解决错误。