Open
Description
您好!我在做RM的时候发现,conv输出进入BN输出有精度问题?
idconv1 = nn.Conv2d(self.in_planes, self.in_planes+self.mid_planes, kernel_size=3, stride=1, padding=1, bias=False).eval()
idbn1 = nn.BatchNorm2d(self.in_planes+self.mid_planes).eval()
# init dirac_ kernel weight, bias, mean var to idconv1
nn.init.dirac_(idconv1.weight.data[:self.in_planes])
bn_var_sqrt1 = torch.sqrt(self.running1.running_var + self.running1.eps)
idbn1.weight.data[:self.in_planes] = bn_var_sqrt1
idbn1.bias.data[:self.in_planes] = self.running1.running_mean
idbn1.running_mean.data[:self.in_planes] = self.running1.running_mean
idbn1.running_var.data[:self.in_planes] = self.running1.running_var
# init conv1 to idconv1
idconv1.weight.data[self.in_planes:] = self.conv1.weight.data
idbn1.weight.data[self.in_planes:] = self.bn1.weight.data
idbn1.bias.data[self.in_planes:] = self.bn1.bias.data
idbn1.running_mean.data[self.in_planes:] = self.bn1.running_mean
idbn1.running_var.data[self.in_planes:] = self.bn1.running_var
左边三conv2d输出结果,右边三batchnorm2d输出结果,其中conv2d输出为0的值在batchnorm2d中输出成一个很小的值(1.6642e-08),请问这是什么原因造成的?如何修改代码消除这种现象。
Metadata
Metadata
Assignees
Labels
No labels