常见组件详解(六):torch.nn.AvgPool2d()、torch.nn.AdaptiveAvgPool2d()


一、torch.nn.AvgPool2d():二维平均池化

1.1参数介绍

torch.nn.AvgPool2d( kernel_size , stride=None , padding=0 , ceil_mode=False , count_include_pad=True , divisor_override=None )

  torch.nn.AvgPool2d()用于在由多个平面组成的输入信号上应用二维平均池化操作,输入尺寸为 ( N , C i n , H , W ) (N,C_{in},H,W) (N,Cin,H,W),输出尺寸为 ( N , C i n , H o u t , W o u t ) (N,C_{in},H_{out},W_{out}) (N,Cin,Hout,Wout)。输出特征图形状为:
在这里插入图片描述
其中, H i n 、 W i n H_{in}、W_{in} HinWin分别表输入图像的高度与宽度,默认向下取整。

参数名功能
kernel_size池化核大小,整数或元组。
stride步幅,默认等于kernel_size,整数或元组。
padding填充,整数或元组。
ceil_mode设为True时,在计算输出形状的过程中采用向上取整的操作,否则,采用向下取整。
count_include_pad布尔类型,当为True时,将在平均池化计算中包括零填充,否则,不包括零填充。
divisor_override如果被指定,则除数会被代替成divisor_override。换句话说,如果不指定该变量,则平均池化的计算过程其实是在一个池化核内,将元素相加再除以池化核的大小,也就是divisor_override默认为池化核的高×宽;如果该变量被指定,则池化过程为将池化核内元素相加再除以divisor_override。

1.2代码案例

【一般用法】

import torch
from torch import nn
img=torch.arange(16).reshape(1,1,4,4)
# 池化核和池化步长均为2
pool=nn.AvgPool2d(2,stride=2)
img_2=pool(img)
print(img)
print(img_2)

在这里插入图片描述
【ceil_mode用法】

import torch
from torch import nn
img=torch.arange(20,dtype=torch.float).reshape(1,1,4,5)
pool_f=nn.AvgPool2d(2,stride=2,padding=0,ceil_mode=False)#向下取整
pool_t=nn.AvgPool2d(2,stride=2,padding=0,ceil_mode=True)#向上取整
img_1=pool_f(img)
img_2=pool_t(img)
print(img)
print(img_1)
print(img_2)

在这里插入图片描述
【padding用法】

import torch
from torch import nn
img=torch.arange(16,dtype=torch.float).reshape(1,1,4,4)
pool_t=nn.AvgPool2d(2,stride=2,padding=1)#填充后图像大小为(1,1,6,6),池化输出图像大小为(1,1,3,3)
pool_f=nn.AvgPool2d(2,stride=2)#图像大小为(1,1,4,4),池化输出图像大小为(1,1,2,2)
img_1=pool_t(img)
img_2=pool_f(img)
print(img)
print(img_1)
print(img_2)

在这里插入图片描述
【count_include_pad】

import torch
from torch import nn
img=torch.arange(16,dtype=torch.float).reshape(1,1,4,4)
pool_t=nn.AvgPool2d(2,stride=2,padding=1,count_include_pad=True)
pool_f=nn.AvgPool2d(2,stride=2,padding=1,count_include_pad=False)
img_1=pool_t(img)
img_2=pool_f(img)
print(img)
print(img_1)#用于填充的0被用于计算
print(img_2)#用于填充的0不用于计算

在这里插入图片描述
【divisor_override】

import torch
from torch import nn
img=torch.arange(16,dtype=torch.float).reshape(1,1,4,4)
pool_1=nn.AvgPool2d(2,stride=2)
pool_d1=nn.AvgPool2d(2,stride=2,divisor_override=2)
pool_d2=nn.AvgPool2d(2,stride=2,divisor_override=3)
img_1=pool_1(img)
img_2=pool_d1(img)
img_3=pool_d2(img)
print(img)
print(img_1)
print(img_2)
print(img_3)

在这里插入图片描述

二、torch.nn.AdaptiveAvgPool2d():自适应平均池化

  torch.nn.AdaptiveAvgPool2d()用于将输入特征图的高度和宽度调整到指定输出尺寸(不会改变通道数),并执行平均池化操作输出特征图。与torch.nn.AvgPool2d()不同,torch.nn.AdaptiveAvgPool2d()可处理任意大小的输入特征图,并将其调整为指定的输出尺寸,即,对于每个通道,AdaptiveAvgPool2d会根据指定的输出大小将输入图像划分为分段网格,然后计算每个分段的平均值,这个平均值成为相应的输出像素。。

2.1参数介绍

torch.nn.AdaptiveAvgPool2d(output_size)
  • output_size:指定输出特征图的高度和宽度。
    • 整数:输出特征图的高度和宽度相等。
    • 元组:分别指定输出特征图的高度和宽度。
    • None:输出特征图尺寸和输入保持一致。

  torch.nn.AdaptiveAvgPool2d(output_size)的输入数据尺寸仍为 ( N , C , H , W ) (N,C,H,W) (N,C,H,W),输出数据尺寸由参数决定,但 N 、 C N、C NC不会改变。

2.2代码案例

【输出特征图大小为1x1】

import torch
import torch.nn as nn

# 定义自适应平均池化层,输出尺寸为 1x1
adaptive_pool = nn.AdaptiveAvgPool2d((1, 1))
# 输入特征图尺寸为 1x3x4x4
input_tensor = torch.randn(1, 3, 4, 4)
output_tensor = adaptive_pool(input_tensor)

print("输入:", input_tensor)
print("输出:", output_tensor)

在这里插入图片描述
【输出特征图宽、高不等】

import torch
import torch.nn as nn

# 定义自适应平均池化层,输出尺寸为 1x1
adaptive_pool = nn.AdaptiveAvgPool2d((3, 2))
# 输入特征图尺寸为 1x3x4x4
input_tensor = torch.randn(1, 3, 4, 4)
output_tensor = adaptive_pool(input_tensor)

print("输入:", input_tensor)
print("输出:", output_tensor)

在这里插入图片描述

2.3使用场景

  AdaptiveAvgPool2d()一般在卷积层和全连接层的交汇处使用,以便确定输出到Linear层的大小。下图为VGG中AdaptiveAvgPool2d()的使用:
在这里插入图片描述

torch.nn.functional是PyTorch中的一个模块,用于实现各种神经网络的函数,包括卷积、池化、激活、损失函数等。该模块中的函数是基于Tensor进行操作的,可以灵活地组合使用。 常用函数: 1.卷积函数:torch.nn.functional.conv2d 该函数用于进行二维卷积操作,输入包括输入张量、卷积核张量和卷积核大小等参数。示例代码如下: ```python import torch.nn.functional as F input = torch.randn(1, 1, 28, 28) conv1 = nn.Conv2d(1, 6, 5) output = F.conv2d(input, conv1.weight, conv1.bias, stride=1, padding=2) ``` 2.池化函数:torch.nn.functional.max_pool2d 该函数用于进行二维最大池化操作,输入包括输入张量、池化核大小等参数。示例代码如下: ```python import torch.nn.functional as F input = torch.randn(1, 1, 28, 28) output = F.max_pool2d(input, kernel_size=2, stride=2) ``` 3.激活函数:torch.nn.functional.relu 该函数用于进行ReLU激活操作,输入包括输入张量等参数。示例代码如下: ```python import torch.nn.functional as F input = torch.randn(1, 10) output = F.relu(input) ``` 4.损失函数:torch.nn.functional.cross_entropy 该函数用于计算交叉熵损失,输入包括预测结果和真实标签等参数。示例代码如下: ```python import torch.nn.functional as F input = torch.randn(3, 5) target = torch.tensor([1, 0, 4]) output = F.cross_entropy(input, target) ``` 以上是torch.nn.functional模块中的一些常用函数,除此之外还有很多其他函数,可以根据需要进行查阅。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值