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
目录
相关文章
|
11月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(五):nn.AdaptiveAvgPool2d()函数详解
PyTorch中的`nn.AdaptiveAvgPool2d()`函数用于实现自适应平均池化,能够将输入特征图调整到指定的输出尺寸,而不需要手动计算池化核大小和步长。
849 1
Pytorch学习笔记(五):nn.AdaptiveAvgPool2d()函数详解
|
11月前
|
算法 PyTorch 算法框架/工具
Pytorch学习笔记(九):Pytorch模型的FLOPs、模型参数量等信息输出(torchstat、thop、ptflops、torchsummary)
本文介绍了如何使用torchstat、thop、ptflops和torchsummary等工具来计算Pytorch模型的FLOPs、模型参数量等信息。
1694 2
|
11月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(六):view()和nn.Linear()函数详解
这篇博客文章详细介绍了PyTorch中的`view()`和`nn.Linear()`函数,包括它们的语法格式、参数解释和具体代码示例。`view()`函数用于调整张量的形状,而`nn.Linear()`则作为全连接层,用于固定输出通道数。
655 0
Pytorch学习笔记(六):view()和nn.Linear()函数详解
|
11月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(四):nn.MaxPool2d()函数详解
这篇博客文章详细介绍了PyTorch中的nn.MaxPool2d()函数,包括其语法格式、参数解释和具体代码示例,旨在指导读者理解和使用这个二维最大池化函数。
878 0
Pytorch学习笔记(四):nn.MaxPool2d()函数详解
|
11月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
本文介绍了PyTorch中的F.softmax()和F.log_softmax()函数的语法、参数和使用示例,解释了它们在进行归一化处理时的作用和区别。
1096 1
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
|
11月前
|
机器学习/深度学习 PyTorch 算法框架/工具
Pytorch学习笔记(八):nn.ModuleList和nn.Sequential函数详解
PyTorch中的nn.ModuleList和nn.Sequential函数,包括它们的语法格式、参数解释和具体代码示例,展示了如何使用这些函数来构建和管理神经网络模型。
1778 1
|
11月前
|
PyTorch 算法框架/工具 Python
Pytorch学习笔记(十):Torch对张量的计算、Numpy对数组的计算、它们之间的转换
这篇文章是关于PyTorch张量和Numpy数组的计算方法及其相互转换的详细学习笔记。
266 0
|
11天前
|
机器学习/深度学习 数据采集 人工智能
PyTorch学习实战:AI从数学基础到模型优化全流程精解
本文系统讲解人工智能、机器学习与深度学习的层级关系,涵盖PyTorch环境配置、张量操作、数据预处理、神经网络基础及模型训练全流程,结合数学原理与代码实践,深入浅出地介绍激活函数、反向传播等核心概念,助力快速入门深度学习。
59 1
|
4月前
|
机器学习/深度学习 PyTorch API
PyTorch量化感知训练技术:模型压缩与高精度边缘部署实践
本文深入探讨神经网络模型量化技术,重点讲解训练后量化(PTQ)与量化感知训练(QAT)两种主流方法。PTQ通过校准数据集确定量化参数,快速实现模型压缩,但精度损失较大;QAT在训练中引入伪量化操作,使模型适应低精度环境,显著提升量化后性能。文章结合PyTorch实现细节,介绍Eager模式、FX图模式及PyTorch 2导出量化等工具,并分享大语言模型Int4/Int8混合精度实践。最后总结量化最佳策略,包括逐通道量化、混合精度设置及目标硬件适配,助力高效部署深度学习模型。
659 21
PyTorch量化感知训练技术:模型压缩与高精度边缘部署实践
|
11天前
|
机器学习/深度学习 存储 PyTorch
Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节
Neural ODE将神经网络与微分方程结合,用连续思维建模数据演化,突破传统离散层的限制,实现自适应深度与高效连续学习。
51 3
Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节

热门文章

最新文章

推荐镜像

更多