目录
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 函数简介
函数工作原理
参数详解
使用技巧与注意事项
示例代码
总结
BatchNorm1d
(批量归一化)主要用于加速深度神经网络的训练,通过减少内部协变量偏移来实现。BatchNorm1d
对于每个特征维度计算小批量(mini-batch)的均值和标准差,并使用这些统计量对数据进行归一化。x
,BatchNorm1d
计算为 其中 E[x]
是均值,Var[x]
是方差, 和 是可学习的参数向量, 是为了数值稳定性而加的小值。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。momentum
:momentum
参数对于运行统计量的更新非常重要,需要根据应用场景适当选择。下面是一个使用 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
层,并对一个随机生成的输入张量应用该层。
BatchNorm2d
用于对包含额外通道维度的二维输入的小批量(mini-batch)进行批量归一化。它主要用于加速深度网络训练,并减少内部协变量偏移。x
,BatchNorm2d
计算为 其中 E[x]
是均值,Var[x]
是方差, 和 是可学习的参数向量, 是一个小的常数,用于数值稳定性。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
层,并对一个随机生成的四维输入张量应用该层。
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
层,并对一个随机生成的五维输入张量应用该层。
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
在接收到输入张量后自动推断特征数量,并初始化相关的参数。
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。在这种情况下,模块总是使用批量统计量。默认为 True。BatchNorm2d
模块,而不是懒初始化版本。LazyBatchNorm2d
可以提供更大的灵活性。下面是一个使用 LazyBatchNorm2d
的示例代码:
import torch
import torch.nn as nn
# 创建 LazyBatchNorm2d 层
m = nn.LazyBatchNorm2d()
# 创建输入张量(通道数量未指定)
input_tensor = torch.randn(20, 100, 35, 45)
# 应用 LazyBatchNorm2d
output = m(input_tensor)
print("Output:", output)
在这个示例中,LazyBatchNorm2d
在接收到输入张量后自动推断通道数量,并初始化相关的参数。
LazyBatchNorm3d
类似于标准的 BatchNorm3d
,但它能够在模型构建阶段自动推断 num_features
参数(即输入通道数)。这在处理动态或未知大小的输入时特别有用。LazyBatchNorm3d
自动推断 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。BatchNorm3d
模块,而不是懒初始化版本。LazyBatchNorm3d
可以提供更大的灵活性。下面是一个使用 LazyBatchNorm3d
的示例代码:
import torch
import torch.nn as nn
# 创建 LazyBatchNorm3d 层
m = nn.LazyBatchNorm3d()
# 创建输入张量(通道数量未指定)
input_tensor = torch.randn(20, 100, 10, 35, 45)
# 应用 LazyBatchNorm3d
output = m(input_tensor)
print("Output:", output)
在这个示例中,LazyBatchNorm3d
在接收到输入张量后自动推断通道数量,并初始化相关的参数。
GroupNorm
在一批输入数据上应用组归一化,其特别适用于小批量(mini-batch)大小较小的情况。它按照给定的组数将输入通道分组,并在每组内独立计算均值和标准差用于归一化。x
,BatchNorm2d
计算为 其中 E[x]
是均值,Var[x]
是方差, 和 是可学习的仿射变换参数, 是一个小的常数,用于数值稳定性。num_groups
组,每组包含 num_channels / num_groups
通道。num_channels
必须能被 num_groups
整除。num_groups
(int):要将通道分成的组数。num_channels
(int):输入中期望的通道数。eps
(float):用于数值稳定性的分母小值。默认为 1e-5
。affine
(bool):若设置为 True,则此模块具有可学习的逐通道仿射参数。默认为 True。GroupNorm
在批量大小较小或不定时特别有用,因为它不像批量归一化那样依赖于整个批量的统计数据。LayerNorm
;将每个通道作为一个单独的组时,等同于 InstanceNorm
。下面是一些使用 GroupNorm
的示例代码:
import torch
import torch.nn as nn
# 输入数据
input = torch.randn(20, 6, 10, 10)
# 将 6 个通道分成 3 组
m = nn.GroupNorm(3, 6)
# 将 6 个通道分成 6 组(等同于 InstanceNorm)
m_instance = nn.GroupNorm(6, 6)
# 将所有 6 个通道放入一个组(等同于 LayerNorm)
m_layer = nn.GroupNorm(1, 6)
# 激活模块
output = m(input)
SyncBatchNorm
将标准的批量归一化操作扩展到多个进程和设备上。它在训练过程中跨不同的进程组同步批量归一化的均值和方差。 定义:与传统的批量归一化类似,SyncBatchNorm
对数据进行归一化: 其中 E[x]
和 Var[x]
是在所有进程中计算得到的均值和方差, 和 是可学习的参数, 是为了数值稳定性添加的小常数。
num_features
(int):输入的通道数 C
。eps
(float):用于数值稳定性的分母小值。默认为 1e-5
。momentum
(float):用于运行均值和方差计算的值。默认为 0.1
。affine
(bool):若设置为 True,则此模块具有可学习的仿射参数。默认为 True。track_running_stats
(bool):若设置为 True,则此模块跟踪运行均值和方差;若为 False,则不跟踪,总是使用批量统计量。默认为 True。process_group
(Optional[Any]):指定进行统计数据同步的进程组。SyncBatchNorm
主要用于分布式训练场景,在这些场景中,需要在多个GPU或节点上同步均值和方差。torch.nn.SyncBatchNorm.convert_sync_batchnorm
方法将现有的 BatchNorm*D
层转换为 SyncBatchNorm
层。下面是一个使用 SyncBatchNorm
的示例代码:
import torch
import torch.nn as nn
import torch.distributed as dist
# 创建 SyncBatchNorm 层
m = nn.SyncBatchNorm(100)
# 输入数据
input = torch.randn(20, 100, 35, 45)
# 应用 SyncBatchNorm
output = m(input)
# 将现有的 BatchNorm*D 层转换为 SyncBatchNorm 层
module = nn.Sequential(
nn.Linear(20, 100),
nn.BatchNorm1d(100),
)
sync_bn_module = nn.SyncBatchNorm.convert_sync_batchnorm(module)
在分布式训练中,您需要设置适当的进程组,以确保不同GPU或节点间的正确同步。
InstanceNorm1d
主要用于对一维数据(如多通道时间序列)应用实例归一化,这在风格化变换等应用中非常有用。它按照每个样本和每个通道分别计算归一化统计。InstanceNorm1d
对数据进行归一化: 其中 E[x]
是每个样本和通道的均值,Var[x]
是方差, 和 是可学习的参数(如果 affine
设置为 True), 是为了数值稳定性添加的小常数。num_features
(int):输入中的特征或通道数 C
。eps
(float):用于数值稳定性的分母小值。默认为 1e-5
。momentum
(float):用于运行均值和方差计算的值。默认为 0.1
。affine
(bool):若设置为 True,则此模块具有可学习的仿射参数。默认为 False。track_running_stats
(bool):若设置为 True,则此模块跟踪运行均值和方差;若为 False,则不跟踪,总是使用批量统计量。默认为 False。InstanceNorm1d
都使用实例统计量。如果 track_running_stats
设置为 True,则在训练模式下会更新运行统计量,这些统计量在评估模式下用于归一化。InstanceNorm1d
和 LayerNorm
非常相似,但 InstanceNorm1d
是在每个通道上独立应用的,而 LayerNorm
通常应用于整个样本,并且常用于 NLP 任务。下面是一个使用 InstanceNorm1d
的示例代码:
import torch
import torch.nn as nn
# 不带可学习参数的 InstanceNorm1d
m = nn.InstanceNorm1d(100)
# 带有可学习参数的 InstanceNorm1d
m_affine = nn.InstanceNorm1d(100, affine=True)
# 创建输入张量
input_tensor = torch.randn(20, 100, 40)
# 应用 InstanceNorm1d
output = m(input_tensor)
print("Output:", output)
InstanceNorm2d
主要用于对四维输入(如小批量的二维输入,具有额外的通道维度)应用实例归一化。这在图像处理(例如风格化变换)中特别有用,因为它按照每个样本和每个通道分别计算归一化统计。定义:对于每个样本和通道,InstanceNorm2d
对数据进行归一化:其中 E[x]
是每个样本和通道的均值,Var[x]
是方差, 和 是可学习的参数(如果 affine
设置为 True), 是为了数值稳定性添加的小常数。
num_features
(int):输入中的特征或通道数 C
。eps
(float):用于数值稳定性的分母小值。默认为 1e-5
。momentum
(float):用于运行均值和方差计算的值。默认为 0.1
。affine
(bool):若设置为 True,则此模块具有可学习的仿射参数。默认为 False。track_running_stats
(bool):若设置为 True,则此模块跟踪运行均值和方差;若为 False,则不跟踪,总是使用批量统计量。默认为 False。InstanceNorm2d
都使用实例统计量。如果 track_running_stats
设置为 True,则在训练模式下会更新运行统计量,这些统计量在评估模式下用于归一化。InstanceNorm2d
和 LayerNorm
非常相似,但 InstanceNorm2d
是在每个通道上独立应用的,适用于如 RGB 图像等通道化数据,而 LayerNorm
通常应用于整个样本,并且常用于 NLP 任务。下面是一个使用 InstanceNorm2d
的示例代码:
import torch
import torch.nn as nn
# 不带可学习参数的 InstanceNorm2d
m = nn.InstanceNorm2d(100)
# 带有可学习参数的 InstanceNorm2d
m_affine = nn.InstanceNorm2d(100, affine=True)
# 创建输入张量
input_tensor = torch.randn(20, 100, 35, 45)
# 应用 InstanceNorm2d
output = m(input_tensor)
print("Output:", output)
InstanceNorm3d
主要用于对五维输入(如小批量的三维输入,具有额外的通道维度)应用实例归一化。这在处理三维数据,如医学成像或3D模型时特别有用,因为它按照每个样本和每个通道分别计算归一化统计。num_features
(int):输入中的特征或通道数 C
。eps
(float):用于数值稳定性的分母小值。默认为 1e-5
。momentum
(float):用于运行均值和方差计算的值。默认为 0.1
。affine
(bool):若设置为 True,则此模块具有可学习的仿射参数。默认为 False。track_running_stats
(bool):若设置为 True,则此模块跟踪运行均值和方差;若为 False,则不跟踪,总是使用批量统计量。默认为 False。InstanceNorm3d
都使用实例统计量。如果 track_running_stats
设置为 True,则在训练模式下会更新运行统计量,这些统计量在评估模式下用于归一化。InstanceNorm3d
和 LayerNorm
非常相似,但 InstanceNorm3d
是在每个通道上独立应用的,适用于如3D模型等通道化数据,而 LayerNorm
通常应用于整个样本,并且常用于 NLP 任务。下面是一个使用 InstanceNorm3d
的示例代码:
import torch
import torch.nn as nn
# 不带可学习参数的 InstanceNorm3d
m = nn.InstanceNorm3d(100)
# 带有可学习参数的 InstanceNorm3d
m_affine = nn.InstanceNorm3d(100, affine=True)
# 创建输入张量
input_tensor = torch.randn(20, 100, 35, 45, 10)
# 应用 InstanceNorm3d
output = m(input_tensor)
print("Output:", output)
LazyInstanceNorm1d
是 InstanceNorm1d
的懒初始化版本。它允许您在模型构建时推迟指定输入特征(通道数)的数量,这在处理动态或未知大小的输入时特别有用。LazyInstanceNorm1d
自动推断 num_features
(特征或通道数)的大小。在此之前,权重(weight
)、偏差(bias
)、运行均值(running_mean
)和运行方差(running_var
)等属性保持未初始化状态。eps
(float):用于数值稳定性的分母小值。默认为 1e-5
。momentum
(float):用于运行均值和方差计算的值。默认为 0.1
。affine
(bool):若设置为 True,则此模块具有可学习的仿射参数。默认为 False。track_running_stats
(bool):若设置为 True,则此模块跟踪运行均值和方差;若为 False,则不跟踪,总是使用批量统计量。默认为 False。InstanceNorm1d
模块,而不是懒初始化版本。LazyInstanceNorm1d
可以提供更大的灵活性。下面是一个使用 LazyInstanceNorm1d
的示例代码:
import torch
import torch.nn as nn
# 创建 LazyInstanceNorm1d 层
m = nn.LazyInstanceNorm1d()
# 创建输入张量(特征数量未指定)
input_tensor = torch.randn(20, 100, 40)
# 应用 LazyInstanceNorm1d
output = m(input_tensor)
print("Output:", output)
在这个示例中,LazyInstanceNorm1d
在接收到输入张量后自动推断特征数量,并初始化相关的参数。
LazyInstanceNorm2d
是 InstanceNorm2d
的懒初始化版本。它在模型构建时允许您推迟指定输入特征(即通道数)的数量,这在处理动态或未知大小的输入时特别有用。LazyInstanceNorm2d
自动推断 num_features
(特征或通道数)的大小。在此之前,权重(weight
)、偏差(bias
)、运行均值(running_mean
)和运行方差(running_var
)等属性保持未初始化状态。eps
(float):用于数值稳定性的分母小值。默认为 1e-5
。momentum
(float):用于运行均值和方差计算的值。默认为 0.1
。affine
(bool):若设置为 True,则此模块具有可学习的仿射参数。默认为 False。track_running_stats
(bool):若设置为 True,则此模块跟踪运行均值和方差;若为 False,则不跟踪,总是使用批量统计量。默认为 False。InstanceNorm2d
模块,而不是懒初始化版本。LazyInstanceNorm2d
可以提供更大的灵活性。下面是一个使用 LazyInstanceNorm2d
的示例代码:
import torch
import torch.nn as nn
# 创建 LazyInstanceNorm2d 层
m = nn.LazyInstanceNorm2d()
# 创建输入张量(通道数量未指定)
input_tensor = torch.randn(20, 100, 35, 45)
# 应用 LazyInstanceNorm2d
output = m(input_tensor)
print("Output:", output)
在这个示例中,LazyInstanceNorm2d
在接收到输入张量后自动推断通道数量,并初始化相关的参数。
LazyInstanceNorm3d
是 InstanceNorm3d
的懒初始化版本。它在模型构建时允许您推迟指定输入特征(即通道数)的数量,这在处理动态或未知大小的输入时特别有用。LazyInstanceNorm3d
自动推断 num_features
(特征或通道数)的大小。在此之前,权重(weight
)、偏差(bias
)、运行均值(running_mean
)和运行方差(running_var
)等属性保持未初始化状态。eps
(float):用于数值稳定性的分母小值。默认为 1e-5
。momentum
(float):用于运行均值和方差计算的值。默认为 0.1
。affine
(bool):若设置为 True,则此模块具有可学习的仿射参数。默认为 False。track_running_stats
(bool):若设置为 True,则此模块跟踪运行均值和方差;若为 False,则不跟踪,总是使用批量统计量。默认为 False。InstanceNorm3d
模块,而不是懒初始化版本。LazyInstanceNorm3d
可以提供更大的灵活性。下面是一个使用 LazyInstanceNorm3d
的示例代码:
import torch
import torch.nn as nn
# 创建 LazyInstanceNorm3d 层
m = nn.LazyInstanceNorm3d()
# 创建输入张量(通道数量未指定)
input_tensor = torch.randn(20, 100, 30, 40, 50)
# 应用 LazyInstanceNorm3d
output = m(input_tensor)
print("Output:", output)
在这个示例中,LazyInstanceNorm3d
在接收到输入张量后自动推断通道数量,并初始化相关的参数。
LayerNorm
主要用于对小批量输入数据应用层归一化,这在自然语言处理(NLP)和某些图像处理任务中非常有用。它在输入的最后几个维度上计算归一化统计。normalized_shape
(int 或 list 或 torch.Size):期望输入的形状。如果使用单个整数,则视为单元素列表,此模块将在最后一个维度上进行归一化。eps
(float):用于数值稳定性的分母小值。默认为 1e-5
。elementwise_affine
(bool):若设置为 True,则此模块具有逐元素可学习的仿射参数。默认为 True。bias
(bool):如果设置为 False,则不会学习加性偏置(仅在 elementwise_affine
为 True 时相关)。默认为 True。LayerNorm
对每个元素应用缩放和偏置。LayerNorm
通常用于处理具有固定特征维度的输入,例如自然语言处理中的嵌入层或图像处理中的特定通道。下面是一些使用 LayerNorm
的示例代码:
NLP 示例
import torch
import torch.nn as nn
batch, sentence_length, embedding_dim = 20, 5, 10
embedding = torch.randn(batch, sentence_length, embedding_dim)
layer_norm = nn.LayerNorm(embedding_dim)
# 激活模块
layer_norm_output = layer_norm(embedding)
图像示例
N, C, H, W = 20, 5, 10, 10
input_tensor = torch.randn(N, C, H, W)
# 在通道和空间维度上归一化
layer_norm = nn.LayerNorm([C, H, W])
output = layer_norm(input_tensor)
LocalResponseNorm
应用于由多个输入平面组成的输入信号上,主要用于跨通道(占第二维度)进行归一化。这种归一化在早期卷积神经网络中常见,用于增强模型的泛化能力。 其中 a_c
是输入在通道 c
上的值,n
是归一化窗口大小,N
是通道总数,k
、 和 是超参数。
size
(int):用于归一化的邻近通道数。alpha
(float):乘性因子。默认为 0.0001
。beta
(float):指数。默认为 0.75
。k
(float):加性因子。默认为 1
。下面是使用 LocalResponseNorm
的示例代码:
import torch
import torch.nn as nn
# 创建 LocalResponseNorm 层
lrn = nn.LocalResponseNorm(2)
# 创建二维和四维信号
signal_2d = torch.randn(32, 5, 24, 24)
signal_4d = torch.randn(16, 5, 7, 7, 7, 7)
# 应用 LocalResponseNorm
output_2d = lrn(signal_2d)
output_4d = lrn(signal_4d)
这篇博客详细解释了 PyTorch 中 torch.nn
子模块下的多种归一化层,包括 BatchNorm (1d, 2d, 3d)、LazyBatchNorm (1d, 2d, 3d)、GroupNorm、SyncBatchNorm、InstanceNorm (1d, 2d, 3d)、LayerNorm 和 LocalResponseNorm。每种归一化层的功能、工作原理、参数详解以及使用技巧都进行了全面的阐述。此外,还提供了每种归一化层的示例代码,帮助理解它们在实际应用中的使用方式。