python实现池化操作
关于卷积部分: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实现池化操作相关推荐
- 卷积神经网络中的各种池化操作
参考:https://www.cnblogs.com/pprp/p/12456403.html 池化操作(Pooling)是CNN中非常常见的一种操作,Pooling层是模仿人的视觉系统对数据进行降维 ...
- 【Pytorch神经网络理论篇】 13 深层卷积神经网络介绍+池化操作+深层卷积神经网络实战
1 深层卷积神经网络概述 1.1 深层卷积神经网络模型结构图 1.1.1 深层卷积神经网络的正向结构构成剖析 输入层,将每个像素作为一个特征节点输入网络. 卷积层:由多个滤波器组合而成. 池化层:将卷 ...
- TensorFlow实现卷积、池化操作
1.调用tf.nn.conv2d()实现卷积 首先是调用卷积函数实现卷积操作: 这里说明一下conv2d的定义及参数含义: 参考 [定义:] tf.nn.conv2d (input, filter, ...
- 图神经网络的池化操作
图神经网络有两个层面的任务:一个是图层面(graph-level),一个是节点(node-level)层面,图层面任务就是对整个图进行分类或者回归(比如分子分类),节点层面就是对图中的节点进行分类回归 ...
- 【综述】盘点卷积神经网络中的池化操作
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 池化操作(Pooling)是CNN中非常常见的一种操作,池化操作通 ...
- 双线性池化_卷积神经网络中的各种池化操作
池化操作(Pooling)是CNN中非常常见的一种操作,Pooling层是模仿人的视觉系统对数据进行降维,池化操作通常也叫做子采样(Subsampling)或降采样(Downsampling),在构建 ...
- nn.AvgPool2d——二维平均池化操作
PyTorch学习笔记:nn.AvgPool2d--二维平均池化操作 torch.nn.AvgPool2d( kernel_size , stride=None , padding=0 , ceil_ ...
- 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大池化操作汇总
池化Pooling是卷积神经网络中常见的一种操作,Pooling层是模仿人的视觉系统对数据进行降维,其本质是降维.在卷积层之后,通过池化来降低卷积层输出的特征维度,减少网络参数和计算成本的同时,降低过 ...
- 卷积池化操作输出的尺寸大小
代码演示 # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np """ Created o ...
最新文章
- javascript onmouseout问题解决方案
- 精简版开发工具使用手记(图解)
- 深度学习模型压缩方法(3)-----模型剪枝(Pruning)
- RestTemplate技术预研-认识RestTemplate
- 【原】Python基础-函数
- 存图利器——链式前向星
- Wallpaper:基于Typecho的壁纸头像站主题
- UNIDAC如何驱动MSSQL2000
- journalctl查看服务日志
- 一招解决 Mac JD-JUI 打不开问题
- python_10_绘制图表
- 恶趣装逼制作神器,模板丰富的微信小程序
- Bibexcel 与 Pajek 基本分析
- 广告公司网站该怎么做和运营
- grep查找的内容输出到文件
- 基础//页面布局——三栏布局1
- 数学建模算法与应用 线性规划(cvxpy包)
- Breeze's MapHack 1.0 正式版发布【修正版发布】
- [论文阅读:姿态识别Transformer] POET: End-to-End Trainable Multi-Instance Pose Estimation with Transformers
- 微信小程序 之 程序题