Batch Normalization

简单来说就是经过 Batch Normalization(批量归一化)处理的数据(处理的这个批次总体)服从均值为0,方差为1。

作用:

  1. 加速训练:由于减少了梯度消失或爆炸的问题,Batch Normalization可以加速深度网络的训练过程。

  2. 减少对初始化的敏感性:Batch Normalization降低了对网络权重初始化的依赖,使得即使使用随机初始化,网络也能较好地工作。

  3. 轻微的正则化效果:由于Batch Normalization在训练和推理时使用不同的统计量(训练时使用小批量统计量,推理时使用全局统计量),它引入了轻微的正则化效果,有助于减少过拟合。在某些情况下可以替代dropout

  4. 允许更高的学习率:归一化的效果使得网络对于学习率的微小变化更加鲁棒,因此可以使用更高的学习率,进一步加速训练过程。

注意点:

  1. 依赖于批次大小:Batch Normalization的效果依赖于批次的大小,太小的批次可能导致统计估计不准确。

  2. 计算开销:Batch Normalization会增加一些计算开销,因为它需要计算和存储每个小批量的均值和方差,以及更新全局均值和方差。

  3. 可能需要调整网络结构:在某些情况下,使用Batch Normalization可能需要对网络结构进行微调,比如调整激活函数或网络层的深度。

另外:

引入可学习参数:Batch Normalization层引入了额外的可学习参数(γ和β),这为模型提供了更多的灵活性,但也增加了模型的参数数量。

计算公式:

γ(scale)参数:这个参数用于控制BN层输出的方差。它是一个可学习的参数,通常初始化为1,意味着在开始时不对数据的方差进行缩放

β(shift)参数:这个参数用于控制BN层输出的均值。它也是一个可学习的参数,通常初始化为0,意味着在开始时不对数据的均值进行平移

pytorch中,可以通过affine参数来决定是否需要学习γ和β。如果affine=True(默认值),则γ和β会被初始化并学习;如果affine=False,则γ会被设置为1,β会被设置为0,且它们不会在训练过程中更新。

实例:

import torch
import torch.nn as nn
from scrapy.core.downloader.handlers.http11 import tunnel_request_data
from sympy import false


class SimpleNet(nn.Module):
    def __init__(self):
        super(SimpleNet, self).__init__()
        self.fc1 = nn.Linear(3, 2)  # 一个简单的全连接层
        self.bn1 = nn.BatchNorm1d(2,affine=True)  # 对应的Batch Normalization层

    def forward(self, x):
        x = self.bn1(self.fc1(x))  # 先全连接,然后Batch Normalization
        return x

net = SimpleNet()
input_data = torch.randn(5, 3)  # 例如,这里批次大小为5
print(input_data)
output = net(input_data)
print(output)

输出:

#输入

tensor([[-0.6967, -1.5696,  0.7364],
        [ 2.5387,  1.4016, -0.5481],
        [-0.4291,  0.6605,  0.0703],
        [ 0.4796,  1.0505,  0.3659],
        [-0.2556, -1.0072, -1.2100]])

#输出:简单理解就是每一列服从均值为0,方差为1,注意批次小效果差
tensor([[ 0.0987, -1.7580],
        [ 1.5916,  1.3214],
        [-0.7358,  0.1952],
        [ 0.3771,  0.3398],
        [-1.3316, -0.0983]], grad_fn=<NativeBatchNormBackward0>)

详解:Batch Normalization详解以及pytorch实验_pytorch batch normalization-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值