Pytorch学习笔记(五):nn.AdaptiveAvgPool2d()函数详解

本文详细介绍了PyTorch中nn.AdaptiveAvgPool2d()函数的使用方法,包括函数的基本语法、参数解释及示例代码。通过不同参数设置展示了如何调整输出尺寸,适合初学者和进阶用户学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相关文章

Pytorch学习笔记(一):torch.cat()模块的详解
Pytorch学习笔记(二):nn.Conv2d()函数详解
Pytorch学习笔记(三):nn.BatchNorm2d()函数详解
Pytorch学习笔记(四):nn.MaxPool2d()函数详解
Pytorch学习笔记(五):nn.AdaptiveAvgPool2d()函数详解
Pytorch学习笔记(六):view()和nn.Linear()函数详解
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解


✅💖⚠️▶️➡️🌿🍀🍄🌟⭐❄️✅💖⚠️▶️➡️🌿🍀🍄🌟⭐❄️✅💖⚠️▶️➡️🌿🍀🍄🌟⭐❄️✅💖⚠️

1. 函数语法格式和作用➡️

1.1 作用➡️

nn.AdaptiveAvgPool2d 是 PyTorch 中一个非常有用的神经网络层,其核心作用是进行自适应平均池化操作。在深度学习领域,尤其是在处理图像数据时,不同的卷积神经网络层会生成不同尺寸的特征图。而这些特征图的尺寸可能会因为网络结构和输入数据的不同而有所差异。

自适应平均池化的关键特性在于,它能够根据指定的输出尺寸(H,W),对输入的特征图进行平均池化操作,使得无论输入特征图的尺寸如何变化,最终输出的特征图都具有固定的尺寸(H,W)。这种操作在很多情况下都非常重要。

一方面,在模型训练过程中,不同的网络层可能需要固定尺寸的输入。通过 nn.AdaptiveAvgPool2d,可以将前面层输出的各种尺寸的特征图统一调整为所需的尺寸,方便后续网络层的处理。例如,在一些全连接层之前,通常需要将卷积层输出的特征图转换为固定大小的向量,自适应平均池化就可以帮助实现这一目的。

另一方面,它有助于减少模型对输入数据尺寸的敏感性,提高模型的泛化能力。在实际应用中,输入图像的大小可能会有所不同,但通过自适应平均池化,模型可以以统一的方式处理这些不同尺寸的图像,从而在不同的数据集上都能表现出较好的性能。

此外,平均池化操作本身还可以起到一定的特征压缩和去噪作用,通过对局部区域的特征进行平均,能够保留主要的特征信息,同时减少噪声和细节的干扰,使得模型更加鲁棒。

1.2 函数语言格式➡️

nn.AdaptiveAvgPool2d(output_size)

这里的 output_size 是一个关键参数,它用于指定经过自适应平均池化后输出特征图的尺寸。output_size 可以是一个整数,也可以是一个包含两个整数的元组。

output_size 为一个整数时,例如 nn.AdaptiveAvgPool2d(8),表示输出的特征图将是一个正方形,其高度和宽度都为 8。在这种情况下,自适应平均池化会根据输入特征图的尺寸,自动计算出合适的池化窗口大小和步长,以确保输出特征图的尺寸为 8×8。

output_size 为一个包含两个整数的元组时,比如 nn.AdaptiveAvgPool2d((4, 6)),这就明确指定了输出特征图的高度为 4,宽度为 6。自适应平均池化会根据输入特征图的尺寸,分别在高度和宽度方向上进行计算,以得到指定尺寸的输出特征图。

以下是一个简单的使用示例:

import torch
import torch.nn as nn

# 创建一个随机的输入特征图,形状为 (1, 32, 16, 16),表示 1 个样本,32 个通道,16×16 的尺寸
input_tensor = torch.randn(1, 32, 16, 16)

# 创建一个自适应平均池化层,指定输出尺寸为 (4, 4)
adaptive_pool = nn.AdaptiveAvgPool2d((4, 4))

# 对输入特征图进行自适应平均池化操作
output_tensor = adaptive_pool(input_tensor)

print("输入特征图尺寸:", input_tensor.size())
print("输出特征图尺寸:", output_tensor.size())

在上述示例中,我们首先创建了一个随机的输入特征图,然后实例化了一个 nn.AdaptiveAvgPool2d 层,指定输出尺寸为 (4, 4)。最后,将输入特征图传入该层进行处理,得到输出特征图。通过打印输入和输出特征图的尺寸,可以直观地看到自适应平均池化的效果。

2.参数解释➡️

  • output_size:指定输出固定尺寸

3.具体代码➡️

import torch
import torch.nn as nn
m = nn.AdaptiveAvgPool2d((5,1))
m1 = nn.AdaptiveAvgPool2d((None,5))
m2 = nn.AdaptiveAvgPool2d(1)
input = torch.randn(2, 64, 8, 9)
output = m(input)
output1 = m1(input)
output2 = m2(input)
print('nn.AdaptiveAvgPool2d((5,1)):',output.shape)
print('nn.AdaptiveAvgPool2d((None,5)):',output1.shape)
print('nn.AdaptiveAvgPool2d(1):',output2.shape)

结果
在这里插入图片描述
✅💖⚠️▶️➡️🌿🍀🍄🌟⭐❄️✅💖⚠️▶️➡️🌿🍀🍄🌟⭐❄️✅💖⚠️▶️➡️🌿🍀🍄🌟⭐❄️✅💖⚠️
在这里插入图片描述

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZZY_dl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值