💻 源码
"""
演示
    批量归一化,属于正则化方法,缓解 模型过拟合,主要用于CV计算机视觉,比如CNN网络

批量归一化:
    先标准化为均值0,方差1的分布,然后再进行重构(缩放+平移,缩放系数和平移系数都是可学习的),进一步提取特征

涉及到的API:
    CV计算机视觉领域
    BatchNorm2d: 处理4D数据,主要用于二维卷积神经网络Conv2d来处理图片数据,NCHW,(N,C,H,W), N批次大小,C通道数,H高度,W宽度
    BatchNorm1d: 处理2D/3D数据,主要用于处理文本数据/序列数据,NCS
    BatchNorm3d: 处理5D数据,主要用于三维卷积神经网络Conv3d,来处理高维的视觉数据,比如医学图像,卫星遥感视频,接收形状为 NCDHW/NCTHW 的张量作为输入。

需要掌握的:
    针对CV方向,BatchNorm2d

"""

# 导包
import torch
import torch.nn as nn

# 定义函数,演示 BatchNorm2d 批量归一化, 处理4D数据,NCHW
def demo01():
    # 1.创建数据,模拟NCHW图片数据 torch.randint(0,256,size=(2,3,32,32))
    x = torch.randint(0,256,size=(1,3,32,32)).to(dtype=torch.float32)
    print(f"原始数据x:{x}, shape: {x.shape}")
    # 2.创建BatchNorm2d层
    # running_mean = (1 - momentum) * running_mean + momentum * batch_mean
    # running_var = (1 - momentum) * running_var + momentum * batch_var
    bn2d = nn.BatchNorm2d(
        num_features=3, # 通道数,C
        eps=1e-05,  # 极小值,防止除零
        momentum=0.1,   # 动量,控制参数的更新
        affine=True,    # 缩放参数和平移参数是否可学习
    )

    # 3.输入数据到BatchNorm2d层中
    y = bn2d(x)   # (1,3,32,32)
    # 4.打印输出
    print(f"处理后的数据y:{y}, shape: {y.shape}")

# 测试
if __name__ == '__main__':
    demo01()