This a function about fuse torch.nn.BatchNorm2d by myself 
import torch.nn as nn

class FuseBN(nn.Module):
    def __init__(self, layer):
        super().__init__()
        eps = layer.eps
        mean = layer.running_mean
        var = layer.running_var
        weight = layer.weight
        bias = layer.bias

        bias = bias - (weight*mean)/torch.sqrt(var + eps)
        weight = weight / torch.sqrt(var + eps)
        
        self.weight  = weight.reshape(1, -1, 1, 1)
        self.bias = bias.reshape(1, -1, 1, 1)
       
    def forward(self, x):
        out = self.weight * x + self.bias
        return out

When I try to compare the results of BN and FuseBN
import torch
import torch.nn as nn

data = torch.randn(1, 3, 224, 224)
bn = nn.BatchNorm2d(3)
fuse_bn = FuseBN(bn)

bn_result = bn(data)
fuse_bn_result = fuse_bn(data)

compare_value = torch.max(torch.abs(bn_result - fuse_bn_result))

In theory, the difference should be about 1e-5， but I get the compare_value is 0.143. 
I don’t know, why? please help me, thanks a lot.