深度学习之卷积与池化

本文详细介绍了卷积神经网络(CNN)的基本构成及其工作原理,包括卷积层、池化层、全连接层等关键组件,并解释了权值共享等重要概念。

转载:http://www.cnblogs.com/zf-blog/p/6075286.html


卷积神经网络(CNN)由输入层、卷积层、激活函数、池化层、全连接层组成,即INPUT-CONV-RELU-POOL-FC

(1)卷积层:用它来进行特征提取,如下:

输入图像是32*32*3,3是它的深度(即R、G、B),卷积层是一个5*5*3的filter(感受野),这里注意:感受野的深度必须和输入图像的深度相同。通过一个filter与输入图像的卷积可以得到一个28*28*1的特征图,上图是用了两个filter得到了两个特征图;

我们通常会使用多层卷积层来得到更深层次的特征图。如下:

关于卷积的过程图解如下:

输入图像和filter的对应位置元素相乘再求和,最后再加上b,得到特征图。如图中所示,filter w0的第一层深度和输入图像的蓝色方框中对应元素相乘再求和得到0,其他两个深度得到2,0,则有0+2+0+1=3即图中右边特征图的第一个元素3.,卷积过后输入图像的蓝色方框再滑动,stride=2,如下:

如上图,完成卷积,得到一个3*3*1的特征图;在这里还要注意一点,即zero pad项,即为图像加上一个边界,边界元素均为0.(对原输入无影响)一般有

F=3 => zero pad with 1

F=5 => zero pad with 2

F=7=> zero pad with 3,边界宽度是一个经验值,加上zero pad这一项是为了使输入图像和卷积后的特征图具有相同的维度,如:

输入为5*5*3,filter为3*3*3,在zero pad 为1,则加上zero pad后的输入图像为7*7*3,则卷积后的特征图大小为5*5*1((7-3)/1+1),与输入图像一样;

而关于特征图的大小计算方法具体如下:

 卷积层还有一个特性就是“权值共享”原则。如下图:

如没有这个原则,则特征图由10个32*32*1的特征图组成,即每个特征图上有1024个神经元,每个神经元对应输入图像上一块5*5*3的区域,即一个神经元和输入图像的这块区域有75个连接,即75个权值参数,则共有75*1024*10=768000个权值参数,这是非常复杂的,因此卷积神经网络引入“权值”共享原则,即一个特征图上每个神经元对应的75个权值参数被每个神经元共享,这样则只需75*10=750个权值参数,而每个特征图的阈值也共享,即需要10个阈值,则总共需要750+10=760个参数。

 

池化层:对输入的特征图进行压缩,一方面使特征图变小,简化网络计算复杂度;一方面进行特征压缩,提取主要特征,如下:

池化操作一般有两种,一种是Avy Pooling,一种是max Pooling,如下:

同样地采用一个2*2的filter,max pooling是在每一个区域中寻找最大值,这里的stride=2,最终在原特征图中提取主要特征得到右图。

(Avy pooling现在不怎么用了,方法是对每一个2*2的区域元素求和,再除以4,得到主要特征),而一般的filter取2*2,最大取3*3,stride取2,压缩为原来的1/4.

注意:这里的pooling操作是特征图缩小,有可能影响网络的准确度,因此可以通过增加特征图的深度来弥补(这里的深度变为原来的2倍)。

 

全连接层:连接所有的特征,将输出值送给分类器(如softmax分类器)。

总的一个结构大致如下:

另外:CNN网络中前几层的卷积层参数量占比小,计算量占比大;而后面的全连接层正好相反,大部分CNN网络都具有这个特点。因此我们在进行计算加速优化时,重点放在卷积层;进行参数优化、权值裁剪时,重点放在全连接层。

### 深度学习卷积运算池化的原理及实现 #### 卷积运算的定义作用 卷积运算是卷积神经网络 (Convolutional Neural Network, CNN) 的核心操作之一。通过滑动窗口的形式,卷积核在输入特征图上逐像素移动并执行加权求和操作,从而提取局部特征[^2]。这种机制使得模型能够捕捉到空间上的层次化模式。 卷积的核心优势在于参数共享以及稀疏交互特性。具体来说,同一卷积核在整个输入区域重复使用,减少了参数数量的同时增强了模型的学习能力。此外,深度可分离卷积进一步优化了传统卷积的计算效率,其计算复杂度仅为普通卷积的大约三分之一[^1]。 以下是基于 Python 和 TensorFlow/Keras 的简单卷积层实现示例: ```python import tensorflow as tf from tensorflow.keras import layers model = tf.keras.Sequential([ layers.Conv2D(filters=32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)) ]) ``` #### 池化的功能及其方式 池化是一种降维技术,用于减少数据规模、降低过拟合并增强模型对平移变化的鲁棒性[^4]。主要分为两种形式:最大池化 (Max Pooling) 和平均池化 (Average Pooling)。 - **最大池化**选取滑窗内的最大值作为输出,保留最显著的信息。 - **平均池化**则取滑窗内所有数值的均值,通常适用于模糊处理场景。 下面是一个简单的最大池化层代码实例: ```python model.add(layers.MaxPooling2D(pool_size=(2, 2))) ``` #### 上采样的三种常见方法 为了恢复因下采样而丢失的空间分辨率,CNN 中常采用上采样技术。主要包括以下几种方法[^3]: 1. **双线性插值 (Bilinear Interpolation)**:通过对周围像素进行加权平均来估计新位置处的值。 2. **反卷积 (Transposed Convolution)**:也称为转置卷积,其实质是对标准卷积过程的一种逆向映射。 3. **反池化 (Unpooling)**:记录原始池化过程中被丢弃的位置索引,在重建阶段依据这些标记还原细节信息。 对于 `unpooling` 中涉及的最大池化部分,可以通过保存每次前向传播时的最大值坐标,并利用它们指导后续解码器模块的数据填充工作流完成相应任务。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值