CNN-卷积神经网络简单入门(1)
卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一 ,通常由输入层、卷积层、池化层、全连接层、输出层结构组成,其中卷积层、池化层、全连接层可能有多层。CNN的结构特性有:
(1)局部连接
在传统的神经网络结构中,神经元之间的连接是全连接的,即n-1层的神经元与n层的所有神经元全部连接。但是在卷积神经网络中,n-1层与n 层的部分神经元连接。
(2)权值共享
每个滤波器与上一层局部连接,同时每个滤波器的所有局部连接都使用同样的权值参数,此举会大大减少网络的参数。
(3)下采样
逐渐降低数据的空间尺寸,减少网络中参数的数量,使得计算资源耗费变少,也能有效控制过拟合。
CNN的输入层、全连接层、输出层和普通神经网络的没有什么区别,接下将对卷积层和池化层进行介绍。
1.卷积层
卷积层用来提取图像特征,一个卷积核提取一种特征。卷积核的参数不同,输入特征图经过和卷积核进行卷积运算后得到的输出特征图就会不同,提取的特征也就不同。卷积层通常使用多个卷积核,提取图像的多种特征,得到的输出特征图的通道数和卷积核的数量一样。
1.1 卷积运算
一幅完整的图像,是由红色、绿色、蓝色三个通道组成的。当输入图像为灰度图像时,即为单通道,表示某一像素点颜色的数值只有1个;输入图像为RGB图像时,为多通道(三通道),表示某一像素点颜色的数值有3个。表示图像像素点颜色的数值组成的矩阵可称之为特征图,灰度图像的特征图只有2维,大小为(长,宽),而RGB图像的特征图有3维,大小为(长,宽,通道数),其中通道数就是3。当处理的对象存在多通道数时,使用的卷积核的通道数(第三维大小)也应与待处理对象的通道数大小保持一致。
1.1.1 单通道

计算结果如下:
0×0+1×1+3×2+4×3=19,1×0+2×1+4×2+5×3=25,3×0+4×1+6×2+7×3=37,4×0+5×1+7×2+8×3=43.
输出大小等于输入大小nh×nw减去卷积核大小kh×kw,即:(nh−kh+1)×(nw−kw+1)
1.1.2 多通道

阴影部分是第一个输出元素以及用于计算这个输出的输入和核张量元素:(1×1+2×2+4×3+5×4)+(0×0+1×1+3×2+4×3)=56。
1.2 填充
卷积操作常常会导致特征图越来越小。 解决这个问题的简单方法即为填充:在输入图像的边界填充元素(通常填充元素是 0 )。例如,在下图中,我们将3×3输入填充到5×5,那么它的输出就增加为4×4。
阴影部分是第一个输出元素以及用于输出计算的输入和核张量元素: 0×0+0×1+0×2+0×3=0。

通常,如果我们添加ph行填充(大约一半在顶部,一半在底部)和pw列填充(左侧大约一半,右侧一半),则输出形状将为(nh−kh+ph+1)×(nw−kw+pw+1),即输出的高度和宽度将分别增加ph和pw。
在许多情况下,我们需要设置ph=kh−1和pw=kw−1,使输入和输出具有相同的高度和宽度。假设kh是奇数,我们将在高度的两侧填充ph/2行。 如果kh是偶数,则一种可能性是在输入顶部填充⌈ph/2⌉行,在底部填充⌊ph/2⌋行。同理,我们填充宽度的两侧。卷积神经网络中卷积核的高度和宽度通常为奇数,例如1、3、5或7。 选择奇数的好处是,保持空间维度的同时,我们可以在顶部和底部填充相同数量的行,在左侧和右侧填充相同数量的列。
1.3 步幅
在进行卷积操作时,卷积窗口从输入张量的左上角开始,向下、向右滑动。 在前面的例子中,我们默认每次滑动一个元素。 但是,有时候为了高效计算或是缩减采样次数,卷积窗口可以跳过中间位置,每次滑动多个元素。我们将每次滑动元素的数量称为步幅(stride)。之前我们只使用过高度或宽度为1的步幅,在下图中是垂直步幅为3,水平步幅为2的卷积运算。 着色部分是输出元素以及用于输出计算的输入和内核张量元素:0×0+0×1+1×2+2×3=8、0×0+6×1+0×2+0×3=6。
可以看到,为了计算输出中第一列的第二个元素和第一行的第二个元素,卷积窗口分别向下滑动三行和向右滑动两列。但是,当卷积窗口继续向右滑动两列时,没有输出,因为输入元素无法填充窗口(除非我们添加另一列填充)。

通常,当垂直步幅为sh、水平步幅为sw时,输出形状为⌊(nh−kh+ph+sh)/sh⌋×⌊(nw−kw+pw+sw)/sw⌋。
如果我们设置了ph=kh−1和pw=kw−1,则输出形状将简化为⌊(nh+sh−1)/sh⌋×⌊(nw+sw−1)/sw⌋。 更进一步,如果输入的高度和宽度可以被垂直和水平步幅整除,则输出形状将为(nh/sh)×(nw/sw)。
2.池化层(降采样层、汇聚层)
与卷积层类似,汇聚层运算符由一个固定形状的窗口组成,该窗口根据其步幅大小在输入的所有区域上滑动,为固定形状窗口(有时称为汇聚窗口)遍历的每个位置计算一个输出。 然而,不同于卷积层中的输入与卷积核之间的卷积运算,汇聚层不包含参数。 相反,池运算是确定性的,我们通常计算汇聚窗口中所有元素的最大值或平均值。这些操作分别称为最大汇聚(maximum pooling)和平均汇聚(average pooling)。
在这两种情况下,与卷积操作一样,汇聚窗口从输入张量的左上角开始,从左往右、从上往下的在输入张量内滑动。在汇聚窗口到达的每个位置,它计算该窗口中输入子张量的最大值或平均值。计算最大值或平均值是取决于使用了最大汇聚层还是平均汇聚层。
汇聚窗口形状为 2×2 的最大汇聚层。着色部分是第一个输出元素,以及用于计算这个输出的输入元素: max(0,1,3,4)=4.
图中的输出张量的高度为2,宽度为2。这四个元素为每个汇聚窗口中的最大值:
参考资料:《动手学深度学习》
CNN-卷积神经网络简单入门(1)的更多相关文章
- Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN
http://m.blog.csdn.net/blog/wu010555688/24487301 本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep le ...
- [转]Theano下用CNN(卷积神经网络)做车牌中文字符OCR
Theano下用CNN(卷积神经网络)做车牌中文字符OCR 原文地址:http://m.blog.csdn.net/article/details?id=50989742 之前时间一直在看 Micha ...
- Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现(转)
Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文, ...
- CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?
https://www.zhihu.com/question/34681168 CNN(卷积神经网络).RNN(循环神经网络).DNN(深度神经网络)的内部网络结构有什么区别?修改 CNN(卷积神经网 ...
- CNN(卷积神经网络)、RNN(循环神经网络)、DNN,LSTM
http://cs231n.github.io/neural-networks-1 https://arxiv.org/pdf/1603.07285.pdf https://adeshpande3.g ...
- cnn(卷积神经网络)比较系统的讲解
本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之 ...
- Keras(四)CNN 卷积神经网络 RNN 循环神经网络 原理及实例
CNN 卷积神经网络 卷积 池化 https://www.cnblogs.com/peng8098/p/nlp_16.html 中有介绍 以数据集MNIST构建一个卷积神经网路 from keras. ...
- TensorFlow——CNN卷积神经网络处理Mnist数据集
CNN卷积神经网络处理Mnist数据集 CNN模型结构: 输入层:Mnist数据集(28*28) 第一层卷积:感受视野5*5,步长为1,卷积核:32个 第一层池化:池化视野2*2,步长为2 第二层卷积 ...
- 3层-CNN卷积神经网络预测MNIST数字
3层-CNN卷积神经网络预测MNIST数字 本文创建一个简单的三层卷积网络来预测 MNIST 数字.这个深层网络由两个带有 ReLU 和 maxpool 的卷积层以及两个全连接层组成. MNIST 由 ...
- 人工智能——CNN卷积神经网络项目之猫狗分类
首先先导入所需要的库 import sys from matplotlib import pyplot from tensorflow.keras.utils import to_categorica ...
随机推荐
- javascript原始值和引用值类型及区别
原始值和引用值类型及区别 首先,原始值和引用值类型都是js中的数据类型,为了充分利用存储空间,定义了不同的数据类型,而且js是弱类型,动态语言,数据类型可变. 原始值(简单数据类型) 存储在栈中的简单 ...
- Mysql客户端的安装
Mysql数据库(简称)属于C/S架构,正常工作中一般都会提供服务端,我们只需要安装客户端进行查询修改数据等操作即可. 正常工作中不管是测试人员或者开发人员,一般数据库的管理员(测试负责人或者开发负责 ...
- vue项目发布后,线上运行时刷新404
修改nginx配置文件 location / { root ... index ... try_files $uri $uri/ /index.html; ---解决页面刷新404问题 } (参考官网 ...
- 利用自定义动画 animate() 方法,实现某图书网站中“近 7 日畅销榜”中的图书无缝垂直向上滚动特效:当光标移入到图书上时,停止滚动,鼠标移开时,继续滚动
查看本章节 查看作业目录 需求说明: 利用自定义动画 animate() 方法,实现某图书网站中"近 7 日畅销榜"中的图书无缝垂直向上滚动特效:当光标移入到图书上时,停止滚动,鼠 ...
- MongoDB 安装及制作成windows服务
下载: 注:直接使用浏览器下载速度很慢,建议使用其他下载软件下载(比如:迅雷) 官网下载地址: https://fastdl.mongodb.org/win32/mongodb-win32-x86_ ...
- Selenium_浏览器窗口大小(6)
import time from selenium import webdriver driver = webdriver.Chrome() driver.maximize_window() driv ...
- 更加高效的遍历 Map
https://stackoverflow.com/questions/46898/how-do-i-efficiently-iterate-over-each-entry-in-a-java-map ...
- Hive的导入导出和常用过滤语句的学习
原文: https://www.toutiao.com/i6769166601871688196/?group_id=6769166601871688196 数据的导入 load data [loca ...
- java mapreduce二次排序
原文链接: https://www.toutiao.com/i6765808056191156748/ 目的: 二次排序就是有下面的数据 a 3 a 1 a 100 c 1 b 2 如果只按照abc排 ...
- 利用python绘制分析路易斯安那州巴吞鲁日市的人口密度格局
前言 数据来源于王法辉教授的GIS和数量方法,以后有空,我会利用python来实现里面的案例,这里向王法辉教授致敬. 绘制普查人口密度格局 使用属性查询提取区边界 import numpy as np ...