nn.InstanceNorm2d和nn.BatchNorm2d比较
和都是 PyTorch 中常用的归一化层,用于提高神经网络的训练稳定性和泛化能力。
介绍
nn.InstanceNorm2d
和 nn.BatchNorm2d
都是 PyTorch 中常用的归一化层,用于提高神经网络的训练稳定性和泛化能力。
主要区别
它们之间的主要区别如下:
-
归一化对象:
nn.InstanceNorm2d
:实例归一化,对每个样本(实例)的特征进行归一化。适用于每个样本的特征分布不同的情况,如图像风格转换等任务。nn.BatchNorm2d
:批归一化,对整个批次中的样本的特征进行归一化。适用于训练深度神经网络时,加速训练过程、提高模型的泛化能力。
-
归一化方式:
nn.InstanceNorm2d
:对每个样本的每个通道进行归一化,即对每个特征图的每个位置点进行归一化。nn.BatchNorm2d
:对每个通道的特征图进行归一化,即对每个特征图的所有位置点进行归一化。
-
归一化参数:
nn.InstanceNorm2d
:没有可训练的参数,只有归一化的均值和方差。nn.BatchNorm2d
:有可训练的参数,包括缩放因子(scale)、偏移量(shift)、归一化的均值和方差。
-
使用场景:
nn.InstanceNorm2d
:适用于图像风格转换、图像生成等需要保持每个样本特征独立性的任务。nn.BatchNorm2d
:适用于深度神经网络的训练过程,加速训练、提高模型的泛化能力。
需要根据具体任务和网络结构的特点选择合适的归一化层。在一般情况下,nn.BatchNorm2d
是更常用的归一化层。
计算公式
nn.InstanceNorm2d
和 nn.BatchNorm2d
在计算上的公式如下:
对于 nn.InstanceNorm2d
,假设输入为
x
∈
R
N
×
C
×
H
×
W
x \in \mathbb{R}^{N \times C \times H \times W}
x∈RN×C×H×W,其中
N
N
N 是批次大小,
C
C
C 是通道数,
H
H
H 和
W
W
W 是特征图的高度和宽度。实例归一化的计算公式如下:
InstanceNorm2d ( x ) n , c , h , w = x n , c , h , w − μ n , c σ n , c 2 + ϵ ⋅ γ c + β c \text{InstanceNorm2d}(x)_{n,c,h,w} = \frac{x_{n,c,h,w} - \mu_{n,c}}{\sqrt{\sigma^2_{n,c} + \epsilon}} \cdot \gamma_c + \beta_c InstanceNorm2d(x)n,c,h,w=σn,c2+ϵxn,c,h,w−μn,c⋅γc+βc
其中:
- x n , c , h , w x_{n,c,h,w} xn,c,h,w 是输入张量 x x x 在第 n n n 个样本、第 c c c 个通道、第 h h h 行、第 w w w 列的元素。
- μ n , c \mu_{n,c} μn,c 是第 n n n 个样本、第 c c c 个通道的均值,计算公式为 μ n , c = 1 H × W ∑ h = 1 H ∑ w = 1 W x n , c , h , w \mu_{n,c} = \frac{1}{H \times W} \sum_{h=1}^{H} \sum_{w=1}^{W} x_{n,c,h,w} μn,c=H×W1∑h=1H∑w=1Wxn,c,h,w。
- σ n , c 2 \sigma^2_{n,c} σn,c2 是第 n n n 个样本、第 c c c 个通道的方差,计算公式为 σ n , c 2 = 1 H × W ∑ h = 1 H ∑ w = 1 W ( x n , c , h , w − μ n , c ) 2 \sigma^2_{n,c} = \frac{1}{H \times W} \sum_{h=1}^{H} \sum_{w=1}^{W} (x_{n,c,h,w} - \mu_{n,c})^2 σn,c2=H×W1∑h=1H∑w=1W(xn,c,h,w−μn,c)2。
- γ c \gamma_c γc 是归一化的缩放因子(scale),是一个可学习的参数。
- β c \beta_c βc 是归一化的偏移量(shift),是一个可学习的参数。
- ϵ \epsilon ϵ 是一个小的常数,用于避免除以零的情况。
对于 nn.BatchNorm2d
,假设输入为
x
∈
R
N
×
C
×
H
×
W
x \in \mathbb{R}^{N \times C \times H \times W}
x∈RN×C×H×W,其中
N
N
N 是批次大小,
C
C
C 是通道数,
H
H
H 和
W
W
W 是特征图的高度和宽度。批归一化的计算公式如下:
BatchNorm2d ( x ) n , c , h , w = x n , c , h , w − μ c σ c 2 + ϵ ⋅ γ c + β c \text{BatchNorm2d}(x)_{n,c,h,w} = \frac{x_{n,c,h,w} - \mu_c}{\sqrt{\sigma^2_c + \epsilon}} \cdot \gamma_c + \beta_c BatchNorm2d(x)n,c,h,w=σc2+ϵxn,c,h,w−μc⋅γc+βc
其中:
- x n , c , h , w x_{n,c,h,w} xn,c,h,w 是输入张量 x x x 在第 n n n 个样本、第 c c c 个通道、第 h h h 行、第 w w w 列的元素。
- μ c \mu_c μc 是第 c c c 个通道的均值,计算公式为 μ c = 1 N × H × W ∑ n = 1 N ∑ h = 1 H ∑ w = 1 W x n , c , h , w \mu_c = \frac{1}{N \times H \times W} \sum_{n=1}^{N} \sum_{h=1}^{H} \sum_{w=1}^{W} x_{n,c,h,w} μc=N×H×W1∑n=1N∑h=1H∑w=1Wxn,c,h,w。
- σ c 2 \sigma^2_c σc2 是第 c c c 个通道的方差,计算公式为 σ c 2 = 1 N × H × W ∑ n = 1 N ∑ h = 1 H ∑ w = 1 W ( x n , c , h , w − μ c ) 2 \sigma^2_c = \frac{1}{N \times H \times W} \sum_{n=1}^{N} \sum_{h=1}^{H} \sum_{w=1}^{W} (x_{n,c,h,w} - \mu_c)^2 σc2=N×H×W1∑n=1N∑h=1H∑w=1W(xn,c,h,w−μc)2。
- γ c \gamma_c γc 是归一化的缩放因子(scale),是一个可学习的参数。
- β c \beta_c βc 是归一化的偏移量(shift),是一个可学习的参数。
- ϵ \epsilon ϵ 是一个小的常数,用于避免除以零的情况。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)