当前位置: 首页 > news >正文

动手学深度学习(pytorch)学习记录25-汇聚层(池化层)[学习记录]

目录

  • 汇聚层(池化层):
  • 填充和步幅
  • 多通道

汇聚层(池化层):

降低卷积层对位置的敏感性,同时降低对空间降采样表示的敏感性。
最大汇集层
汇聚层和卷积层的运动方式一样,从左上角向右下角移动指定步幅,汇聚层执行的是“采样”操作。 汇聚层是没有参数的。

import torch
from torch import nn

定义一个池化操作,X是张量,pool_size是汇聚层大小,mode默认为max即输出为输入区域的最大值,mode设置为avg时,输出为输入区域的平均值。

def pool2d(X, pool_size, mode='max'):p_h, p_w = pool_sizeY = torch.zeros((X.shape[0] - p_h + 1, X.shape[1] - p_w + 1))for i in range(Y.shape[0]):for j in range(Y.shape[1]):if mode == 'max':Y[i, j] = X[i: i + p_h, j: j + p_w].max()elif mode == 'avg':Y[i, j] = X[i: i + p_h, j: j + p_w].mean()return Y

输入张量,验证最大汇聚层

X = torch.tensor([[0.0, 1.0, 2.0], [3.0, 4.0, 5.0], [6.0, 7.0, 8.0]])
print(X)
pool2d(X, (2, 2))
tensor([[0., 1., 2.],[3., 4., 5.],[6., 7., 8.]])
tensor([[4., 5.],[7., 8.]])

验证平均汇聚层

pool2d(X, (2, 2), 'avg')
tensor([[2., 3.],[5., 6.]])

填充和步幅

X = torch.arange(16, dtype=torch.float32).reshape((1, 1, 4, 4))
X
tensor([[[[ 0.,  1.,  2.,  3.],[ 4.,  5.,  6.,  7.],[ 8.,  9., 10., 11.],[12., 13., 14., 15.]]]])

默认情况下,深度学习框架中的步幅与汇聚窗口的大小相同,如果使用形状为(3,3)的汇聚层窗口,则得到的步幅大小为(3,3)。

pool2d = nn.MaxPool2d(3)
pool2d(X)
tensor([[[[10.]]]])

手动设置填充和步幅

pool2d = nn.MaxPool2d(3, padding=1, stride=2)
pool2d(X)
tensor([[[[ 5.,  7.],[13., 15.]]]])

自定义汇聚层窗口、填充、步幅

pool2d = nn.MaxPool2d((2, 3), stride=(2, 3), padding=(0, 1))
pool2d(X)
tensor([[[[ 5.,  7.],[13., 15.]]]])

多通道

在通道维度上连结张量X和X + 1,以构建具有2个通道的输入。

X = torch.cat((X, X + 1), 1)
X
tensor([[[[ 0.,  1.,  2.,  3.],[ 4.,  5.,  6.,  7.],[ 8.,  9., 10., 11.],[12., 13., 14., 15.]],[[ 1.,  2.,  3.,  4.],[ 5.,  6.,  7.,  8.],[ 9., 10., 11., 12.],[13., 14., 15., 16.]]]])

汇聚后输出通道的数量仍是2

pool2d = nn.MaxPool2d(3, padding=1, stride=2)
pool2d(X)
tensor([[[[ 5.,  7.],[13., 15.]],[[ 6.,  8.],[14., 16.]]]])

封面图片来源
文章用图与封面一致。
欢迎点击我的主页查看更多文章。
本人学习地址https://zh-v2.d2l.ai/
恳请大佬批评指正。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • AIGC与数据分析融合,引领商业智能新变革(TOP企业实践)
  • iOS——GCD再学习
  • rexroth拧紧系统
  • 使用EDM邮件群发营销管理平台发送推广邮件在什么时间段发信效果最好
  • 【C++ Primer Plus习题】14.1
  • pytest压力测试:不断发送数据,直到发现数据丢失
  • 【AcWing】861. 二分图的最大匹配(匈牙利算法)
  • python-网页自动化(二)
  • 强烈推荐!分享5款ai论文生成软件
  • 修改密码模块中对轮询接口响应用户失效问题的处理
  • Android13 Hotseat客制化--Hotseat修改布局、支持滑动、去掉开机弹动效果、禁止创建文件夹
  • GitHub图床
  • pytorch pyro 贝叶斯神经网络 bnn beyesean neure network svi ​定制SVI目标和培训循环,变更推理
  • 经验笔记:前端堆栈分配
  • 批量下载,控制并发(利用promise 做需求池队列)
  • Electron入门介绍
  • GitUp, 你不可错过的秀外慧中的git工具
  • java小心机(3)| 浅析finalize()
  • magento2项目上线注意事项
  • React Native移动开发实战-3-实现页面间的数据传递
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • Vue 重置组件到初始状态
  • 观察者模式实现非直接耦合
  • 后端_ThinkPHP5
  • 警报:线上事故之CountDownLatch的威力
  • 力扣(LeetCode)22
  • 浏览器缓存机制分析
  • 浅谈Golang中select的用法
  • 数据结构java版之冒泡排序及优化
  • 微信小程序设置上一页数据
  • 在Mac OS X上安装 Ruby运行环境
  • 最近的计划
  • 【云吞铺子】性能抖动剖析(二)
  • ionic异常记录
  • ​比特币大跌的 2 个原因
  • ​批处理文件中的errorlevel用法
  • (9)STL算法之逆转旋转
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (九)One-Wire总线-DS18B20
  • (五)c52学习之旅-静态数码管
  • (转载)从 Java 代码到 Java 堆
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .NET MAUI Sqlite数据库操作(二)异步初始化方法
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .net分布式压力测试工具(Beetle.DT)
  • @Bean有哪些属性
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [20140403]查询是否产生日志
  • [c++] 什么是平凡类型,标准布局类型,POD类型,聚合体
  • [C++] 小游戏 斗破苍穹 2.11.6 版本 zty出品
  • [CF]Codeforces Round #551 (Div. 2)