在训练的时候BN层的梯度过高 甚至为INF
Created by: Costwen
1)PaddlePaddle版本:1.8.4
2)CPU/GPU:GPU
3)系统环境:AI Studio
class ReLU(nn.Layer):
def __init__(self):
super(ReLU, self).__init__()
def forward(self, x):
x = fluid.layers.relu(x)
return x
class RRB(nn.Layer):
def __init__(self,inplanes,planes,interplanes=512):
super(RRB,self).__init__()
self.conv1 = nn.Conv2D(inplanes,planes,1)
self.conv2 = nn.Sequential(
nn.Conv2D(planes,interplanes,3,padding=1),
nn.BatchNorm(planes),
ReLU(),
nn.Conv2D(interplanes,planes,3,padding=1))
self.relu = ReLU()
def forward(self, x):
out = self.conv1(x)
out1 = self.conv2(out)
return self.relu(out+out1)
在复现DFN论文的时候,发现在BN层处的梯度过高,第一轮就达到了上万,第二轮直接为INF,是否是因为使用了自定义的Relu层的原因,导致在计算梯度的时候发生错误。如果是,我该如何定义呢?