目录:

  • 前言

  • 卷积层(余下部分)

    • 卷积的基本结构

  • 卷积层

    • 什么是卷积

    • 滑动步长和零填充

  • 池化层

  • 卷积神经网络的基本结构

  • 总结

  • 参考文献

 

一、前言

上一篇我们一直说到了CNN[1]卷积层的特性,今天会继续讲解卷积层的基本结构。

二、卷积层(余下部分)

1. 卷积的基本结构

如图1所示,假设输入到神经网络中的是一张大小为256*256的图像,第一层隐藏层的神经元个数为241*241。在只考虑单通道的情况下,全连接神经网络输入层到第一层隐藏层的连接数为,也就是说输入层到第一层隐藏层有个参数(1为偏置项参数个数)。而在卷积神经网络中,假设我们使用了一个大小为16*16的卷积核,则输入层到第一层隐藏层的连接数为,由于我们的卷积核是共享的,因此参数个数仅为个。有时候为了提取图像中不同的特征,我们可能会使用多个卷积核,假设这里我们使用了100个大小为16*16的卷积核,则输入层到第一层隐藏层的参数个数也仅为,这依然远远少于全连接神经网络的参数个数。

根据图1所示的例子我们可以看到卷积神经网络的两个重要特性:

  • 局部连接:全连接神经网络中,第层的每一个神经元和第层的每一个神经元之间都有连接。而在卷积神经网络中,第层的每一个神经元都只和第层的部分神经元之间有连接,而这个“部分”有多大,则具体取决于卷积核的大小。

  • 权值共享:在卷积神经网络中,同一隐藏层的每一个神经元所使用的卷积核都是相同的,卷积核对同一隐藏层的神经元来说是共享的。

图1 全连接神经网络(左)和卷积神经网络(右)连接数示例

在卷积层中,特征图(feature map,又称为特征映射)是输入层的图像(或其它的特征图)经过卷积之后得到的特征输出。一个卷积核只负责提取某一类特定的特征,为了充分的提取出图像中的信息,我们通常会使用多个卷积核。卷积层的一般性结构可以表示如下:

1) 输入特征映射组:输入特征映射组是一个三维的张量(tensor),其中每个切片(slice)矩阵是一个输入特征映射。每个特征映射的大小为M x N,D是输入特征映射的个数。

2)输出特征映射组:输出特征映射组也是一个三维张量,其中每个切片矩阵是一个输出特征映射。每个特征映射的大小为M' x N',P是输出特征映射的个数。

3)卷积核:卷积核是一个四维张量,其中每个切片矩阵是一个二维的卷积核。

为了更直观的理解,我们看如图2所示的例子。示例中的输入特征映射组有两个特征映射,每个特征映射的大小为5x5,对应有M=5,N=5,D=2。输出特征映射组有三个特征映射,每个特征映射的大小为3x3,对应有M'=3,N'=3,P'=3。卷积核的维度是3x3x2x3,每个二维卷积核的大小为3x3,对应有m=3,n=3,D=2,P=3。

图2一个卷积层的结构示例

图3所示是卷积层中从输入特征映射组x到输出特征映射组的计算过程示例。卷积核分别对输入的特征映射进行卷积,然后将卷积得到的结果相加,再加上一个偏置后得到卷积层的净输入,如式1。最后经过一个非线性激活函数后得到输出特征映射,如式2,其中函数f(·)为非线性激活函数。

式1

式2

在图3所示的例子中,每一个输入特征映射都需要P个卷积核和一个偏置。假设每个二维卷积核的大小为mxn,那么该层卷积层共需要的参数个数为:(mxn)xPxD+P。

图3卷积层中计算过程示例

三、池化层

池化层(pooling layer)也称为子采样层(subsamplinglayer),池化层一般都是紧跟在卷积层之后,它的作用是进行特征选择,减少特征的数量,进而减少网络中参数的数量。

对于一个特征映射,我们可以将其划分为多个区域(这些区域可以有重合部分),池化就是对这些划分后的区域进行下采样(downsampling),然后得到一个值,并将这个值作为该区域的概括。池化层的方式有多种,一般常用的有最大池化(maximumpooling)和平均池化(mean pooling)。

  • 最大池化(maximum pooling):选取区域内的最大值的神经元作为该区域的概括。

  • 平均池化(mean pooling):取区域内所有神经元的均值作为该区域的概括。

如图4是一个最大池化和均值池化的示例,这里我们将一个特征映射划分为了4个区域,即池化窗口的大小为2x2,步长为2。

图4 最大池化和平均池化示例

目前大多数卷积神经网络中,池化层仅包含下采样操作,池化层没有需要训练的参数。但在一些早期的卷积网络中,会在池化层中使用一个非线性激活函数,例如我们会面会介绍的LeNet-5。现在,池化层的作用已经越来越小,通过增加卷积的步长也可以达到池化层同样的效果。因此在目前一些比较新的卷积神经网络中,池化层出现的频率已经越来越低。

四、卷积神经网络的基本结构

一个基本的卷积神经网络通常是由卷积层、池化层和全连接层交叉堆叠而成。如图5所示,由连续个卷积层和个池化层构成一个卷积块(M的取值一般为1~5,h的取值一般为0或1),一个卷积神经网络中可以堆叠N个连续的卷积块(N的取值可以很大,较深的网络可以达到100多层)。在N个连续的卷积块之后是K个连续的全连接层(K一般取1~2)。

图5 基本的卷积神经网络结构示意图

五、总结

本节介绍了卷积层的结构及池化层和卷积神经网络的特性,下一章节将结合代码介绍基于CNN的一个实际比赛的冰山雷达波图像识别项目。

 

六、参考文献

[1]AlexKrizhevsky: ImageNet Classification withDeep Convolutional Neural                Networks.NIPS 2012

欢迎关注磐创博客资源汇总站:

http://docs.panchuang.net/

欢迎关注PyTorch官方中文教程站:

http://pytorch.panchuang.net/

TensorFlow系列专题(十三): CNN最全原理剖析(续)的更多相关文章

  1. TensorFlow系列专题(五):BP算法原理

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/ ,学习更多的机器学习.深度学习的知识! 一.反向传播算法简介 二.前馈计算的过程 第一层隐藏层的计算 第 ...

  2. TensorFlow系列专题(九):常用RNN网络结构及依赖优化问题

    欢迎大家关注我们的网站和系列教程:http://panchuang.net/ ,学习更多的机器学习.深度学习的知识! 目录: 常用的循环神经网络结构 多层循环神经网络 双向循环神经网络 递归神经网络 ...

  3. TensorFlow系列专题(七):一文综述RNN循环神经网络

    欢迎大家关注我们的网站和系列教程:http://panchuang.net/ ,学习更多的机器学习.深度学习的知识! 目录: 前言 RNN知识结构 简单循环神经网络 RNN的基本结构 RNN的运算过程 ...

  4. TensorFlow系列专题(十四): 手把手带你搭建卷积神经网络实现冰山图像分类

    目录: 冰山图片识别背景 数据介绍 数据预处理 模型搭建 结果分析 总结 一.冰山图片识别背景 这里我们要解决的任务是来自于Kaggle上的一道赛题(https://www.kaggle.com/c/ ...

  5. TensorFlow系列专题(二):机器学习基础

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/ ,学习更多的机器学习.深度学习的知识! 目录: 数据预处理 归一化 标准化 离散化 二值化 哑编码 特征 ...

  6. TensorFlow系列专题(十一):RNN的应用及注意力模型

    磐创智能-专注机器学习深度学习的教程网站 http://panchuang.net/ 磐创AI-智能客服,聊天机器人,推荐系统 http://panchuangai.com/ 目录: 循环神经网络的应 ...

  7. TensorFlow系列专题(六):实战项目Mnist手写数据集识别

    欢迎大家关注我们的网站和系列教程:http://panchuang.net/ ,学习更多的机器学习.深度学习的知识! 目录: 导读 MNIST数据集 数据处理 单层隐藏层神经网络的实现 多层隐藏层神经 ...

  8. Tensorflow系列专题(四):神经网络篇之前馈神经网络综述

    目录: 神经网络前言 神经网络 感知机模型 多层神经网络 激活函数 Logistic函数 Tanh函数 ReLu函数 损失函数和输出单元 损失函数的选择 均方误差损失函数 交叉熵损失函数 输出单元的选 ...

  9. TensorFlow系列专题(三):深度学习简介

    一.深度学习的发展历程 深度学习的起源阶段 深度学习的发展阶段 深度学习的爆发阶段 二.深度学习的应用 自然语言处理 语音识别与合成 图像领域 三.参考文献   一.深度学习的发展历程 作为机器学习最 ...

随机推荐

  1. P1102 A-B 数对

    P1102题库链接:https://www.luogu.org/problem/P1102 难度:普及- 算法标签:模拟,数论,排序,HASH,概率论,二分查找 1.朴素 O(n^2) 得分76 将输 ...

  2. Mongodb 对于Sort排序能够支持的最大内存限制查看和修改

    MongoDB Server对于Sort排序能够支持的最大内存限制查看: > use admin switched to db admin >db.runCommand({ getPara ...

  3. 47-Python进阶小结

    目录 Python进阶小结 一.异常TODO 二.深浅拷贝 2.1拷贝 2.2 浅拷贝 2.3 深拷贝 三.数据类型内置方法 3.1 数字类型内置方法 3.1.1 整型 3.1.2 浮点型 3.2 字 ...

  4. Pycharm2019.2激活至2089年

    PyCharm作为日常开发常用工具,过段时间就需要再次激活是个问题,今早找到个方法很实用,亲测也是有效的.激活成功如下图: 具体步骤如下: 1. 下载破解补丁和激活码[小哈学Java公众号提供],使用 ...

  5. Ubuntu 16.04.5部署Django环境

    1.安装python环境 使用如下命令安装的是3.5.x版本 sudo apt-get install python3-pip 如果使用下面的命令,会安装2.x版本的python sudo apt-g ...

  6. Arthas 实战,助你解决同名类依赖冲突问题

    上篇文章中,小黑哥分析 Maven 依赖冲突分为两类: 项目同一依赖应用,存在多版本,每个版本同一个类,可能存在差异. 项目不同依赖应用,存在包名,类名完全一样的类. 第二种情况,往往是这个场景,本地 ...

  7. 【tomcat系列】配置tomcat远程访问

    当程序部署在tomcat上后,需要监测tomcat的性能和监测tomcat的各项指标,如内存使用情况,cpu使用情况,jvm实际情况等,对于这些指标的监控,tomcat提供了访问入口,然而tomcat ...

  8. js 完美运动框架

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. 【python】提取sql语句中的表名

    前言 最近刚学python,写一个小工具时需要提取sql语句中表名,查询一番后找到一篇文章挺不错的,mark一下 PS.那篇文章是转载的,且没有标注转载自哪里 正文 import ply.lex as ...

  10. $api 回调函数then应用

    getReceiveListAPI (param) { return new Promise(resolve => { let params = { // idCard: this.idCard ...