新手深入浅出理解PyTorch归一化层全解析

目录

torch.nn子模块normal层详解

nn.BatchNorm1d

BatchNorm1d 函数简介

函数工作原理

参数详解

使用技巧与注意事项

示例代码

nn.BatchNorm2d

BatchNorm2d 函数简介

函数工作原理

参数详解

使用技巧与注意事项

示例代码

 nn.BatchNorm3d

BatchNorm3d 函数简介

参数详解

使用技巧与注意事项

示例代码

nn.LazyBatchNorm1d

LazyBatchNorm1d 函数简介

函数工作原理

参数详解

使用技巧与注意事项

示例代码

nn.LazyBatchNorm2d

LazyBatchNorm2d 函数简介

函数工作原理

参数详解

使用技巧与注意事项

示例代码

nn.LazyBatchNorm3d

LazyBatchNorm3d 函数简介

函数工作原理

参数详解

使用技巧与注意事项

示例代码

nn.GroupNorm

GroupNorm 函数简介

函数工作原理

参数详解

使用技巧与注意事项

示例代码

nn.SyncBatchNorm

SyncBatchNorm 函数简介

函数工作原理

参数详解

使用技巧与注意事项

示例代码

nn.InstanceNorm1d

InstanceNorm1d 函数简介

函数工作原理

参数详解

使用技巧与注意事项

示例代码

nn.InstanceNorm2d

InstanceNorm2d 函数简介

函数工作原理 

参数详解

使用技巧与注意事项

示例代码

nn.InstanceNorm3d

InstanceNorm3d 函数简介

参数详解

使用技巧与注意事项

示例代码

nn.LazyInstanceNorm1d

LazyInstanceNorm1d 函数简介

函数工作原理

参数详解

使用技巧与注意事项

示例代码

nn.LazyInstanceNorm2d

LazyInstanceNorm2d 函数简介

函数工作原理

参数详解

使用技巧与注意事项

示例代码

nn.LazyInstanceNorm3d

LazyInstanceNorm3d 函数简介

函数工作原理

参数详解

使用技巧与注意事项

示例代码

nn.LayerNorm

LayerNorm 函数简介

参数详解

使用技巧与注意事项

示例代码

nn.LocalResponseNorm

LocalResponseNorm 函数简介

函数工作原理

参数详解

使用技巧与注意事项

示例代码

总结


torch.nn子模块normal层详解

nn.BatchNorm1d

BatchNorm1d 函数简介
  • 用途BatchNorm1d(批量归一化)主要用于加速深度神经网络的训练,通过减少内部协变量偏移来实现。
函数工作原理
  • 定义BatchNorm1d 对于每个特征维度计算小批量(mini-batch)的均值和标准差,并使用这些统计量对数据进行归一化。
  • 数学表达式:对于输入 xBatchNorm1d 计算为y=\frac{x-E[x]}{\sqrt{Var[x]+\varepsilon }}*\gamma +\beta 其中 E[x] 是均值,Var[x] 是方差,\gamma\beta 是可学习的参数向量,\epsilon 是为了数值稳定性而加的小值。
参数详解
  • num_features(int):输入的特征或通道数 C
  • eps(float):为了数值稳定性加在分母上的小值,默认为 1e-5
  • momentum(float):用于计算 running_mean 和 running_var 的值。默认为 0.1。设为 None 可用于计算累积移动平均(即简单平均)。
  • affine(bool):若设置为 True,则此模块具有可学习的仿射参数。默认为 True。
  • track_running_stats(bool):若设置为 True,则此模块跟踪运行均值和方差;若为 False,则不跟踪,且初始化 running_mean 和 running_var 为 None。在这种情况下,模块总是使用批量统计量。默认为 True。
使用技巧与注意事项
  • 在训练和评估模式下的不同行为:在训练模式下,该层会计算并更新均值和方差的运行估计。在评估模式下,它会使用这些估计进行归一化。
  • 选择正确的 momentummomentum 参数对于运行统计量的更新非常重要,需要根据应用场景适当选择。
示例代码

下面是一个使用 BatchNorm1d 的示例代码:

import torch
import torch.nn as nn

# 带有可学习参数的 BatchNorm1d
m = nn.BatchNorm1d(100)

# 不带可学习参数的 BatchNorm1d
m_no_affine = nn.BatchNorm1d(100, affine=False)

# 创建输入张量
input_tensor = torch.randn(20, 100)

# 应用 BatchNorm1d
output = m(input_tensor)

print("Output with Learnable Parameters:", output)

 这段代码展示了如何初始化带有和不带有可学习参数的 BatchNorm1d 层,并对一个随机生成的输入张量应用该层。

nn.BatchNorm2d

BatchNorm2d 函数简介
  • 用途BatchNorm2d 用于对包含额外通道维度的二维输入的小批量(mini-batch)进行批量归一化。它主要用于加速深度网络训练,并减少内部协变量偏移。
函数工作原理
  • 定义:该函数对每个特征维度计算小批量的均值和标准差,并使用这些统计量对数据进行归一化。
  • 数学表达式:对于输入 xBatchNorm2d 计算为y=\frac{x-E[x]}{\sqrt{Var[x]+\varepsilon }}*\gamma +\beta 其中 E[x] 是均值,Var[x] 是方差,\gamma\beta 是可学习的参数向量,\epsilon 是一个小的常数,用于数值稳定性。
参数详解
  • num_features(int):期望输入的大小 (N, C, H, W) 中的 C,即通道数。
  • eps(float):用于数值稳定性的分母小值。默认为 1e-5
  • momentum(float):用于运行均值和方差计算的值。设置为 None 时表示使用累积移动平均(即简单平均)。默认为 0.1
  • affine(bool):当设置为 True 时,此模块具有可学习的仿射参数。默认为 True。
  • track_running_stats(bool):当设置为 True 时,此模块跟踪运行均值和方差;设置为 False 时,不跟踪这些统计量,并且将 running_mean 和 running_var 初始化为 None。在这种情况下,模块总是使用批量统计量。默认为 True。
使用技巧与注意事项
  • 训练与评估模式的不同:在训练模式下,该层会更新运行均值和方差的估计;在评估模式下,则使用这些估计进行归一化。
  • 适当选择 momentum:选择合适的 momentum 值对于运行统计量的准确性非常重要。
示例代码

下面是一个使用 BatchNorm2d 的示例代码:

import torch
import torch.nn as nn

# 带有可学习参数的 BatchNorm2d
m = nn.BatchNorm2d(100)

# 不带可学习参数的 BatchNorm2d
m_no_affine = nn.BatchNorm2d(100, affine=False)

# 创建输入张量
input_tensor = torch.randn(20, 100, 35, 45)

# 应用 BatchNorm2d
output = m(input_tensor)

print("Output with Learnable Parameters:", output)

这段代码展示了如何初始化带有和不带有可学习参数的 BatchNorm2d 层,并对一个随机生成的四维输入张量应用该层。

 nn.BatchNorm3d

BatchNorm3d 函数简介
  • 用途BatchNorm3d 主要用于加速深度神经网络的训练,并减少内部协变量偏移。它特别适用于处理具有深度、高度和宽度维度的数据,如视频或医学成像数据。
参数详解
  • num_features(int):期望输入的大小 (N, C, D, H, W) 中的 C,即通道数。
  • eps(float):用于数值稳定性的分母小值。默认为 1e-5
  • momentum(float):用于运行均值和方差计算的值。设置为 None 时表示使用累积移动平均(即简单平均)。默认为 0.1
  • affine(bool):当设置为 True 时,此模块具有可学习的仿射参数。默认为 True。
  • track_running_stats(bool):当设置为 True 时,此模块跟踪运行均值和方差;设置为 False 时,不跟踪这些统计量,并且将 running_mean 和 running_var 初始化为 None。在这种情况下,模块总是使用批量统计量。默认为 True。
使用技巧与注意事项
  • 训练与评估模式的不同:在训练模式下,该层会更新运行均值和方差的估计;在评估模式下,则使用这些估计进行归一化。
  • 适当选择 momentum:选择合适的 momentum 值对于运行统计量的准确性非常重要。
示例代码

下面是一个使用 BatchNorm3d 的示例代码:

import torch
import torch.nn as nn

# 带有可学习参数的 BatchNorm3d
m = nn.BatchNorm3d(100)

# 不带可学习参数的 BatchNorm3d
m_no_affine = nn.BatchNorm3d(100, affine=False)

# 创建输入张量
input_tensor = torch.randn(20, 100, 35, 45, 10)

# 应用 BatchNorm3d
output = m(input_tensor)

print("Output with Learnable Parameters:", output)

这段代码展示了如何初始化带有和不带有可学习参数的 BatchNorm3d 层,并对一个随机生成的五维输入张量应用该层。

nn.LazyBatchNorm1d

LazyBatchNorm1d 函数简介
  • 用途LazyBatchNorm1d 与标准的 BatchNorm1d 功能相似,但它在模型构建阶段不需要指定 num_features(特征数量)。这一点在处理动态或未知大小的输入特征时非常有用。
函数工作原理
  • 懒初始化:该模块会在接收到第一个输入数据时自动推断 num_features 的大小。在这之前,权重(weight)、偏差(bias)、运行均值(running_mean)和运行方差(running_var)等属性保持未初始化状态。
参数详解
  • eps(float):用于数值稳定性的分母小值。默认为 1e-5
  • momentum(float):用于运行均值和方差计算的值。设置为 None 时表示使用累积移动平均(即简单平均)。默认为 0.1
  • affine(bool):当设置为 True 时,此模块具有可学习的仿射参数。默认为 True。
  • track_running_stats(bool):当设置为 True 时,此模块跟踪运行均值和方差;设置为 False 时,不跟踪这些统计量,并且将 running_mean 和 running_var 初始化为 None。在这种情况下,模块总是使用批量统计量。默认为 True。
使用技巧与注意事项
  • 懒初始化的限制:懒初始化模块在模型的序列化和复制过程中可能有一些限制。建议在模型的最终版本中使用具体的 BatchNorm1d 模块,而不是懒初始化版本。
  • 适用场景:在模型构建时,如果输入特征的数量未知或可能发生变化,使用 LazyBatchNorm1d 可以提供更大的灵活性。
示例代码

下面是一个使用 LazyBatchNorm1d 的示例代码:

import torch
import torch.nn as nn

# 创建 LazyBatchNorm1d 层
m = nn.LazyBatchNorm1d()

# 创建输入张量(特征数量未指定)
input_tensor = torch.randn(20, 100)

# 应用 LazyBatchNorm1d
output = m(input_tensor)

print("Output:", output)

在这个示例中,LazyBatchNorm1d 在接收到输入张量后自动推断特征数量,并初始化相关的参数。

nn.LazyBatchNorm2d

LazyBatchNorm2d 函数简介
  • 用途LazyBatchNorm2d 类似于标准的 BatchNorm2d,但它可以在模型构建阶段自动推断 num_features 参数(即输入通道数)。这对于处理动态或未知大小的输入特别有用。
函数工作原理
  • 懒初始化:在接收到第一个输入数据时,LazyBatchNorm2d 自动推断 num_features 的大小。在此之前,权重(weight)、偏差(bias)、运行均值(running_mean)和运行方差(running_var)等属性保持未初始化状态。
参数详解
  • eps(float):用于数值稳定性的分母小值。默认为 1e-5
  • momentum(float):用于运行均值和方差计算的值。设置为 None 时表示使用累积移动平均(即简单平均)。默认为 0.1
  • affine(bool):当设置为 True 时,此模块具有可学习的仿射参数。默认为 True。
  • track_running_stats(bool):当设置为 True 时,此模块跟踪运行均值和方差;设置为 False 时,不跟踪这些统计量,并且将 running_mean 和 running_var 初始化为 None。在这种情况下
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

E寻数据

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值