首页 > 其他分享 >《动手学深度学习 Pytorch版》 6.5 汇聚层

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

时间:2023-09-17 21:14:51浏览次数:36  
标签:13 tensor torch Pytorch 汇聚 6.5 pool2d times

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\times h\times w\),则汇聚窗口的形状为 \(p_h\times p_w\),填充为 \((p_h,p_w)\),步幅为 \((s_h,s_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\)


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

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


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

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


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

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

标签:13,tensor,torch,Pytorch,汇聚,6.5,pool2d,times
From: https://www.cnblogs.com/AncilunKiang/p/17709813.html

相关文章

  • 《动手学深度学习 Pytorch版》 6.6 卷积神经网络
    importtorchfromtorchimportnnfromd2limporttorchasd2l6.6.1LeNetLetNet-5由两个部分组成:-卷积编码器:由两个卷积核组成。-全连接层稠密块:由三个全连接层组成。模型结构如下流程图(每个卷积块由一个卷积层、一个sigmoid激活函数和平均汇聚层组成):全连接......
  • 《动手学深度学习 Pytorch版》 6.7 填充和步幅
    6.3.1填充虽然我们用的卷积核较小,每次只会丢失几像素,但是如果应用多层连续的卷积层,累积的像素丢失就会很多。解决此问题的方法为填充。填充后的输出形状将为\((n_h-k_h+p_h+1)\times(n_w-k_w+p_w+1)\)importtorchfromtorchimportnndefcomp_conv2d(conv2d,X):X......
  • Qt 6.5.2安装教程
    1先去下载在线安装包,例如,因为有时候这个软件会更新,老的会安装不了。  一、先去官方网站下载安装包https://download.qt.io/official_releases/online_installers/二、安装之前请指向国内的镜像,这样下载速度很快例如我下载的qt-unified-windows-x64-x.x.x-online.exe存放在d......
  • Pytorch
    创建项目的方式DataSet类代码实战read_data.pyfromtorch.utils.dataimportDatasetfromPILimportImageimportosclassMyData(Dataset):def__init__(self,root_dir,label_dir):self.root_dir=root_dirself.label_dir=label_dir......
  • 《动手学深度学习 Pytorch版》 6.2 图像卷积
    importtorchfromtorchimportnnfromd2limporttorchasd2l6.2.1互相关计算X=torch.tensor([[0.0,1.0,2.0],[3.0,4.0,5.0],[6.0,7.0,8.0]])K=torch.tensor([[0.0,1.0],[2.0,3.0]])此处应为:012345678*0123=......
  • 【研究生学习】Pytorch基本知识
    本篇博客将记录Pytorch的基本知识,包括Pytorch的环境配置、Pytorch的结构,Pytorch的基本操作等Pytorch环境配置我是采用在Anaconda下安装Pytorch的方案,关于这个可以参考网上的大佬写的博客,跟着一步步走就行,比如下面这一篇:在Anaconda下安装Pytorch的超详细步骤除此之外,如果采用在......
  • pytorch(1) 学习资料
    https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter03_DL-basics/3.1_linear-regression  https://pytorch.zhangxiann.com/1-ji-ben-gai-nian/1.2-tensor-zhang-liang-jie-shao  https://datawhalechina.github.io/thorough-pytorch/%E7%AC%AC%E4%B8%83%E7%AB%A0/7......
  • 智慧园区:AI边缘计算技术与视频监控汇聚平台打造园区解决方案
    一、行业趋势与背景智慧园区是现代城市发展的重要组成部分,通过智能化技术提高园区的运营效率、降低成本、增强环境可持续性等具有重要作用。在智慧园区中,人工智能和视频汇聚技术是重要的前置技术。人工智能技术可以实现对数据的智能化处理和分析,为园区的运营和管理提供智能化的决策......
  • QT6.5.2msvc2022静态编译套件成品32位
    我自己编译的QT6.5.2成品库,静态编译,release和debug版本,压缩包250m解压后1G要是自己编译需要占用70G磁盘空间而且非常慢。关键词:QT6.5.2;QT静态编译;QT开发套件成品链接:https://pan.baidu.com/s/1vGBzn-hJwO1vsYp3dfpteA提取码:gaey......
  • pytorch-多头注意力
    多头注意力在实践中,当给定相同的查询、键和值的集合时,我们希望模型可以基于相同的注意力机制学习到不同的行为,然后将不同的行为作为知识组合起来,捕获序列内各种范围的依赖关系(例如,短距离依赖和长距离依赖关系)。因此,允许注意力机制组合使用查询、键和值的不同子空间表示(represent......