Pytorch学习笔记(三):nn.BatchNorm2d()函数详解

简介: 本文介绍了PyTorch中的BatchNorm2d模块,它用于卷积层后的数据归一化处理,以稳定网络性能,并讨论了其参数如num_features、eps和momentum,以及affine参数对权重和偏置的影响。

1.函数语法格式和作用

作用:卷积层之后总会添加BatchNorm2d进行数据的归一化处理,这使得数据在进行Relu之前不会因为数据过大而导致网络性能的不稳定

torch.nn.BatchNorm2d(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)

2.参数解释

  • num_features:一般输入参数为batch_size×num_features×height×width,即为其中特征的数量

  • eps:分母中添加的一个值,目的是为了计算的稳定性,默认为:1e-5

  • momentum:一个用于运行过程中均值和方差的一个估计参数(我的理解是一个稳定系数,类似于SGD中的momentum的系数)

  • affine:当设为true时,会给定可以学习的系数矩阵gamma和beta

3.具体代码

在这里插入图片描述

# encoding:utf-8
import torch
import torch.nn as nn

# num_features - num_features from an expected input of size:batch_size*num_features*height*width
# eps:default:1e-5 (公式中为数值稳定性加到分母上的值)
# momentum:动量参数,用于running_mean and running_var计算的值,default:0.1
m = nn.BatchNorm2d(3)  # affine参数设为True表示weight和bias将被使用
m1 = nn.BatchNorm2d(3, affine=False)  # affine参数设为True表示weight和bias将被使用
input = torch.randn(2, 3, 2, 3)
output = m(input)
output1 = m1(input)
print('"""affine=True"""')
print(input)
print(m.weight)
print(m.bias)
print(output)
print(output.size())
print('"""affine=False"""')
print(output1)
print(output1.size())

结果如下

"""affine=True"""
tensor([[[[ 0.5408,  0.2707, -0.4395],
          [ 0.7942, -1.3403,  0.9146]],

         [[ 0.0082,  0.3639, -0.1986],
          [ 1.6522, -0.3494, -0.8619]],

         [[ 0.1021,  0.2455,  0.9168],
          [-0.2652,  0.0869, -1.3121]]],

        [[[-0.5038, -1.0989,  1.3820],
          [ 1.5612, -0.0384, -1.5507]],

         [[-0.4546,  2.5124, -1.1012],
          [ 1.0045, -0.7018,  1.3485]],

         [[-2.7837, -0.6371, -0.7099],
          [-0.0732,  1.1424,  0.6456]]]])
Parameter containing:
tensor([1., 1., 1.], requires_grad=True)
Parameter containing:
tensor([0., 0., 0.], requires_grad=True)
tensor([[[[ 0.4995,  0.2295, -0.4802],
          [ 0.7527, -1.3803,  0.8730]],

         [[-0.2414,  0.0885, -0.4332],
          [ 1.2832, -0.5730, -1.0483]],

         [[ 0.3156,  0.4560,  1.1133],
          [-0.0441,  0.3006, -1.0692]]],

        [[[-0.5444, -1.1390,  1.3400],
          [ 1.5191, -0.0794, -1.5906]],

         [[-0.6706,  2.0809, -1.2702],
          [ 0.6825, -0.8999,  1.0016]],

         [[-2.5102, -0.4082, -0.4795],
          [ 0.1439,  1.3342,  0.8478]]]], grad_fn=<NativeBatchNormBackward>)
torch.Size([2, 3, 2, 3])
"""affine=False"""
tensor([[[[ 0.4995,  0.2295, -0.4802],
          [ 0.7527, -1.3803,  0.8730]],

         [[-0.2414,  0.0885, -0.4332],
          [ 1.2832, -0.5730, -1.0483]],

         [[ 0.3156,  0.4560,  1.1133],
          [-0.0441,  0.3006, -1.0692]]],

        [[[-0.5444, -1.1390,  1.3400],
          [ 1.5191, -0.0794, -1.5906]],

         [[-0.6706,  2.0809, -1.2702],
          [ 0.6825, -0.8999,  1.0016]],

         [[-2.5102, -0.4082, -0.4795],
          [ 0.1439,  1.3342,  0.8478]]]])
torch.Size([2, 3, 2, 3])

Process finished with exit code 0
目录
相关文章
|
PyTorch 算法框架/工具
Pytorch学习笔记(五):nn.AdaptiveAvgPool2d()函数详解
PyTorch中的`nn.AdaptiveAvgPool2d()`函数用于实现自适应平均池化,能够将输入特征图调整到指定的输出尺寸,而不需要手动计算池化核大小和步长。
1221 1
Pytorch学习笔记(五):nn.AdaptiveAvgPool2d()函数详解
|
算法 PyTorch 算法框架/工具
Pytorch学习笔记(九):Pytorch模型的FLOPs、模型参数量等信息输出(torchstat、thop、ptflops、torchsummary)
本文介绍了如何使用torchstat、thop、ptflops和torchsummary等工具来计算Pytorch模型的FLOPs、模型参数量等信息。
2638 2
|
PyTorch 算法框架/工具
Pytorch学习笔记(六):view()和nn.Linear()函数详解
这篇博客文章详细介绍了PyTorch中的`view()`和`nn.Linear()`函数,包括它们的语法格式、参数解释和具体代码示例。`view()`函数用于调整张量的形状,而`nn.Linear()`则作为全连接层,用于固定输出通道数。
1005 0
Pytorch学习笔记(六):view()和nn.Linear()函数详解
|
PyTorch 算法框架/工具
Pytorch学习笔记(四):nn.MaxPool2d()函数详解
这篇博客文章详细介绍了PyTorch中的nn.MaxPool2d()函数,包括其语法格式、参数解释和具体代码示例,旨在指导读者理解和使用这个二维最大池化函数。
1158 0
Pytorch学习笔记(四):nn.MaxPool2d()函数详解
|
PyTorch 算法框架/工具
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
本文介绍了PyTorch中的F.softmax()和F.log_softmax()函数的语法、参数和使用示例,解释了它们在进行归一化处理时的作用和区别。
1453 1
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
|
机器学习/深度学习 PyTorch 算法框架/工具
Pytorch学习笔记(八):nn.ModuleList和nn.Sequential函数详解
PyTorch中的nn.ModuleList和nn.Sequential函数,包括它们的语法格式、参数解释和具体代码示例,展示了如何使用这些函数来构建和管理神经网络模型。
2266 1
|
PyTorch 算法框架/工具 Python
Pytorch学习笔记(十):Torch对张量的计算、Numpy对数组的计算、它们之间的转换
这篇文章是关于PyTorch张量和Numpy数组的计算方法及其相互转换的详细学习笔记。
375 0
|
10月前
|
机器学习/深度学习 JavaScript PyTorch
9个主流GAN损失函数的数学原理和Pytorch代码实现:从经典模型到现代变体
生成对抗网络(GAN)的训练效果高度依赖于损失函数的选择。本文介绍了经典GAN损失函数理论,并用PyTorch实现多种变体,包括原始GAN、LS-GAN、WGAN及WGAN-GP等。通过分析其原理与优劣,如LS-GAN提升训练稳定性、WGAN-GP改善图像质量,展示了不同场景下损失函数的设计思路。代码实现覆盖生成器与判别器的核心逻辑,为实际应用提供了重要参考。未来可探索组合优化与自适应设计以提升性能。
921 7
9个主流GAN损失函数的数学原理和Pytorch代码实现:从经典模型到现代变体
|
4月前
|
机器学习/深度学习 存储 PyTorch
Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节
Neural ODE将神经网络与微分方程结合,用连续思维建模数据演化,突破传统离散层的限制,实现自适应深度与高效连续学习。
296 3
Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节

热门文章

最新文章

推荐镜像

更多