6.5 池化层

是什么:池化层跟卷积层类似有个滑动窗口,用来取一个区域内的最大值或者平均值。

作用:卷积神经网络的最后的部分应该要看到整个图像的全局,通过池化(汇聚)操作,逐渐汇聚要取的像素,最终实现学习全局表示的目标。同时,卷积层的所有优势也被保留在了中间层。

特点:
1.降低卷积层读对位置的敏感性。(优点)
2.降低对空间降采样表示的敏感性。(优点)
3.池化层的输入通道和输出通道相同,如X的形状为[1,2,4,4],1代表样本数,第二个值:2,代表通道为2,所以输出的结果通道仍然为2,输出结果应该为[1,2,计算后的w,计算后的H]
4.使用最大汇聚层以及大于1的步幅,可以减少输出结果的空间维度(如高度和宽度)。

解释:因为池化是选出一个区域的作最大值或平均值,所以取池化区域内的像素时不依赖像素的位置。因为池化层往往在卷积层的后面,所以池化层可以降低卷积层对位置的敏感性。同样也可以降低空间降采样的敏感性。

池化后的输出形状

W = (行数 - 池化行数 + 池化行方向步长) / 池化行方向步长 + 1
H = (列数 - 池化列数 + 池化列方向步长) / 池化列方向步长 + 1

一.单通道池化

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

池化层的前向传播函数

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]])
print(pool2d(X, (2, 2)))
print(pool2d(X, (2, 2),'avg'))
tensor([[4., 5.],[7., 8.]])
tensor([[2., 3.],[5., 6.]])

池化层的填充和步幅

X = torch.arange(16,dtype=torch.float32)
print(X)
tensor([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10., 11., 12., 13.,14., 15.])
#(样本数,通道数,行数,列数)
X = X.reshape((1,1,4,4))
print(X)
tensor([[[[ 0.,  1.,  2.,  3.],[ 4.,  5.,  6.,  7.],[ 8.,  9., 10., 11.],[12., 13., 14., 15.]]]])

默认步幅与池化窗口相同,当使用3x3的池化窗口,步幅也是3x3

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

手动设置池化尺寸

pool2d = nn.MaxPool2d((2,3),stride=(2,3),padding=(0,1))
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的原shape = (1,1,4,4),下句是在第二个维度上增加一个4x4的矩阵 形状变成 (1,2,4,4)

X = torch.cat((X,X+1),1)
print(X)
print(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)
X = pool2d(X)
print(X)
print(X.shape) # 池化不像卷积那样每个通道的结果要合在一起,所以池化层的输入通道和输出通道相同
tensor([[[[ 5.,  7.],[13., 15.]],[[ 6.,  8.],[14., 16.]]]])
# 池化层的输入通道和输出通道相同,X的通道为2,所以输出的结果通道仍然为2,下面第一个1是样本数,第二个值是通道数
torch.Size([1, 2, 2, 2])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/28081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AutoLayout案例1-按钮居中显示 Objective-C语言】

一、按钮居中显示 1.接下来,我们就用这个autoLayout,自动布局,给大家写一个,实现几个案例,给大家看一下 那么,首先,第一个,大家注意, 当我们使用autoLayout,自动布局的时候,我们新建一个项目, 这个新建的项目,里面有一个控制器,这个控制器,是不是默认,是四四…

基于短信宝API零代码实现短信自动化业务

场景描述: 基于短信宝开放的API能力,实现在特定事件(如天气预警)或定时自动发送短信(本文以定时群发短信为例)。通过Aboter平台如何实现呢? 使用方法: 首先创建一个IPaaS流程&…

iPhone苹果手机地震预警功能怎么开启?

iPhone苹果手机地震预警功能怎么开启? 1、打开iPhone苹果手机设置; 2、在iPhone苹果手机设置内找到辅助功能; 3、在辅助功能内找到触控; 4、在iPhone苹果手机辅助功能触控内找到振动,如果是关闭状态请启; …

C++ STL vector

目录 一.认识vector 二.vector的使用 1.vector的构造函数 2.vector的迭代器 2.1 begin(),end() 2.2 rbegin(),rend() 2.3 迭代器初始化对象 3. vector…

Linux中安装Tomcat

Linux安装Tomcat 操作步骤: 1、使用FinalShell自带的上传工具将Tomcat的二进制发布包上传到Linux 2、解压安装包,命令为tar -zxvf apache-tomcat-7.0.57.tar.gz -C /usr/local 3、进入Tomcat的bin目录启动服务,命令为sh startup.sh或者./ startup.sh …

leetcode每日一练-第278题-第一个错误的版本

一、思路 二分查找——因为它可以快速地将版本范围缩小一半,从而更快地找到第一个坏版本。 二、解题方法 维护一个左边界 left 和一个右边界 right,在每一步循环中,我们计算中间版本 mid,然后检查它是否是坏版本。如果是坏版本…

利用Overleaf使用Latex插入算法伪代码

目录 一个简单的例子: 样式一(algorithm2e算法): 样例二(algorithm2e算法): 样式三(algorithm算法): 下面详细讲解algorithm2e算法的使用 1、宏包参数的…

Android 11及以上 showSoftInput 没有效果解决方式

笔者在使用带输入框的AlertDialog时需要将输入框立即显示出来,发现在安卓11 (API 30)及以上版本使用传统的显示输入法代码失效,查找后发现新的方式。 问题记录 安卓11 (API 30)及以上版本无法调用以下代码无法显示输入框并在控制台找到以下提示信息。 b…

2023-08-07力扣今日七题-好题

链接: 剑指 Offer 11. 旋转数组的最小数字 154. 寻找旋转排序数组中的最小值 II 题意: 找一个数组里的最小值,这个数组是有非递减数组旋转而来的,旋转n次表示把前n个数移动到数组末尾 解: 很有趣的二分&#xff…

2023华数杯数学建模C题完整5问代码思路分析

目前已经写出2023华数杯C题母亲身心健康对婴儿成长的影响全部5问的完整代码和42页论文(正文30页,论文部分摘要如下: 本文共解决了五个问题,涉及婴儿行为特征、睡眠质量与母亲的身体指标和心理指标的关系,以及如何优化…

使用Socket实现TCP版的回显服务器

文章目录 1. Socket简介2. ServerSocket3. Socket4. 服务器端代码5. 客户端代码 1. Socket简介 Socket(Java套接字)是Java编程语言提供的一组类和接口,用于实现网络通信。它基于Socket编程接口,提供了一种简单而强大的方式来实现…

【MATLAB第66期】#源码分享 | 基于MATLAB的PAWN全局敏感性分析模型(有条件参数和无条件参数)

【MATLAB第66期】#源码分享 | 基于MATLAB的PAWN全局敏感性分析模型(有条件参数和无条件参数) 文献参考 Pianosi, F., Wagener, T., 2015. A simple and efficient method for global sensitivity analysis based on cumulative distribution functions.…

【CSS弹性盒模型 display:flex;常用参数及常见的布局】

CSS弹性盒模型 display:flex;常用参数flex-directionjustify-contentalign-itemsflex-wrapflex-flowalign-contentorderflex-growflex-shrinkflex-basis 常见的布局1. 水平居中2. 垂直居中3. 水平垂直居中4. 等分布局5. 响应式布局6. 网格布局 常见的布局封装 display:flex;常用…

zuul实现黑名单,request多次读取问题,stream close

一,背景及设计 1.需要在网关实现黑名单功能,实现拦截指定接口。黑名单用户,会加入指定黑名单列表,关联对应功能,如用户登录,用户下单,用户接单。 2.表设计 平台表:不同系统 黑名单…

Transformer架构

Transformer架构是一种重要的神经网络模型架构,最初由Vaswani等人在2017年提出,并在机器翻译任务上取得了显著的性能提升。Transformer架构在自然语言处理领域得到广泛应用,特别是在语言模型、机器翻译和文本生成等任务中。 Transformer架构…

Spring 创建 Bean 的三种方式

在使用 Spring 框架后,对象以 Bean 的形式统一交给 IOC 容器去创建和管理。现阶段主流的方式是基于 SpringBoot 框架,基于注解的方式实现 Bean 的创建,但在原生 Spring 框架中其实存在三种创建 Bean 的方式。 一、基础类 BeanProcess 实体类…

Grafana 曲线图报错“parse_exception: Encountered...”

问题现象 配置的Grafana图报错如下: 原因分析 点开报错,可以看到报错详细信息,是查询语句的语法出现了异常。 变量pool的取值为None 解决方案 需要修改变量pool的查询SQL,修改效果如下: 修改后&#x…

docker部署nginx

一、下载镜像 配置镜像加速器(见docker部署mysql的文章) docker search nginx docker pull nginx 二、创建挂载目录 mkdir -p /docker/data/nginx mkdir -p /docker/data/log mkdir -p /docker/data/html 三、查看镜像并启动容器 docker images |…

6、移除链表元素

方法1:原链表删除元素 伪代码: 首先判断头节点是否是待删除元素。(头节点和其他节点的删除方法不一样) while(head ! null && head->value target) //如果链表为 1 1 1 1 1,要删除元素1时用if就会失效 {h…

HTML5注册页面

分析 注册界面实际上是一个表格&#xff08;对齐&#xff09;&#xff0c;一行有两个单元格。 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevic…