Pytorch平均池化nn.AvgPool2d()使用记录

这篇具有很好参考价值的文章主要介绍了Pytorch平均池化nn.AvgPool2d()使用记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【pytorch官方文档】:https://pytorch.org/docs/stable/generated/torch.nn.AvgPool2d.html?highlight=avgpool2d#torch.nn.AvgPool2d

torch.nn.AvgPool2d()

作用

在由多通道组成的输入特征中进行2D平均池化计算

函数

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

参数

Args:
    kernel_size: 滑窗(池化核)大小
    stride: 滑窗的移动步长, 默认值为kernel_size
    padding: 在输入信号两侧的隐式零填充数量
    ceil_mode: 决定计算输出的形状时是向上取整还是向下取整, 默认为False(向下取整)
    count_include_pad: 在平均池化计算中是否包含零填充, 默认为True(包含零填充)
    divisor_override: 如果指定了, 它将被作为平均池化计算中的除数, 否则将使用池化区域的大小作为平均池化计算的除数

公式

Pytorch平均池化nn.AvgPool2d()使用记录

代码实例

假设输入特征为S,输出特征为D

情况一

ceil_mode=False, count_include_pad=True(计算时包含零填充)

import torch
import torch.nn as nn
import numpy as np


# 生成一个形状为1*1*3*3的张量
x1 = np.array([
              [1,2,3],
              [4,5,6],
              [7,8,9]
            ])
x1 = torch.from_numpy(x1).float()
x1 = x1.unsqueeze(0).unsqueeze(0)

# 实例化二维平均池化
avgpool1 = nn.AvgPool2d(kernel_size=3, stride=2, padding=1, ceil_mode=False, count_include_pad=True)
y1 = avgpool1(x1)
print(y1)

# 打印结果
'''
tensor([[[[1.3333, 1.7778],
          [2.6667, 3.1111]]]])
'''

计算过程:

输出形状= floor[(3 - 3 + 2) / 2] + 1 = 2,

D[1,1] = (0+0+0+0+1+2+0+4+5) / 9 = 1.3333,

D[1,2] = (0+0+0+2+3+0+5+6+0) / 9 = 1.7778,

D[2,1] = (0+4+5+0+7+8+0+0+0) / 9 = 2.6667,

D[2,2] = (5+6+0+8+9+0+0+0+0) / 9 = 3.1111.

情况二

ceil_mode=False, count_include_pad=False(计算时不包含零填充)

avgpool2 = nn.AvgPool2d(kernel_size=3, stride=2, padding=1, ceil_mode=False, count_include_pad=False)

y2 = avgpool2(x1)
print(y2)

# 打印结果
'''
tensor([[[[3., 4.],
          [6., 7.]]]])
'''

计算过程:

输出形状= floor[(3 - 3 + 2) / 2] + 1 = 2,

D[1,1] = (1+2+4+5) / 4 = 3,

D[1,2] = (2+3+5+6) / 4 = 4,

D[2,1] = (4+5+7+8) / 4 = 6,

D[2,2] = (5+6+8+9) / 4 = 7.

情况三

ceil_mode=False, count_include_pad=False, divisor_override=2(将计算平均池化时的除数指定为2)

avgpool3 = nn.AvgPool2d(kernel_size=3, stride=2, padding=1, ceil_mode=False, count_include_pad=False, divisor_override=2)

y3 = avgpool3(x1)
print(y3)

# 打印结果
'''
tensor([[[[ 6.,  8.],
          [12., 14.]]]])
'''

计算过程:

输出形状= floor[(3 - 3 + 2) / 2] + 1 = 2,

D[1,1] = (1+2+4+5) / 2 = 6,

D[1,2] = (2+3+5+6) / 2 = 8,

D[2,1] = (4+5+7+8) / 2 = 12,

D[2,2] = (5+6+8+9) / 2 = 14.

情况四

ceil_mode=True, count_include_pad=True, divisor_override=None(在计算输出的形状时向上取整)

x2 = np.array([
              [1,2,3,4],
              [5,6,7,8],
              [9,10,11,12],
              [13,14,15,16]
              ])
x2 = torch.from_numpy(x2).reshape(1,1,4,4).float()
avgpool4 = nn.AvgPool2d(kernel_size=3, stride=2, padding=1, ceil_mode=True)
y4 = avgpool4(x2)
print(y4)

# 打印结果
'''
tensor([[[[ 1.5556,  3.3333,  2.0000],
          [ 6.3333, 11.0000,  6.0000],
          [ 4.5000,  7.5000,  4.0000]]]])
'''

计算过程:

输出形状 = ceil[(4 - 3 + 2) / 2] + 1 = 3,

D[1,1] = (0+0+0+0+1+2+0+5+6) / 9 = 1.5556,

D[1,2] = (0+0+0+2+3+4+6+7+8) / 9 = 3.3333,

Pytorch平均池化nn.AvgPool2d()使用记录

D[1,3] = (0+0+4+0+8+0) / 6 = 2,

D[2,1] = (0+5+6+0+9+10+0+13+14) / 9 = 6.3333,

D[2,2] = (6+7+8+10+11+12+14+15+16) / 9 = 11,

Pytorch平均池化nn.AvgPool2d()使用记录

D[2,3] = (8+0+12+0+16+0) / 6 = 6,

Pytorch平均池化nn.AvgPool2d()使用记录

D[3,1] = (0+13+14+0+0+0) / 6 = 4.5,

D[3,2] = (14+15+16+0+0+0) / 6 = 7.5,

Pytorch平均池化nn.AvgPool2d()使用记录

D[3,3] = (16+0+0+0) / 4 = 4.文章来源地址https://www.toymoban.com/news/detail-418522.html

到了这里,关于Pytorch平均池化nn.AvgPool2d()使用记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Pytorch学习笔记(5):torch.nn---网络层介绍(卷积层、池化层、线性层、激活函数层)

     一、卷积层—Convolution Layers  1.1 1d / 2d / 3d卷积 1.2 卷积—nn.Conv2d() nn.Conv2d 1.3 转置卷积—nn.ConvTranspose nn.ConvTranspose2d  二、池化层—Pooling Layer (1)nn.MaxPool2d (2)nn.AvgPool2d (3)nn.MaxUnpool2d  三、线性层—Linear Layer  nn.Linear  四、激活函数层—Activate Layer (1)nn.Sigmoid  (

    2024年01月20日
    浏览(41)
  • 【PyTorch】nn.Conv2d函数详解

    CONV2D官方链接 in_channels:输入的通道数,RGB 图像的输入通道数为 3 out_channels:输出的通道数 kernel_size:卷积核的大小,一般我们会使用 5x5、3x3 这种左右两个数相同的卷积核,因此这种情况只需要写 kernel_size = 5这样的就行了。如果左右两个数不同,比如3x5的卷积核,那么写作

    2024年01月22日
    浏览(36)
  • pytorch中 nn.Conv2d的简单用法

    参数介绍 : in_channels :卷积层输入通道数 out_channels :卷积层输出通道数 kernel_size :卷积层的卷积核大小 padding :填充长度 stride :卷积核移动的步长 dilation :是否采用空洞卷积 groups :是否采用分组卷积 bias :是否添加偏置参数 padding_mode : padding 的模式 如果输入大小为:

    2024年02月11日
    浏览(40)
  • 【深度学习】特征图的上采样(nn.Upsample)和转置卷积(nn.ConvTranspose2d) | pytorch

    这次就不废话了,我想赶在10点前回去洗头(现在9.17,还差一篇文章) 该函数有四个参数: 参数的介绍如下: 稍微翻译一下: 参数: 1)size(int或Tuple[int]或Tuple[int,int]或Tupple[int,int,int],可选):输出空间大小 2)scale_factor(float或Tuple[floot]或Tuple[floot,float]或Tuple[floo

    2023年04月08日
    浏览(43)
  • 全局平均池化(Global Average Pooling)

    最近看论文,看到了全局平均池化,之间见过这东西,但是没有仔细了解,今天学习一下,并记录下来,方便以后查阅。 出处 :Lin M, Chen Q, Yan S. Network in network[J]. arXiv preprint arXiv:1312.4400, 2013. 定义 :将特征图所有像素值相加求平局,得到一个数值,即用该数值表示对应特征

    2024年01月16日
    浏览(31)
  • 全局平均池化(Global average pooling, GAP)

    与average pooling不同的是: (1) average pooling 是可以根据设置的窗口大小进行下采样操作的,而 global average pooling 相当于是 average pooling 的一种特殊情况,它是以特征图的大小设置的窗口大小; (2) average pooling or max pooling 一般用于在卷积提取网络后形成全局特征的重要部件,

    2024年02月03日
    浏览(34)
  • PyTorch入门学习(九):神经网络-最大池化使用

    目录 一、数据准备 二、创建神经网络模型 三、可视化最大池化效果 一、数据准备 首先,需要准备一个数据集来演示最大池化层的应用。在本例中,使用了CIFAR-10数据集,这是一个包含10个不同类别图像的数据集,用于分类任务。我们使用PyTorch的 torchvision 库来加载CIFAR-10数据

    2024年02月07日
    浏览(31)
  • Pytorch中最大池化层Maxpool的作用说明及实例使用(附代码)

    目录 1. 池化的功能 2. 神经原网络设定最大卷积层的作用 3. torch.nn.MaxPool2d() 4. 使用torch.nn.MaxPool2d()实战  3. Pytorch源码 1. 池化的功能 先通过与卷积的相同点及不同点说明池化的功能。 池化与卷积的共同点: 池化操作也是原图像矩阵(或特征图矩阵)与一个固定形状的窗口(

    2024年02月05日
    浏览(47)
  • pytorch中nn.Parameter()使用方法

    对于 nn.Parameter() 是pytorch中定义 可学习参数 的一种方法,因为我们在搭建网络时,网络中会存在一些矩阵,这些矩阵内部的参数是可学习的,也就是可梯度求导的。 对于一些常用的网络层,例如 nn.Conv2d()卷积层 、 nn.LInear()线性层 、 nn.LSTM()循环网络层 等,这些网络层在pyt

    2024年02月13日
    浏览(35)
  • pytorch中nn.ModuleList()使用方法

    我们可以将我们需要的层放入到一个集合中,然后将这个集合作为参数传入nn.ModuleList中,但是这个子类并不可以直接使用,因为这个子类并没有实现forward函数,所以要使用还需要放在继承了nn.Module的模型中进行使用。

    2024年02月07日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包