• Pytorch 之torch.nn初探 池化--Pooling Layers


    任务描述

    本关任务:本关提供了一个Variable 类型的变量x,要求按照条件创建一个Conv2d变量conv,一个MaxPool2d变量pool,对x应用卷积和最大池化操作并赋值给变量outpout_pool,并输出outpout_pool 的大小。

    相关知识

    Pytorch 中池化分为两种:

    • 最大池化MaxPool
    • 平均池化 AvgPool

    MaxPool

    MaxPool

    描述

    MaxPool1d

    对输入信号应用1维最大池化操作

    MaxPool2d

    对输入信号应用2维最大池化操作

    MaxPool3d

    对输入信号应用3维最大池化操作

    下面以MaxPool1d做详细介绍,2维和3维只是在1维的基础上计算了长宽、长宽高的池化。

    函数定义:

    torch.nn.MaxPool1d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)

    若输入大小为: (N,C,L),则输出大小为:(N,C,Lout)的计算方式如下:

    参数说明:

    参数名

    参数类型

    说明

    默认值

    kernel_size

    int或tuple

    最大池化窗口的大小

    stride

    int or tuple, optional

    滑动窗口

    默认为 kernel_size

    padding

    int or tuple, optional

    在两侧添加隐式零进行填充

    dilation

    int or tuple, optional

    控制窗口中元素步幅的参数

    return_indices

    boolean ,optional

    如果等于True,会返回输出最大值的序号,对于上采样操作会有帮助

    ceil_mode

    boolean ,optional

    如果等于True,计算输出信号大小的时候,会使用向上取整(ceil)

    默认的向下取整(floor)

    维度: Input: (N,C,L) Output: (N,C,Lout)

    应用示例:

    1. # pool of size=3, stride=2
    2. m = nn.MaxPool1d(3, stride=2)
    3. input = Variable(torch.Tensor([[[1,2,3,4,5,6,7]]]))
    4. output = m(input)
    5. print(output.size())

    输出结果:

    Variable containing:(0 ,.,.) = 3 5 7[torch.FloatTensor of size 1x1x3]

    AvgPool

    AvgPool

    描述

    AvgPool1d

    对输入信号应用1维平均池化操作

    AvgPool2d

    对输入信号应用2维平均池化操作

    AvgPool3d

    对输入信号应用3维平均池化操作

    下面以AvgPool1d做详细介绍,2维和3维只是在1维的基础上计算了长宽、长宽高的池化。

    函数定义:

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

    若输入大小: (N,C,L),输出大小(N,C,Lout)和池化窗口大小k的关系是

    如果填充不为零,则输入在两侧都会隐式填充零。

    参数kernel_size,stride,padding可以是一个int或一个元素的元组。

    参数说明:

    参数名

    参数类型

    说明

    默认值

    kernel_size

    int或tuple

    最大池化窗口的大小

    stride

    int or tuple, optional

    滑动窗口

    默认为 kernel_size

    padding

    int or tuple, optional

    在两侧添加隐式零进行填充

    ceil_mode

    boolean ,optional

    如果等于True,计算输出信号大小的时候,会使用向上取整(ceil)

    默认的向下取整(floor)

    count_include_pad

    boolean ,optional

    如果等于True,将在求平均的计算中用0填充

    维度

    Input: (N,C,L)

    Output: (N,C,Lout)

    Lout=floor((Lin+2∗paddingkernelsize)/stride+1)

    应用示例:

    1. # pool with window of size=3, stride=2
    2. m = nn.AvgPool1d(3, stride=2)
    3. output = m(Variable(torch.Tensor([[[1,2,3,4,5,6,7]]])))
    4. print(output)

    输出结果:

    Variable containing:(0 ,.,.) = 2 4 6[torch.FloatTensor of size 1x1x3]

    编程要求

    本关涉及的代码文件为pool.py,本次编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下:

    • 创建一个in_channels=3, out_channels=32, kernel_size=(3, 3), stride=1, padding=1, bias=True的Conv2d变量conv;
    • 创建一个kernel_size=(2, 2), stride=2的MaxPool2d变量pool;
    • 对x应用卷积和最大池化操作并赋值给变量outpout_pool;
    • 输出 outpout_pool 的大小。
    • 具体请参见后续测试样例。

    测试说明

    测试过程:

    • 本关涉及的测试文件为pool.py,运行用户填写后的程序判断正误。
    • 测试程序将检测两个方面:是否包含特定的代码行以及程序的输出是否正确,若两个方面均正确则输出下面的预期输出,否则报错。
    • 请注意输出格式及规范。
    • 注意,在声明变量时请按照提示命名,否则将会报错。

    以下是测试样例:

    测试输入: 预期输出:

    Pool output size : torch.Size([10, 32, 14, 14])

    Congratulation!

    代码实战

    1. import torch
    2. import torch.nn as nn
    3. from torch.autograd import Variable
    4. x = Variable(torch.randn(10, 3, 28, 28))
    5. #/********** Begin *********/
    6. #创建一个in_channels=3, out_channels=32, kernel_size=(3, 3), stride=1, padding=1, bias=True的Conv2d变量conv
    7. conv=nn.Conv2d(3,32,(3,3),1,1,bias=True)
    8. #创建一个kernel_size=(2, 2), stride=2的MaxPool2d变量pool
    9. pool=nn.MaxPool2d((2,2),2)
    10. #对x应用卷积和最大池化操作并赋值给变量outpout_pool
    11. outpout_pool=pool(conv(x))
    12. #输出 outpout_pool 的大小,要求输出打印不换行
    13. print('Pool output size : ',outpout_pool.size())
    14. #/********** End *********/
  • 相关阅读:
    C和指针 第11章 动态内存分配 11.10 问题
    SpringMVC中的注解配置
    单例模式在多线程下的数据修改问题(即线程不安全),spring中是如何保证单例的线程安全问题的
    高性能MySQL实战(三):性能优化 | 京东物流技术团队
    Kafka 集群如何实现数据同步?
    第十六章:构建n(5,7)阶素数幻方
    libplctag开源库的API介绍
    ftp发布服务器
    第56篇-某创网加速乐cookie值分析【2023-09-15】
    SQL教程之 了解 SQL EXISTS 子句,当你应该考虑使用它时
  • 原文地址:https://blog.csdn.net/weixin_50917576/article/details/137998788