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 ,L o u t)的计算方式如下:

参数说明:

|----------------|------------------------|------------------------------------|-----------------|
| 参数名 | 参数类型 | 说明 | 默认值 |
| 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 ,L o u t)

应用示例:

# pool of size=3, stride=2
m = nn.MaxPool1d(3, stride=2)
input = Variable(torch.Tensor([[[1,2,3,4,5,6,7]]]))
output = m(input)
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 ,L o u t)和池化窗口大小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 ,L o u t) | | | |
| L o u t =f l o o r ((L i n +2∗p a d d i n gk e r n e l s i z e )/s t r i d e+1) | | | |

应用示例:

# pool with window of size=3, stride=2
m = nn.AvgPool1d(3, stride=2)
output = m(Variable(torch.Tensor([[[1,2,3,4,5,6,7]]])))
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!

代码实战

import torch
import torch.nn as nn
from torch.autograd import Variable
x = Variable(torch.randn(10, 3, 28, 28))

#/********** Begin *********/

#创建一个in_channels=3, out_channels=32, kernel_size=(3, 3), stride=1, padding=1, bias=True的Conv2d变量conv
conv=nn.Conv2d(3,32,(3,3),1,1,bias=True)

#创建一个kernel_size=(2, 2), stride=2的MaxPool2d变量pool
pool=nn.MaxPool2d((2,2),2)

#对x应用卷积和最大池化操作并赋值给变量outpout_pool
outpout_pool=pool(conv(x))

#输出 outpout_pool 的大小,要求输出打印不换行
print('Pool output size : ',outpout_pool.size())
#/********** End *********/
相关推荐
小众AI2 小时前
AI-on-the-edge-device - 将“旧”设备接入智能世界
人工智能·开源·ai编程
舟寒、2 小时前
【论文分享】Ultra-AV: 一个规范化自动驾驶汽车纵向轨迹数据集
人工智能·自动驾驶·汽车
梦云澜5 小时前
论文阅读(十二):全基因组关联研究中生物通路的图形建模
论文阅读·人工智能·深度学习
远洋录5 小时前
构建一个数据分析Agent:提升分析效率的实践
人工智能·ai·ai agent
IT古董6 小时前
【深度学习】常见模型-Transformer模型
人工智能·深度学习·transformer
沐雪架构师7 小时前
AI大模型开发原理篇-2:语言模型雏形之词袋模型
人工智能·语言模型·自然语言处理
python算法(魔法师版)8 小时前
深度学习深度解析:从基础到前沿
人工智能·深度学习
kakaZhui8 小时前
【llm对话系统】大模型源码分析之 LLaMA 位置编码 RoPE
人工智能·深度学习·chatgpt·aigc·llama
struggle20259 小时前
一个开源 GenBI AI 本地代理(确保本地数据安全),使数据驱动型团队能够与其数据进行互动,生成文本到 SQL、图表、电子表格、报告和 BI
人工智能·深度学习·目标检测·语言模型·自然语言处理·数据挖掘·集成学习
佛州小李哥9 小时前
通过亚马逊云科技Bedrock打造自定义AI智能体Agent(上)
人工智能·科技·ai·语言模型·云计算·aws·亚马逊云科技