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
目录
相关文章
|
1月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(五):nn.AdaptiveAvgPool2d()函数详解
PyTorch中的`nn.AdaptiveAvgPool2d()`函数用于实现自适应平均池化,能够将输入特征图调整到指定的输出尺寸,而不需要手动计算池化核大小和步长。
113 1
Pytorch学习笔记(五):nn.AdaptiveAvgPool2d()函数详解
|
1月前
|
算法 PyTorch 算法框架/工具
Pytorch学习笔记(九):Pytorch模型的FLOPs、模型参数量等信息输出(torchstat、thop、ptflops、torchsummary)
本文介绍了如何使用torchstat、thop、ptflops和torchsummary等工具来计算Pytorch模型的FLOPs、模型参数量等信息。
203 2
|
1月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(六):view()和nn.Linear()函数详解
这篇博客文章详细介绍了PyTorch中的`view()`和`nn.Linear()`函数,包括它们的语法格式、参数解释和具体代码示例。`view()`函数用于调整张量的形状,而`nn.Linear()`则作为全连接层,用于固定输出通道数。
88 0
Pytorch学习笔记(六):view()和nn.Linear()函数详解
|
1月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(四):nn.MaxPool2d()函数详解
这篇博客文章详细介绍了PyTorch中的nn.MaxPool2d()函数,包括其语法格式、参数解释和具体代码示例,旨在指导读者理解和使用这个二维最大池化函数。
121 0
Pytorch学习笔记(四):nn.MaxPool2d()函数详解
|
1月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
本文介绍了PyTorch中的F.softmax()和F.log_softmax()函数的语法、参数和使用示例,解释了它们在进行归一化处理时的作用和区别。
401 1
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
Pytorch学习笔记(八):nn.ModuleList和nn.Sequential函数详解
PyTorch中的nn.ModuleList和nn.Sequential函数,包括它们的语法格式、参数解释和具体代码示例,展示了如何使用这些函数来构建和管理神经网络模型。
84 1
|
1月前
|
PyTorch 算法框架/工具 Python
Pytorch学习笔记(十):Torch对张量的计算、Numpy对数组的计算、它们之间的转换
这篇文章是关于PyTorch张量和Numpy数组的计算方法及其相互转换的详细学习笔记。
35 0
|
1月前
|
机器学习/深度学习 自然语言处理 监控
利用 PyTorch Lightning 搭建一个文本分类模型
利用 PyTorch Lightning 搭建一个文本分类模型
60 8
利用 PyTorch Lightning 搭建一个文本分类模型
|
1月前
|
机器学习/深度学习 自然语言处理 数据建模
三种Transformer模型中的注意力机制介绍及Pytorch实现:从自注意力到因果自注意力
本文深入探讨了Transformer模型中的三种关键注意力机制:自注意力、交叉注意力和因果自注意力,这些机制是GPT-4、Llama等大型语言模型的核心。文章不仅讲解了理论概念,还通过Python和PyTorch从零开始实现这些机制,帮助读者深入理解其内部工作原理。自注意力机制通过整合上下文信息增强了输入嵌入,多头注意力则通过多个并行的注意力头捕捉不同类型的依赖关系。交叉注意力则允许模型在两个不同输入序列间传递信息,适用于机器翻译和图像描述等任务。因果自注意力确保模型在生成文本时仅考虑先前的上下文,适用于解码器风格的模型。通过本文的详细解析和代码实现,读者可以全面掌握这些机制的应用潜力。
59 3
三种Transformer模型中的注意力机制介绍及Pytorch实现:从自注意力到因果自注意力
|
2月前
|
机器学习/深度学习 PyTorch 调度
在Pytorch中为不同层设置不同学习率来提升性能,优化深度学习模型
在深度学习中,学习率作为关键超参数对模型收敛速度和性能至关重要。传统方法采用统一学习率,但研究表明为不同层设置差异化学习率能显著提升性能。本文探讨了这一策略的理论基础及PyTorch实现方法,包括模型定义、参数分组、优化器配置及训练流程。通过示例展示了如何为ResNet18设置不同层的学习率,并介绍了渐进式解冻和层适应学习率等高级技巧,帮助研究者更好地优化模型训练。
144 4
在Pytorch中为不同层设置不同学习率来提升性能,优化深度学习模型

热门文章

最新文章