《动手学深度学习 Pytorch版》 6.5 汇聚层

2023-11-17

import torch
from torch import nn
from d2l import torch as d2l

6.5.1 最大汇聚和平均汇聚

汇聚层和卷积层类似,区别在于汇聚层不带包含参数,汇聚操作是确定性的,通常计算汇聚窗口中所有元素的最大值或平均值,即最大汇聚和平均汇聚。

def pool2d(X, pool_size, mode='max'):
    p_h, p_w = pool_size  # 和互相关运算差不多
    Y = 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]])
pool2d(X, (2, 2)), pool2d(X, (2, 2), 'avg')
(tensor([[4., 5.],
         [7., 8.]]),
 tensor([[2., 3.],
         [5., 6.]]))

6.5.2 填充和步幅

汇聚层和卷积层一样可以通过填充和步幅获得所需的输出形状。

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.]]]])
pool2d = nn.MaxPool2d(3)  # 默认情况下,步幅为 (3,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.]]]])

6.5.3 多个通道

汇聚层在每个通道上单独计算,也就是说输入通道数和输出通道数相同。

X = torch.cat((X, X + 1), 1) # 加上两个通道
X, X.shape
(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.]]]]),
 torch.Size([1, 2, 4, 4]))
pool2d = nn.MaxPool2d(3, padding=1, stride=2)
pool2d(X)
tensor([[[[ 5.,  7.],
          [13., 15.]],

         [[ 6.,  8.],
          [14., 16.]]]])

练习

(1)尝试将平均汇聚层作为卷积层的特例情况实现。

(2)尝试将最大汇聚层作为卷积层的特例情况实现。

不会


(3)假设汇聚层的输入大小为 c × h × w c\times h\times w c×h×w,则汇聚窗口的形状为 p h × p w p_h\times p_w ph×pw,填充为 ( p h , p w ) (p_h,p_w) (ph,pw),步幅为 ( s h , s w ) (s_h,s_w) (sh,sw)。这个汇聚层的计算成本是多少?

⌊ ( n h − k h + p h + s h ) / s h ⌋ × ⌊ ( n w − k w + p w + s w ) / s w ⌋ × c × p h × p w \left\lfloor(n_h-k_h+p_h+s_h)/s_h\right\rfloor\times\left\lfloor(n_w-k_w+p_w+s_w)/s_w\right\rfloor\times c\times p_h\times p_w (nhkh+ph+sh)/sh×(nwkw+pw+sw)/sw×c×ph×pw


(4)为什么最大汇聚层和平均汇聚层的工作方式不同?

啥叫工作方式不同?需要最大就最大,需要平均就平均呗。


(5)我们是否需要最小汇聚层?可以用已知函数替代它吗?

最小没必要吧,带0的全给整成0了,没意义。


(6)除了平均汇聚层和最大汇聚层,是否还有其他函数可以考虑?(提示:回想一下 softmax。)为什么它就不流行?

卷积很大程度上减少了计算量,把计算量再拉回去属于是自断优点了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《动手学深度学习 Pytorch版》 6.5 汇聚层 的相关文章

随机推荐

  • vscode 添加万能头文件#include<bits/stdc++.h>

    文章目录 前言 配置 前言 有一天我在愉快的刷着leetcode 突然觉得写头文件好TM麻烦 于是就想着配置一下万能头文件 配置的过程我觉得还是记录一下吧 很多初学者可能会犯迷糊 配置 首先 我们要清楚 我们在vscode上写C C 程序的
  • 给element datetimepicker 设置默认当前时间

    else里面就是设置默认当前时间15分钟后 watch row val this liveTime 当时间不为空时才回显 if val liveBeginTime val liveEndTime this liveTime push new
  • 阿里云P2P内容分发网络(PCDN)实操手册

    一 PCDN是定义 P2P 内容分发网络 英文名 P2P CDN 以下简称PCDN 是以P2P技术为基础 通过挖掘利用电信边缘网络海量碎片化闲置资源而构建的低成本高品质内容分发网络服务 客户通过集成PCDN SDK 以下简称SDK 接入该服
  • 关于scroll和mousewheel事件的问题

    需要注意的点 火狐的鼠标滚轮事件是DOMMouseScroll 事件参数兼容 e window event e 下面省略 preventDefault 函数取消的是默认事件 不会把我们自己添加的事件处理删除 实验开始 在下面验证例子的基础上
  • Android仿网页分页效果

    比较简单的一个方法 使用gridview来做的效果 1 在adapter中的getCount中判断list size是否你需要显示的长度 小于使用list size大于使用你需要的长度 我这里的长度为10 所以判断的为10 2 在adapt
  • 深度学习的核心理念

    深度学习的方法 核心是拟合 拟合的意思 是指在一个被定义的度量空间里 用一个函数 比较准确地表示一堆现有的空间数据 让拟合后误差尽量变小 贴合的越近越好 为何又说深度学习是统计呢 这个观点 跟拟合是同一个意思的不同表述 一理各表 在一个 给
  • GIoU详解

    Generalized Intersection over Union A Metric and A Loss for Bounding Box Regression 一 动机 在目标检测任务中 回归loss相同的情况下 IoU却可能大不相
  • LeetCode第125题解析

    给定一个字符串 验证它是否是回文串 只考虑字母和数字字符 可以忽略字母的大小写 说明 本题中 我们将空字符串定义为有效的回文串 示例 1 输入 A man a plan a canal Panama 输出 true 示例 2 输入 race
  • 梦想世界3手游服务器维护,2021年4月1日官方维护公告

    2021年4月1日官方维护公告 发布时间 2021 04 01 新增内容 1 主角换新 新增主角新模型资源 维护前已有角色玩家可在 奖励 主角换新 界面进行转换操作 可选择保留现有模型 维护后新创建的角色将默认使用主角新模型 2 仙兽转换功
  • excel导出内存溢出_轻松解决PHPExcel导出10W行超时和内存溢出问题

    专题1 PHPExcel的疑难杂症各个击破 本文使用了一个轻量级的PHP的Excel操作库 PHP XLSXWriter 一 解决行的问题 10w行excel数据导出仅需要5 26秒 再也不用担心excel导出超过1w行就超时 php in
  • 情感分析研究的新视野

    点击上方 AI公园 关注公众号 选择加 星标 或 置顶 作者 Caroline Brun 编译 ronghuaiyang 导读 对情感分析研究领域做了非常好的总结和展望 假新闻 受欢迎程度 健康状况 金融和社会风险 情感分析正在帮助理解这一
  • 入门级动态规划五步法(斐波那契数)

    1 确定dp数组 dp table 以及下标的含义 2 确定递推公式 3 dp数组如何初始化 4 确定遍历顺序 5 举例推导dp数组 class Solution def fib self n int gt int if n 0 retur
  • 记一次 Centos7 cmake 版本升级(由 v2.8.12.2 升级至 v3.14.5)

    一 基本信息说明 官网 https cmake org 下载地址 https cmake org files 二 系统 工具 1 系统版本 Centos7 5 CentOS 7 x86 64 Minimal 1804 2 工具 xshell
  • synchronized 怎么使用

    文章目录 前言 通过一系列的例子 了解synchronized 使用 总结 前言 上一篇了解了synchronized 但是呢光懂理论没用 关键是要会用 用demo的形式写一下各种使用场景 这么一来 就会对synchronized的使用更加
  • 遗传算法训练人工神经网络 MATLAB实现

    参考 遗传算法优化BP神经网络 写在前面 为了完成建模课的作业 找了很久才找到可以使用的一个源码和这个很好的博客 在此记录一下 这是一个利用遗传算法实现BP人工神经网络的matlab代码 可用于实现2层 隐藏层数 1 不计输入层 则共2层
  • 用jsp实现登录,登录成功则跳转到登录成功页面,失败则跳转到失败页面

    login jsp
  • 码云实战(二)——新增仓库和删除仓库

    文章目录 前言 一 创建仓库 1 新增仓库 2 填写仓库的相关信息 3 创建效果 二 删除仓库 总结 前言 本系列文章主要记录日常使用中碰到的码云的相关问题 一 创建仓库 1 新增仓库 在gitee网站右上角的 点击 新建仓库 2 填写仓库
  • Python深度学习篇一《什么是深度学习》

    在过去的几年里 人工智能 AI 一直是媒体大肆炒作的热点话题 机器学习 深度学习 和人工智能都出现在不计其数的文章中 而这些文章通常都发表于非技术出版物 我们的未来被描绘成拥有智能聊天机器人 自动驾驶汽车和虚拟助手 这一未来有时被渲染成可怕
  • Linux怎么使用U盘

    方案一 Linux不像Windows一样 接上新硬件后可以自动识别 在Linux下无法自动识别新硬件的 需要手动去识别 USB移动存储设备通常被识别为sda1 具体可以通过fdisk l命令查询 在使用U盘前 我们先要为外挂点新建一个子目录
  • 《动手学深度学习 Pytorch版》 6.5 汇聚层

    import torch from torch import nn from d2l import torch as d2l 6 5 1 最大汇聚和平均汇聚 汇聚层和卷积层类似 区别在于汇聚层不带包含参数 汇聚操作是确定性的 通常计算汇聚窗