关于卷积部分:python实现卷积操作


1.池化

池化操作的一个重要目的就是对卷积后得到的特征进行进一步处理, 起到对数据进一步浓缩的效果, 从而缓解计算时内存的压力. 池化会选取一定大小区域, 将该区域内的像素值使用一个代表元素表示. 如果使用平均值代替, 称为平均值池化, 如果使用最大值代替则称为最大值池化.
最大值池化如下图所示,

图片数据经过池化后, 特征维度会减小, 训练参数减少, 泛化能力加强,进而防止过拟合. 其中特征维数的减少并不会让之前的特征丢失.
相关参数:

  • 输入大小 B×H×W×CB \times H\times W \times CB×H×W×C
  • 池化窗口 N×NN \times NN×N
  • 步长 SSS
    (通常, 我们将步长大小设置为与池化窗口同样大小的参数, 保证滑动区域不会重叠)

池化并不会改变输出通道数, 所以池化后的大小为
B×⌊H−NS+1⌋×⌊W−NS+1⌋×CB \times \lfloor \frac{H - N}{S}+1 \rfloor \times \lfloor \frac{W - N}{S}+1 \rfloor \times CB×⌊SH−N​+1⌋×⌊SW−N​+1⌋×C

2. 代码实现

import numpy as np
import mathclass Pool2d():def __init__(self, inputShape, poolingSize, stride=2, type=""):self.height = inputShape[1]self.width = inputShape[2]# self.pool = np.zeros([self.batchSize, poolingSize, poolingSize, inputShape[-1]])self.stride = strideself.type = typeself.batchSize = inputShape[0]self.size = poolingSize# The shape of the outputself.output = np.zeros([self.batchSize, math.floor((self.height - self.size)/ self.stride + 1),math.floor((self.width - self.size)/ self.stride + 1), inputShape[-1]])def forward(self, x):polOut = np.zeros(self.output.shape)for i in range(self.batchSize):img_i = x[i]polImage_i = self.im2pol(img_i, self.size, self.stride)polOut[i] = np.reshape(polImage_i, self.output[0].shape)return polOutdef im2pol(self, image, size, stride):imagePol = []for i in range(image.shape[-1]):tempList = []for j in range(0, image.shape[0]- size +1, stride):for k in range(0, image.shape[1], stride):# Two kinds of poolingif self.type == "max":pol = image[j:j + size, k:k + size, i].max()elif self.type == "mean":pol = image[j:j + size, k:k + size, i].mean()tempList.append(pol)tempArray = np.array(tempList).reshape([self.output.shape[1], self.output.shape[2]])imagePol.append(tempArray)imagePol = np.array(imagePol)imagePol = np.swapaxes(imagePol, 0, 2)  # Exchange dimension from (c, h, w) to (h, w, c)return imagePolinputData = np.random.random((1, 4, 4, 3))
print("inputShape: ", inputData.shape)
size = 2
print("pooling size: ", size)
pool2d =Pool2d(inputShape=inputData.shape, poolingSize=size, type="max")
outputData = pool2d.forward(inputData)
print("outputShape: ", outputData.shape)  # (1, 2, 2, 3)

与卷积操作类似, 池化操作同样是池化窗口在滑动;
但需要注意的是, 它并没有使用零填充.


参考资料:
https://blog.csdn.net/qq_41661809/article/details/96500250
https://blog.csdn.net/qq_28266311/article/details/94555082

python实现池化操作相关推荐

  1. 卷积神经网络中的各种池化操作

    参考:https://www.cnblogs.com/pprp/p/12456403.html 池化操作(Pooling)是CNN中非常常见的一种操作,Pooling层是模仿人的视觉系统对数据进行降维 ...

  2. 【Pytorch神经网络理论篇】 13 深层卷积神经网络介绍+池化操作+深层卷积神经网络实战

    1 深层卷积神经网络概述 1.1 深层卷积神经网络模型结构图 1.1.1 深层卷积神经网络的正向结构构成剖析 输入层,将每个像素作为一个特征节点输入网络. 卷积层:由多个滤波器组合而成. 池化层:将卷 ...

  3. TensorFlow实现卷积、池化操作

    1.调用tf.nn.conv2d()实现卷积 首先是调用卷积函数实现卷积操作: 这里说明一下conv2d的定义及参数含义: 参考 [定义:] tf.nn.conv2d (input, filter, ...

  4. 图神经网络的池化操作

    图神经网络有两个层面的任务:一个是图层面(graph-level),一个是节点(node-level)层面,图层面任务就是对整个图进行分类或者回归(比如分子分类),节点层面就是对图中的节点进行分类回归 ...

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

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

  6. 双线性池化_卷积神经网络中的各种池化操作

    池化操作(Pooling)是CNN中非常常见的一种操作,Pooling层是模仿人的视觉系统对数据进行降维,池化操作通常也叫做子采样(Subsampling)或降采样(Downsampling),在构建 ...

  7. nn.AvgPool2d——二维平均池化操作

    PyTorch学习笔记:nn.AvgPool2d--二维平均池化操作 torch.nn.AvgPool2d( kernel_size , stride=None , padding=0 , ceil_ ...

  8. Torch 池化操作大全 MaxPool2d MaxUnpool2d AvgPool2d FractionalMaxPool2d LPPool2d AdaptivePool2d dilation详解

    torch 池化操作 1 池化操作 2 类型 2.1 MaxPool2d() 2.2 MaxUnPool2d() 2.3 AvgPool2d() 2.4 FractionalMaxPool2d() 2 ...

  9. 炼丹侠必知的9大池化操作​汇总

    池化Pooling是卷积神经网络中常见的一种操作,Pooling层是模仿人的视觉系统对数据进行降维,其本质是降维.在卷积层之后,通过池化来降低卷积层输出的特征维度,减少网络参数和计算成本的同时,降低过 ...

  10. 卷积池化操作输出的尺寸大小

    代码演示 # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np """ Created o ...

最新文章

  1. javascript onmouseout问题解决方案
  2. 精简版开发工具使用手记(图解)
  3. 深度学习模型压缩方法(3)-----模型剪枝(Pruning)
  4. RestTemplate技术预研-认识RestTemplate
  5. 【原】Python基础-函数
  6. 存图利器——链式前向星
  7. Wallpaper:基于Typecho的壁纸头像站主题
  8. UNIDAC如何驱动MSSQL2000
  9. journalctl查看服务日志
  10. 一招解决 Mac JD-JUI 打不开问题
  11. python_10_绘制图表
  12. 恶趣装逼制作神器,模板丰富的微信小程序
  13. Bibexcel 与 Pajek 基本分析
  14. 广告公司网站该怎么做和运营
  15. grep查找的内容输出到文件
  16. 基础//页面布局——三栏布局1
  17. 数学建模算法与应用 线性规划(cvxpy包)
  18. Breeze's MapHack 1.0 正式版发布【修正版发布】
  19. [论文阅读:姿态识别Transformer] POET: End-to-End Trainable Multi-Instance Pose Estimation with Transformers
  20. 微信小程序 之 程序题

热门文章

  1. linux(ubuntu) 查看系统设备信息
  2. Silverlight 解密游戏 之十 自定义粒子特效
  3. 对失恋男人的10条忠告
  4. MATLAB: 你不知道的12个基础知识
  5. 品牌怎么做知乎营销?
  6. 为什么会找不到D层文件?
  7. 解决eclipse中svn插件总是提示输入密码的问题
  8. Oracle迁移PPAS:中文表名的处理
  9. Response.Redirect 打开这两种方法的一种新形式
  10. 【转】每天一个linux命令(11):nl命令