吴恩达深度学习笔记——卷积神经网络(CNN)

目录

 

一、计算机视觉(Computer vision)

二、边缘检测示例(Edge detection example)

三、更多的边缘检测内容(More edge detection)

四、Padding

五、卷积步长(Strided convolution)

六、三维卷积(Convolution over volumes)

七、单层卷积网络(One layer of a convolution network)

八、简单卷积网络示例(A simple convolution network example)

九、池化层(Polling)

十、卷积神经网络示例(Convolution neural network example)

十一、为什么要使用卷积(Why convolutions)

一、计算机视觉(Computer vision)

图像分类、目标检测、图片风格迁移等。

要处理的图片往往比较大,如果使用全连接神经网络,那么参数太多,计算量太大,且容易过拟合。

如果图片是1000*1000像素,3通道RGB,那么输入是300million,假设隐藏层有1000个神经元,那么参数就是300million*1000=300billion,300亿个参数,过于庞大。

因此,需要进行卷积计算。

二、边缘检测示例(Edge detection example)

如上图,前几层检测边缘,后面的层检测人脸等特征。

检测垂直的线和水平的线。

下图的卷积核(kernel 或称作fielter)可以检测竖直的线。

三、更多的边缘检测内容(More edge detection)

除了检测竖直线外,还可以检测水平线等。

四、Padding

字面意思是填充,如果不做填充,那么6*6的图片经过3*3的卷积核处理后,大小变为f-n+1=4*4。

这样有两个缺点:

1、卷积操作后,图片的尺寸会减小。如果神经网络有100层,那么就会越来越小,这是我们不希望看到的结果。

2、原图片中心的点,如正中央的点,与卷积核进行过多次运算。而原图片的四个顶点,与卷积核仅仅进行了一次运算。这说明会丢掉一些边缘信息。

 

为了弥补上述两个缺点,进行padding操作。padding的字面意思是“填充”。

两种卷积方式:

1、valid方式:不做padding

2、same方式:做padding,使得卷积操作后的图片大小与原图片大小一致。

原始大小n, 卷积核大小f,padding是p,那么n-f+1+2p=n,求出p。

p=(f-1)/2

卷积核一般用奇数,3*3或5*5或7*7的,很少有人用偶数。可能有以下两个原因:

1、奇数的话,因为padding的计算公式是需要除以2。如果是偶数,则原图片的上边缘和下边缘处理不相同。

2、奇数的话,会让卷积核有一个中心点,正中央的位置,这在图像处理过程中比较方便。

 

五、卷积步长(Strided convolution)

卷积步长是指卷积核每次移动的跨度。

如下图,步长为2,则卷积核每次移动2个格子。

计算公式如下:

数学中的卷积,需要做180度的镜像翻转。

在机器学习中,不做翻转也不影响,所以就不做了。

数学家们称为“互相关”,cross-correlation,但机器学习的研究者们依然习惯称之为“卷积”。

六、三维卷积(Convolution over volumes)

3个通道(立方体的深度为3)的原图像,卷积核是3*3*3的小立方体。

计算时,27个数分别对应相乘,然后将27个数相加。最终得到4*4的结果。

如果想同时探测竖直方向的线和水平方向的线,那么可以设计两个卷积核。每个卷积核分别去做运算,最后得到4*4*2的结果。

计算公式如下图:

七、单层卷积网络(One layer of a convolution network)

计算过程:

不管输入的图片是多大的像素,卷积网络的参数永远都只有3*3*3+1=28个。这里加的1是指偏置项b。这就很好地避免了过拟合的问题。

每一层的输入和输出的维度计算:

八、简单卷积网络示例(A simple convolution network example)

随着网络深度的逐渐加深,前几层会保持原图片的大小,后面会变得越来越小,但通道数会逐渐增加。

大部分的卷积网络都会有这样的特点。

卷积网络中,不仅要有卷积层,也要有池化层(pool)和全连接层(fully connected)。

九、池化层(Polling)

为了缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性,使用池化层。

最大池化比较常用,平均池化较为少用。

如下图,是最大池化。相同颜色的四个数字中 取最大值。

下图中,原始输入是5*5,池化的f=3, 步幅s=1, 池化后输出的是3*3的。

这是对最大池化功能的直观理解,你可以把这个4×4输入看作是某些特征的集合,也许不是。你可以把这个4×4区域看作是某些特征的集合,也就是神经网络中某一层的非激活值集合。数字大意味着可能探测到了某些特定的特征,左上象限具有的特征可能是一个垂直边缘,一只眼睛,或是大家害怕遇到的CAP特征。显然左上象限中存在这个特征,这个特征可能是一只猫眼探测器。然而,右上象限并不存在这个特征。最大化操作的功能就是只要在任何一个象限内提取到某个特征,它都会保留在最大化的池化输出里。所以最大化运算的实际作用就是,如果在过滤器中提取到某个特征,那么保留其最大值。如果没有提取到这个特征,可能在右上象限中不存在这个特征,那么其中的最大值也还是很小,这就是最大池化的直观理解。

必须承认,人们使用最大池化的主要原因是此方法在很多实验中效果都很好。尽管刚刚描述的直观理解经常被引用,不知大家是否完全理解它的真正原因,不知大家是否理解最大池化效率很高的真正原因。

其中一个有意思的特点就是,它有一组超参数,但并没有参数需要学习。实际上,梯度下降没有什么可学的,一旦确定了和,它就是一个固定运算,梯度下降无需改变任何值。

我们来看一个有若干个超级参数的示例,输入是一个5×5的矩阵。我们采用最大池化法,它的过滤器参数为3×3,即,步幅为1,,输出矩阵是3×3。之前讲的计算卷积层输出大小的公式同样适用于计算最大池化的输出大小。

平均池化

目前来说,最大池化比平均池化更常用。但也有例外,就是深度很深的神经网络,你可以用平均池化来分解规模为7×7×1000的网络的表示层,在整个空间内求平均值,得到1×1×1000,一会我们看个例子。但在神经网络中,最大池化要比平均池化用得更多

 

执行反向传播时,反向传播没有参数适用于最大池化。只有这些设置过的超参数,可能是手动设置的,也可能是通过交叉验证设置的。

 

最大池化往往不加padding,padding是0.

十、卷积神经网络示例(Convolution neural network example)

下图是一个灵感来源于LeNet-5的跟他类似但是不完全相同的网络。

一个卷积层,跟着一个池化层。然后再卷积,再池化,这样输出的宽度和高度都逐渐减小,通道数逐渐增加。然后再到全连接层,全连接就是之前讲过的普通神经网络,参数数量是400*120,然后再跟着一个神经元数量更少的全连接层,最后通过softmax输出。

在卷积神经网络中,有很多的超参数。不建议自己尝试新的,建议查阅论文里学者们的经验。

 

接下来我们讲讲神经网络的激活值形状,激活值大小和参数数量。输入为32×32×3,这些数做乘法,结果为3072,所以激活值有3072维,激活值矩阵为32×32×3,输入层没有参数。计算其他层的时候,试着自己计算出激活值,这些都是网络中不同层的激活值形状和激活值大小。

有几点要注意,第一,池化层和最大池化层没有参数;第二卷积层的参数相对较少,前面课上我们提到过,其实许多参数都存在于神经网络的全连接层。观察可发现,随着神经网络的加深,激活值尺寸会逐渐变小,如果激活值尺寸下降太快,也会影响神经网络性能。示例中,激活值尺寸在第一层为6000,然后减少到1600,慢慢减少到84,最后输出softmax结果。我们发现,许多卷积网络都具有这些属性,模式上也相似。

神经网络的基本构造模块我们已经讲完了,一个卷积神经网络包括卷积层、池化层和全连接层。许多计算机视觉研究正在探索如何把这些基本模块整合起来,构建高效的神经网络,整合这些基本模块确实需要深入的理解。根据我的经验,找到整合基本构造模块最好方法就是大量阅读别人的案例。

十一、为什么要使用卷积(Why convolutions)

假设有一张32×32×3维度的图片,这是上节课的示例,假设用了6个大小为5×5的过滤器,输出维度为28×28×6。32×32×3=3072,28×28×6=4704。我们构建一个神经网络,其中一层含有3072个单元,下一层含有4074个单元,两层中的每个神经元彼此相连,然后计算权重矩阵,它等于4074×3072≈1400万,所以要训练的参数很多。虽然以现在的技术,我们可以用1400多万个参数来训练网络,因为这张32×32×3的图片非常小,训练这么多参数没有问题。如果这是一张1000×1000的图片,权重矩阵会变得非常大。我们看看这个卷积层的参数数量,每个过滤器都是5×5,一个过滤器有25个参数,再加上偏差参数,那么每个过滤器就有26个参数,一共有6个过滤器,所以参数共计156个,参数数量还是很少。

卷积的参数少的原因:
1、权值共享:检测竖直线的卷积核,在图片的左上角、右下角等所有位置都适用,因此可以共享同样的权值。
2、稀疏连接:每个卷积核计算都是九个数分别对应计算,即只考虑与九个像素点的关系,而不考虑其他点。

最后,我们把这些层整合起来,看看如何训练这些网络。比如我们要构建一个猫咪检测器,我们有下面这个标记训练集,表示一张图片,是二进制标记或某个重要标记。我们选定了一个卷积神经网络,输入图片,增加卷积层和池化层,然后添加全连接层,最后输出一个softmax,即。卷积层和全连接层有不同的参数和偏差,我们可以用任何参数集合来定义代价函数。一个类似于我们之前讲过的那种代价函数,并随机初始化其参数和,代价函数等于神经网络对整个训练集的预测的损失总和再除以(即)。所以训练神经网络,你要做的就是使用梯度下降法,或其它算法,例如Momentum梯度下降法,含RMSProp或其它因子的梯度下降来优化神经网络中所有参数,以减少代价函数的值。通过上述操作你可以构建一个高效的猫咪检测器或其它检测器。

至此,已经学习完了卷积神经网络的所有基本构造模块

转载自https://blog.csdn.net/qq_35175666/article/details/88666672#%E5%85%AD%E3%80%81%E4%B8%89%E7%BB%B4%E5%8D%B7%E7%A7%AF%EF%BC%88Convolution%20over%20volumes%EF%BC%89

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568041.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react实现全选和反选_全选的实现

在很多的表单中我们都会看到有一个这样的功能&#xff0c;全选后进行一系列的操作。如操作前操作后简单的js实现首先要定义多选框&#xff0c;在表头可以使用id来定义同时添加onclick点击事件<input type"checkbox" id"all" onclick"checkAllCart(…

对tf.nn.softmax的理解

Softmax的含义&#xff1a;Softmax简单的说就是把一个N*1的向量归一化为&#xff08;0&#xff0c;1&#xff09;之间的值&#xff0c;由于其中采用指数运算&#xff0c;使得向量中数值较大的量特征更加明显。 如图所示&#xff0c;在等号左边部分就是全连接层做的事。 W是全连…

面试后要请你吃饭_面试问同事请吃饭唯独不叫你咋办?小伙说这是好机会,当场被录取...

分享职场故事&#xff0c;交流职场经验&#xff0c;欢迎关注“罗波”。不知道大家在面试的过程中&#xff0c;有没有遇到过一些考官出了非常奇葩或者让你难以回答的题目。曾经在一次人事招聘的面试环节中&#xff0c;我的朋友小何就遇到了这样的一个问题&#xff0c;当时领导问…

心动的本质是什么_那一刻,我怦然心动了......

见到布莱斯罗斯基的第一天&#xff0c;我心动了。他的双眸有种魔力让我如痴如醉。女孩对一个刚见面的男孩一见钟情&#xff0c;男孩成了她的邻居&#xff0c;而她管这种感觉叫&#xff1a;怦然心动。2010年《怦然心动》上映&#xff0c;导演罗伯莱纳用一棵树&#xff0c;一对小…

筒灯智能驱动芯片作用_如然之光,魅族 Lipro 智能家居发布首期健康照明系列--智能设备 -...

1 月 5 日&#xff0c;魅族科技(MEIZU)正式发布了 Lipro 智能家居旗下的首期产品&#xff0c;Lipro 健康照明系列。作为 Lipro 品牌的首次产品亮相&#xff0c;Lipro 健康照明系列集顶尖光源品质与优雅工业设计于一体&#xff0c;为用户带来全场景、高品质的光照体验。Lipro 健…

vue 如何生成一个dom元素_通过一个简单的示例学习如何编写Vue组件

大家好&#xff0c;本篇文章我将带着大家一起学习如何编写自定义组件(Components)&#xff0c;通过「vue基础」新手快速入门篇(一)这篇文章的学习&#xff0c;我们知道了 Vue 设计的目的就是为了方便我们创建基于组件UI的项目。基于这个设计原则&#xff0c;我们可以更专注于设…

tensorFlow13卷积神经网络发展

数据增强&#xff1a;增加训练数据&#xff0c;水平翻转&#xff0c;改变对比度 dim代表插入的位置。0代表第一个位置&#xff0c;1表示第二个位置&#xff0c;-1表示最后一个位置

物体运动到一个点停止_大颗粒搭建中常见的结构运动

今天&#xff0c;给大家带来大颗粒搭建中常见的结构家长们可以带孩子一起将原理编程实践举一反三&#xff0c;创造创新&#xff01;1齿轮传动齿轮传动是指用主、从动轮的齿轮进行动力传递&#xff0c;从而达到使物体运动的作用。① 减速传动当小轮是主动力大轮是从动轮时物体作…

第k个数组中的最小值

练习1&#xff1a; 二维vector操作&#xff1a; #include<iostream> #include <vector> using namespace std; int main() {vector<vector<int>> a;vector<int> b;b.push_back(1);b.push_back(2);vector<int> c;c.push_back(11);c.push_b…

Leedcode1-求树的最小高度

#include<iostream> #include<algorithm> #include<queue> using namespace std; //5种情况&#xff1a;空树&#xff1b;没有子树&#xff1b;只有左/右子树&#xff1b;有俩子树&#xff1b; struct BinaryNode {BinaryNode *left;BinaryNode *right;int d…

C++/C中 sizeof(指针)和sizeof(数组名)的区别

1、sizeof(array)/sizeof(int)的含义 array是个数组 sizeof (array)就是这个数组所占的内存总量&#xff08;字节数), sizeof(int)就是单个所占的内存. 所以呢&#xff0c; sizeof (array&#xff09; / sizeof (int)就是array数组的元素的个数. 2、 sizeof(指针)和sizeof(数…

数据结构-栈3-栈的应用-就近匹配

#define _CRT_SECURE_NO_WARNINGS #include"LinkList.c" #include<stdio.h> #include<stdlib.h> #include<string.h> //括号有没有匹配。哪个不匹配就指向哪个。。 //扫描字符串 //1、非括号字符忽略 //2、若遇到左括号&#xff0c;则入栈 //3、若…

使用 Jekyll 构建你的网站 - 初入门

文章目录 一、Jekyll介绍二、Jekyll安装和启动2.1 配置Ruby环境1&#xff09;Windows2&#xff09;macOS 2.2 安装 Jekyll2.3 构建Jekyll项目2.4 启动 Jekyll 服务 三、Jekyll常用命令四、目录结构4.1 主要目录4.2 其他的约定目录 五、使用GitLink构建Jekyll博客5.1 生成Jekyll…

调用ice服务器_Nodejs+socket.io搭建WebRTC信令服务器

前言我们在学习 WebRTC 时&#xff0c;首先要把实验环境搭建好&#xff0c;这样我们就可以在上面做各种实验了。对于 WebRTC 来说&#xff0c;它有一整套规范&#xff0c;如使它使用的接口、使用SDP进行媒体协商、通过ICE收集地址并进行连通性检测等等。除此之外&#xff0c;We…

数据结构-栈4-栈的应用-中缀转后缀

//碰到数字直接输出 //运算符号&#xff1a;与栈顶符号进行优先级比较//若栈顶符号优先级比运算符号优先级低&#xff1a;此符号进栈&#xff08;括号优先级最低&#xff09;//若栈顶符号优先级不低于运算符号优先级&#xff1a;将栈顶符号一直弹出并输出&#xff0c;直到不满足…

四二拍用音符怎么表示_每个音符都是赞美歌拍子分析 0基础识简谱每日必看

点击上方蓝字 关注我们拍子状态分析是为了帮助0基础家人识谱用的&#xff0c;一首诗歌拿在手上只所以看起来复杂&#xff0c;是这些节奏让人眼花缭乱&#xff0c;其实真正理解了其中的含义&#xff0c;就会感觉豁然开朗&#xff0c;此种方法是掌握节奏型的捷径&#xff0c;不需…

数据结构-栈5-栈的应用-后缀转中缀

#define _CRT_SECURE_NO_WARNINGS #include"LinkList.c" #include<stdio.h> #include<stdlib.h> #include<string.h>//遇到数字压栈 //遇到符号&#xff0c;取出栈的第一个元素为右操作符&#xff0c;第二个元素为左操作符。计算完毕后压栈typedef…

midl会议_2020年医学图像处理领域值得关注的期刊和会议

期刊注册IEEE Xplore账号&#xff0c;将该期刊的更新添加提醒&#xff0c;每有新文章出来就会推送到邮箱。注册账号后也可以订阅文章更新会议MICCAI: International Conference on Medical Image Computing and Computer Assisted Intervention (每年9-10月)2.IPMI: Informatio…

数据结构排序1-冒泡,选择,插入排序

冒泡排序 &#xff0c;选择排序&#xff0c;插入排序 #include<iostream> #include<stdio.h> #include<stdlib.h> #include<random> #include<time.h> #include<sys/timeb.h> using namespace std; #define MAX 10long getSystemTime() {…