Deep Learning.ai学习笔记_第四门课_卷积神经网络

目录算法

第一周 卷积神经网络基础数据库

第二周 深度卷积网络:实例探究网络

第三周 目标检测多线程

第四周 特殊应用:人脸识别和神经风格转换架构

 

第一周 卷积神经网络基础

垂直边缘检测器,经过卷积计算,能够把多维矩阵进行降维。以下图:函数

 

卷积运算提供了一个方便的方法来发现图像中的垂直边缘。例以下图:性能

 

对于3x3的过滤器,使用下面的数字组合鲁棒性比较高,这样的过滤器也称为Sobel过滤器学习

 

还有一种称为Scharr的过滤器,以下:编码

随着深度学习的发展,咱们学习的其中一件事就是当你真正想去检测出复杂图像的边缘,你不必定要去使用那些研究者们所选择的这九个数字(3x3的过滤器),但你能够从中获益匪浅。把这矩阵中的9个数字当成9个参数,而且在以后你能够学习使用反向传播算法,其目标就是去理解这9个参数。spa

 

将矩阵的全部数字都设置为参数,经过数据反馈,让神经网络自动去学习它们,咱们会发现神经网络能够学习一些低级的特征,例如这些边缘的特征。

 

padding卷积,为了指定卷积操做中的padding,你能够指定的值。也可使用Valid卷积,也就是p = 0。也可以使用Same卷积填充像素,使你的输出和输入大小相同。(same卷积填充的核心要点,是使得原给出的矩阵中像素点都可以均匀被调用计算,不然边缘点调用少,从而被忽略)

 

一个典型的卷积神经网络一般有三层,一个是卷积层,咱们经常用Conv来标注。还有两种常见类型的层,一个是池化层,咱们称之为POOL。最后一个是全链接层,用FC表示。以下图:

 

卷积网络中使用池化层,也可以缩减模型的大小,提升计算速度,同时提升所提取特征的鲁棒性。一下是一个池化层的例子, 把4×4的输入拆分红不一样的区域,我把这个区域用不一样颜色来标记。对于2×2的输出,输出的每一个元素都是其对应颜色区域中的最大元素值。

 

最大化操做的功能就是只要在任何一个象限内提取到某个特征,它都会保留在最大化的池化输出里。因此最大化运算的实际做用就是,若是在过滤器中提取到某个特征,那么保留其最大值。若是没有提取到这个特征,可能在右上象限中不存在这个特征,那么其中的最大值也仍是很小,这就是最大池化的直观理解。

 

池化的超级参数包括过滤器大小f和步幅s,经常使用的参数值为f = 2,s = 2,应用频率很是高,其效果至关于高度和宽度缩减一半。

 

最大池化只是计算神经网络某一层的静态属性,它只是一个静态属性。

 

如何选定这些参数,常规作法是,尽可能不要本身设置超参数,而是查看文献中别人采用了哪些超参数,选一个在别人任务中效果很好的架构,那么它也有可能适用于你本身的应用程序。

 

下面看一个卷积神经网络的例子,步骤通常为卷积->池化->卷积->池化... ... ->全链接,全链接等。以下图:

 

第二周 深度卷积网络:实例探究

当用于训练图像和数据集时,AlexNet可以处理很是类似的基本构造模块,这些模块每每包含着大量的隐藏单元或数据,这一点AlexNet表现出色。AlexNetLeNet表现更为出色的另外一个缘由是它使用了ReLu激活函数。以下图:

 

很是很是深的神经网络是很难训练的,由于存在梯度消失和梯度爆炸问题。 跳跃链接(Skip connection),它能够从某一层网络层获取激活,而后迅速反馈给另一层,甚至是神经网络的更深层。咱们能够利用跳跃链接构建可以训练深度网络的ResNets,有时深度可以超过100层。

如图所示,5个残差块链接在一块儿构成一个残差网络。

 

通常状况,随着网络深度加深,训练错误会愈来愈多。可是ResNets不同, 即便网络再深,训练的表现却不错,好比说训练偏差减小,就算是训练深达100层的网络也不例外。这种方法,能够有助于 解决梯度消失和梯度爆炸问题,让咱们在训练更深网络的同时,又能保证良好的性能。也许从另一个角度来看,随着网络越来深,网络链接会变得臃肿,可是ResNet确实在训练深度网络方面很是有效。

 

普通网络和ResNets网络经常使用的结构是:卷积层-卷积层-卷积层-池化层-卷积层-卷积层-卷积层-池化层……依此重复。直到最后,有一个经过softmax进行预测的全链接层。

 

1×1卷积层 给神经网络添加了一个非线性函数,从而减小或保持输入层中的通道数量不变,固然若是你愿意,也能够增长通道数量。后面你会发现这对构建Inception网络颇有帮助。以下图:

 

若是你看到一篇研究论文想应用它的成果,你应该考虑作一件事,我常常作的就是在网络上寻找一个开源的实现。由于你若是能获得做者的实现,一般要比你从头开始实现要快得多,虽然从零开始实现确定能够是一个很好的锻炼。

 

在本身遇到的问题,训练的数据集内容比较少时,能够从网上下载一些以已训练且数据集比较大的模型,而后修改其最后的softmax输出值,而后再在此模型上进行训练学习,这就是卷积网络训练中的迁移学习,通常可以达到很好的效果。

 

经常使用的实现数据扩充的方法是使用一个线程或者是多线程,这些能够用来加载数据,实现变形失真,而后传给其余的线程或者其余进程。

 

当你没有太多标签数据时,你只须要更多地考虑手工工程。 另外一套技术,当你有相对较少的数据时就能够用不少类似的数据。

 

第三周 目标检测

目标定位

 

滑动窗口目标检测,经过不断改变初始窗口的大小,以必定的步幅移动该窗口,对意向目标进行检测。具体以下图:

 

滑动窗口目标检测算法也有很明显的缺点,就是计算成本,由于你在图片中剪切出太多小方块,卷积网络要一个个地处理。若是你选用的步幅很大,显然会减小输入卷积网络的窗口个数,可是粗糙间隔尺寸可能会影响性能。反之,若是采用小粒度或小步幅,传递给卷积网络的小窗口会特别多,这意味着超高的计算成本。

 

YOLO对象检测算法是最有效的对象检测算法之一,包含了整个计算机视觉对象检测领域文献中不少最精妙的思路。

 

第四周 特殊应用:人脸识别和神经风格转换

人脸识别,须要解决一次学习的问题。 要让人脸识别可以作到一次学习,为了能有更好的效果,要作的应该是学习Similarity函数。 解决一次学习问题的,只要你能学习函数d,经过输入一对图片,它将会告诉你这两张图片是不是同一我的。若是以后有新人加入了你的团队(编号5),你只需将他的照片加入你的数据库,系统依然能照常工做。

 

函数的做用就是输入两张人脸,而后告诉你它们的类似度。实现这个功能的一个方式就是用Siamese网络,以下图:

 

对于两个不一样的输入,运行相同的卷积神经网络,而后比较它们,这通常叫作Siamese网络架构。

 

要想经过学习神经网络的参数来获得优质的人脸图片编码,方法之一就是定义三元组损失函数而后应用梯度降低。学习收集定义好的三元组数据集, 用梯度降低最小化咱们以前定义的代价函数,这样作的效果就是反向传播到网络中的全部参数来学习到一种编码,使得若是两个图片是同一我的,那么它们的d就会很小,若是两个图片不是同一我的,它们的d就会很大。以下图:

 

人脸识别的另外一种方法是能够把识别过程当成一个二分类问题。对比两种图片的差别,输出类似度,以下图:

 

什么是神经风格迁移?

例如,能够把一张图片的元素整合到另外一张图片中,以下图:

 

 

 

 

参考资料:

1.http://www.ai-start.com

相关文章
相关标签/搜索