机器学习入门(18)— 卷积网络中的池化层实现
1. 池化层实现
池化层的实现和卷积层相同,都使用 im2col
展开输入数据。不过,池化的情况下,在通道方向上是独立的,这一点和卷积层不同。具体地讲,如图 7-21 所示,池化的应用区域按通道单独展开。
像这样展开之后,只需对展开的矩阵求各行的最大值,并转换为合适的形状即可(图7-22)。
上面就是池化层的 forward
处理的实现流程。下面来看一下实现示例。
class Pooling:def __init__(self, pool_h, pool_w, stride=1, pad=0):self.pool_h = pool_hself.pool_w = pool_wself.stride = strideself.pad = padself.x = Noneself.arg_max = Nonedef forward(self, x):N, C, H, W = x.shapeout_h = int(1 + (H - self.pool_h) / self.stride)out_w = int(1 + (W - self.pool_w) / self.stride)# 展开col = im2col(x, self.pool_h, self.pool_w, self.stride, self.pad)col = col.reshape(-1, self.pool_h*self.pool_w)# 最大值arg_max = np.argmax(col, axis=1)out = np.max(col, axis=1)# 转换out = out.reshape(N, out_h, out_w, C).transpose(0, 3, 1, 2)self.x = xself.arg_max = arg_maxreturn outdef backward(self, dout):dout = dout.transpose(0, 2, 3, 1)pool_size = self.pool_h * self.pool_wdmax = np.zeros((dout.size, pool_size))dmax[np.arange(self.arg_max.size), self.arg_max.flatten()] = dout.flatten()dmax = dmax.reshape(dout.shape + (pool_size,)) dcol = dmax.reshape(dmax.shape[0] * dmax.shape[1] * dmax.shape[2], -1)dx = col2im(dcol, self.x.shape, self.pool_h, self.pool_w, self.stride, self.pad)return dx
最大值的计算可以使用 NumPy
的 np.max
方法。np.max
可以指定 axis
参数,并在这个参数指定的各个轴方向上求最大值。比如,如果写成 np.max(x, axis=1)
,就可以在输入 x
的第 1 维的各个轴方向上求最大值。
机器学习入门(18)— 卷积网络中的池化层实现相关推荐
- 【TensorFlow】TensorFlow从浅入深系列之十二 -- 教你深入理解卷积神经网络中的池化层
本文是<TensorFlow从浅入深>系列之第12篇 TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法) TensorFlow从浅入深系列之二 -- 教你通过思维 ...
- 卷积神经网络中的池化是什么意思
卷积神经网络中的池化是什么意思 pooling 理论在于,图像中相邻位置的像素是相关的.对一幅图像每隔一行采样,得到的结果依然能看. 经过一层卷积以后,输入的图像尺寸变化不大,只是缩小了卷积核-1.根 ...
- 卷积神经网络中的池化(Pooling)层
文章目录 卷积神经网络中的池化(Pooling)层 ⚪ 通用的池化方法 1. 最大池化 Max Pooling 2. 平均池化 Average Pooling 3. 混合池化 Mix Pooling ...
- 花书+吴恩达深度学习(十一)卷积神经网络 CNN 之池化层
目录 0. 前言 1. 最大池化(max pooling) 2. 平移不变形 3. 其他池化函数 4. 卷积和池化作为一种无限强的先验 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常 ...
- cnn池化层输入通道数_(pytorch-深度学习系列)CNN中的池化层-学习笔记
CNN中的池化层 首先,池化(pooling)层的提出是为了缓解卷积层对位置的过度敏感性. 什么意思? 比如在图像边缘检测问题中,实际图像里,我们的目标物体不会总出现在固定位置,即使我们连续拍摄同一个 ...
- (pytorch-深度学习系列)CNN中的池化层-学习笔记
CNN中的池化层 首先,池化(pooling)层的提出是为了缓解卷积层对位置的过度敏感性. 什么意思? 比如在图像边缘检测问题中,实际图像里,我们的目标物体不会总出现在固定位置,即使我们连续拍摄同一个 ...
- 用于视觉识别的深度卷积网络空间金字塔池化方法
摘要 现有的深卷积神经网络(CNN)需要一个固定大小的神经网络(例如224x224)的输入图像.这种要求是"人为的",可能会降低对任意大小/尺度的图像或子图像的识别精度.在这项工作 ...
- 【综述】盘点卷积神经网络中的池化操作
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 池化操作(Pooling)是CNN中非常常见的一种操作,池化操作通 ...
- 卷积神经网络中的池化方法(pooling)总结
在卷积神经网络中,我们经常会碰到池化操作,而池化层往往在卷积层后面,通过池化来降低卷积层输出的特征向量,同时改善结果(不易出现过拟合). 为什么可以通过降低维度呢? 因为图像具有一种"静态性 ...
最新文章
- 陆首群:评人工智能如何走向新阶段?
- 特别浅的渐变蓝色在html里,javascript – 渐变色淡淡的3种颜色
- 流媒体服务器开发笔记(2)--RTCP协议介绍
- IMX6的相关音频结构体的定义
- 概率论 第三章 多维随机变量及其分布
- 11.2 uptime:显示系统的运行时间及负载
- Vue — 第六天(vue-cli-介绍)
- 贝叶斯分类器_Sklearn 中的朴素贝叶斯分类器
- FreeBSD9.1安装Gnome2桌面
- npm install出现问题:run 'npm audit fix' to fix them, or 'npm audit' for details(安装babel)
- Java EE 架构设计——基于okhttp3 的网络框架设计
- winform C#中Byte与String的转换方法,相互转换
- linux命令大全之ss命令详解(获取socket统计信息)
- AOP(execution表达式)
- easyui获取图片路径_Python玩转图片九宫格
- hc05与单片机连接图_STM32单片机最小系统详解
- pci_register_driver
- Silane-PEG-COOH,硅烷-聚乙二醇-羧基结构式及相关应用介绍
- 电子科技大学信息与通信工程学院858考研上岸经验分享(一)
- jmeter循环和计数器