计算机视觉学习分享

【Pytorch基础】BatchNorm常识梳理与使用

2021-05-29  本文已影响0人  pprpp

BatchNorm, 批规范化,主要用于解决协方差偏移问题,主要分三部分:

算法内容如下:

图源https://blog.csdn.net/LoseInVain/article/details/86476010

需要说明几点:

image

以BatchNorm2d为例,分析其中变量和参数的意义:

class _NormBase(Module):
    """Common base of _InstanceNorm and _BatchNorm"""
    _version = 2
    __constants__ = ['track_running_stats', 'momentum', 'eps',
                     'num_features', 'affine']

    def __init__(self, num_features, eps=1e-5, momentum=0.1, affine=True,
                 track_running_stats=True):
        super(_NormBase, self).__init__()
        self.num_features = num_features
        self.eps = eps
        self.momentum = momentum
        self.affine = affine
        self.track_running_stats = track_running_stats
        if self.affine:
            self.weight = Parameter(torch.Tensor(num_features))
            self.bias = Parameter(torch.Tensor(num_features))
        else:
            self.register_parameter('weight', None)
            self.register_parameter('bias', None)
        if self.track_running_stats:
            self.register_buffer('running_mean', torch.zeros(num_features))
            self.register_buffer('running_var', torch.ones(num_features))
            self.register_buffer('num_batches_tracked', torch.tensor(0, dtype=torch.long))
        else:
            self.register_parameter('running_mean', None)
            self.register_parameter('running_var', None)
            self.register_parameter('num_batches_tracked', None)
        self.reset_parameters()

training和tracking_running_stats有四种组合:

更新过程:

参考文献:

https://blog.csdn.net/LoseInVain/article/details/86476010

https://blog.csdn.net/yangwangnndd/article/details/94901175

上一篇下一篇

猜你喜欢

热点阅读