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

最大值的计算可以使用 NumPynp.max 方法。np.max 可以指定 axis 参数,并在这个参数指定的各个轴方向上求最大值。比如,如果写成 np.max(x, axis=1),就可以在输入 x 的第 1 维的各个轴方向上求最大值。

机器学习入门(18)— 卷积网络中的池化层实现相关推荐

  1. 【TensorFlow】TensorFlow从浅入深系列之十二 -- 教你深入理解卷积神经网络中的池化层

    本文是<TensorFlow从浅入深>系列之第12篇 TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法) TensorFlow从浅入深系列之二 -- 教你通过思维 ...

  2. 卷积神经网络中的池化是什么意思

    卷积神经网络中的池化是什么意思 pooling 理论在于,图像中相邻位置的像素是相关的.对一幅图像每隔一行采样,得到的结果依然能看. 经过一层卷积以后,输入的图像尺寸变化不大,只是缩小了卷积核-1.根 ...

  3. 卷积神经网络中的池化(Pooling)层

    文章目录 卷积神经网络中的池化(Pooling)层 ⚪ 通用的池化方法 1. 最大池化 Max Pooling 2. 平均池化 Average Pooling 3. 混合池化 Mix Pooling ...

  4. 花书+吴恩达深度学习(十一)卷积神经网络 CNN 之池化层

    目录 0. 前言 1. 最大池化(max pooling) 2. 平移不变形 3. 其他池化函数 4. 卷积和池化作为一种无限强的先验 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常 ...

  5. cnn池化层输入通道数_(pytorch-深度学习系列)CNN中的池化层-学习笔记

    CNN中的池化层 首先,池化(pooling)层的提出是为了缓解卷积层对位置的过度敏感性. 什么意思? 比如在图像边缘检测问题中,实际图像里,我们的目标物体不会总出现在固定位置,即使我们连续拍摄同一个 ...

  6. (pytorch-深度学习系列)CNN中的池化层-学习笔记

    CNN中的池化层 首先,池化(pooling)层的提出是为了缓解卷积层对位置的过度敏感性. 什么意思? 比如在图像边缘检测问题中,实际图像里,我们的目标物体不会总出现在固定位置,即使我们连续拍摄同一个 ...

  7. 用于视觉识别的深度卷积网络空间金字塔池化方法

    摘要 现有的深卷积神经网络(CNN)需要一个固定大小的神经网络(例如224x224)的输入图像.这种要求是"人为的",可能会降低对任意大小/尺度的图像或子图像的识别精度.在这项工作 ...

  8. 【综述】盘点卷积神经网络中的池化操作

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 池化操作(Pooling)是CNN中非常常见的一种操作,池化操作通 ...

  9. 卷积神经网络中的池化方法(pooling)总结

    在卷积神经网络中,我们经常会碰到池化操作,而池化层往往在卷积层后面,通过池化来降低卷积层输出的特征向量,同时改善结果(不易出现过拟合). 为什么可以通过降低维度呢? 因为图像具有一种"静态性 ...

最新文章

  1. 陆首群:评人工智能如何走向新阶段?
  2. 特别浅的渐变蓝色在html里,javascript – 渐变色淡淡的3种颜色
  3. 流媒体服务器开发笔记(2)--RTCP协议介绍
  4. IMX6的相关音频结构体的定义
  5. 概率论 第三章 多维随机变量及其分布
  6. 11.2 uptime:显示系统的运行时间及负载
  7. Vue — 第六天(vue-cli-介绍)
  8. 贝叶斯分类器_Sklearn 中的朴素贝叶斯分类器
  9. FreeBSD9.1安装Gnome2桌面
  10. npm install出现问题:run 'npm audit fix' to fix them, or 'npm audit' for details(安装babel)
  11. Java EE 架构设计——基于okhttp3 的网络框架设计
  12. winform C#中Byte与String的转换方法,相互转换
  13. linux命令大全之ss命令详解(获取socket统计信息)
  14. AOP(execution表达式)
  15. easyui获取图片路径_Python玩转图片九宫格
  16. hc05与单片机连接图_STM32单片机最小系统详解
  17. pci_register_driver
  18. Silane-PEG-COOH,硅烷-聚乙二醇-羧基结构式及相关应用介绍
  19. 电子科技大学信息与通信工程学院858考研上岸经验分享(一)
  20. jmeter循环和计数器

热门文章

  1. 2022-2028年全球与中国人字拖市场研究及前瞻分析报告
  2. TensorFlow指定使用GPU 多块gpu
  3. 梯度下降优化算法综述与PyTorch实现源码剖析
  4. LeetCode简单题之将每个元素替换为右侧最大元素
  5. 企业如何选择音视频会议系统分析
  6. FinFET与2nm晶圆工艺壁垒
  7. DCN-2655同异步端口
  8. [JS] 如何判断一个对象是否为空
  9. Fragment 使用 show 和 hide 的方式实现切换 以及切换的时候Fragment 生命周期
  10. Android DataBinding 入门了解 到实现一个buttton的点击事件