动手学深度学习10:汇聚层(pooling)

通常当我们处理图像时,我们希望逐渐降低隐藏表示的空间分辨率、聚集信息,这样随着我们在神经网络中层叠的上升,每个神经元对其敏感的感受野(输入)就越大。

而我们的机器学习任务通常会跟全局图像的问题有关(例如,“图像是否包含一只猫呢?”),所以我们最后一层的神经元应该对整个输入的全局敏感。通过逐渐聚合信息,生成越来越粗糙的映射,最终实现学习全局表示的目标,同时将卷积图层的所有优势保留在中间层。

除此之外,汇聚层海可以降低卷积层对位置的敏感性,使得模型具有更好的鲁棒性。

最大汇聚层和平均汇聚层

汇聚窗口形状为p×qp \times qp×q的汇聚层称为p×qp \times qp×q汇聚层,汇聚操作称为p×qp \times qp×q汇聚。

import torch
from torch import nn
from d2l import torch as d2ldef 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 YX = torch.tensor([[0.0, 1.0, 2.0], [3.0, 4.0, 5.0], [6.0, 7.0, 8.0]])
print(pool2d(X, (2, 2)))
print(pool2d(X, (2, 2), 'avg'))

与卷积层一样,汇聚层也可以改变输出形状。

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

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

在处理多通道输入数据时,[汇聚层在每个输入通道上单独运算],而不是像卷积层一样在通道上对输入进行汇总。
这意味着汇聚层的输出通道数与输入通道数相同。

小结

  • 对于给定输入元素,最大汇聚层会输出该窗口内的最大值,平均汇聚层会输出该窗口内的平均值。
  • 汇聚层的主要优点之一是减轻卷积层对位置的过度敏感。
  • 我们可以指定汇聚层的填充和步幅。
  • 使用最大汇聚层以及大于1的步幅,可减少空间维度(如高度和宽度)。
  • 汇聚层的输出通道数与输入通道数相同。

动手学深度学习10:汇聚层(pooling)相关推荐

  1. 动手深度学习v2 汇聚层pooling 课后习题

    文章目录 1.你能将平均汇聚层作为卷积层的特殊情况实现吗? 2.你能将最大汇聚层作为卷积层的特殊情况实现吗? 3.假设汇聚层的输入大小为 c×h×w ,则汇聚窗口的形状为 ph×pw ,填充为 (ph ...

  2. 送10本今年最火的《动手学深度学习》

    点击我爱计算机视觉标星,更快获取CVML新技术 52CV曾经多次介绍FlyAI机器学习竞赛平台,不少粉丝也曾在FlyAI拿到现金奖励. 本次52CV & FlyAI联合送书,CV君查找了两天, ...

  3. 【动手学深度学习PyTorch版】12 卷积层

    上一篇移步[动手学深度学习PyTorch版]11 使用GPU_水w的博客-CSDN博客 目录 一.卷积层 1.1从全连接到卷积 ◼ 回顾单隐藏层MLP ◼ Waldo在哪里? ◼ 原则1-平移不变性 ...

  4. 【动手学深度学习PyTorch版】15 池化层

    上一篇请移步[动手学深度学习PyTorch版]14 卷积层里的多输入多输出通道_水w的博客-CSDN博客 目录 一.池化层 1.1 池化层 ◼池化层原因 ◼ 二维最大池化 1.2 填充.步幅与多个通道 ...

  5. 【动手学深度学习PyTorch版】13 卷积层的填充和步幅

    上一篇移步[动手学深度学习PyTorch版]12 卷积层_水w的博客-CSDN博客 目录 一.卷积层的填充和步幅 1.1 填充 1.2 步幅 1.3 总结 二.代码实现填充和步幅(使用框架) 一.卷积 ...

  6. 【动手学深度学习】(task123)注意力机制剖析

    note 将注意力汇聚的输出计算可以作为值的加权平均,选择不同的注意力评分函数会带来不同的注意力汇聚操作. 当查询和键是不同长度的矢量时,可以使用可加性注意力评分函数.当它们的长度相同时,使用缩放的& ...

  7. 【动手学深度学习PyTorch版】19 网络中的网络 NiN

    上一篇请移步[动手学深度学习PyTorch版]18 使用块的网络 VGG_水w的博客-CSDN博客 目录 一.网络中的网络 NiN 1.1 NiN ◼ 全连接层的问题 ◼ 大量的参数会带来很多问题 ◼ ...

  8. 李沐动手学深度学习V2-全卷积网络FCN和代码实现

    一.全卷积网络FCN 1. 介绍 语义分割是对图像中的每个像素分类,全卷积网络(fully convolutional network,FCN)采用卷积神经网络实现了从图像像素到像素类别的变换 ,与前 ...

  9. 资源 | 李沐等人开源中文书《动手学深度学习》预览版上线

    来源:机器之心 本文约2000字,建议阅读10分钟. 本文为大家介绍了一本交互式深度学习书籍. 近日,由 Aston Zhang.李沐等人所著图书<动手学深度学习>放出了在线预览版,以供读 ...

最新文章

  1. jmx使用应该注意的基本规范
  2. 张岩 重庆大学 计算机学院,扬帆起,乘东风,气芳华——记重庆大学计算机学院新老生交流会...
  3. JAVA--虚函数,抽象函数,抽象类,接口
  4. 福利好礼现金大奖等你来→首届 .NET Conf China Hackathon 火热报名中!
  5. python创建tcp socket_Python Socket如何建立TCP连接
  6. 每日一题(22)——malloc与free(三)
  7. 数据可视化揭晓NBA球星顶薪背后的真相
  8. DIGITS使用步骤
  9. logistic回归详解
  10. redis 默认过期策略_redis过期策略
  11. 《Python渗透测试编程技术:方法与实践》:信息的利用(进阶)
  12. Boost库系列:asio总结
  13. iphone8引发的AR大事件
  14. 关于dd命令的使用以及详解
  15. 【集大成篇】数据类型( C、C++、Java )对比
  16. 程序员版「成语新解」,万万没想到你们竟是这样的……
  17. 2022央企施工企业加速推进数字化转型赋能高质量发展
  18. jQuery Steps插入或移除步骤
  19. WPF 项目开发入门(一) 安装运行
  20. C语言编写冰雹猜想(角谷猜想)

热门文章

  1. 利用js传一个对象到后台
  2. 【嵌入式原理与应用】南航嵌入式——实验例程
  3. 这道题目该怎么做啊不会弄
  4. android媒体播放器课程设计,基于android的多媒体播放器课程设计报告.doc
  5. python实现股票选取
  6. [解决问题]ImportError while loading conftest
  7. SM2 js 和 SM2 java前后端整合配套使用
  8. wps合并所有sheet页_wps表格多个sheet合并
  9. Codeforces 355C 策略题
  10. 《道德经》第五十四章