Deeplearning.AI卷积神经网络 Week2 6-11

Deeplearning.AI卷积神经网络 Week2 6-11

目录

  • Google Inception 神经网络
  • 如何使用开源资源
  • 迁移学习
  • 数据扩充

Google Inception 神经网络

Inception模块
  • 在构建卷积神经网络的时候我们总要考虑过滤器的大小以及是否添加池化层、在何处添加池化层。Inception神经网络的优点就在于不用我们自己来决定以上问题,而是交给机器来决定。
  • 一个inception模块的结构如下图:
    在这里插入图片描述
    上图是一个经典的Inception module,来自前一层神经网络的是一个28x28x192的数据,对于每一种尺寸的过滤器我们首先都先用1x1的过滤器过滤一次,使用1*1的过滤器过滤的好处是可以改变原来数据通道的个数,从而减少神经网络的计算量而不影响性能。
    经过1x1的过滤器过滤,我们减少了数据的通道数,保留1x1过滤的结果、一部分再用3x3的过滤器过滤、另一部分用5x5的过滤器过滤剩、下一部分采用池化层。最终我们把所有的输出的通道依次连接起来就构成了输出。
    需要注意的是为了保证所有方法输出的结果的维度是相同的,对于不同大小的过滤器均采用same的方法,调整padding来保证输出维度相同
    这个模型的优点就在于跳过了过滤器大小的选择,让机器通过自己训练参数来优化模型。
完整的Inception网络
  • 一个完整的Inception实际上就是由多个Inception模块构成的,我们来看下图解释一下:
    在这里插入图片描述
    这是一张取自Szegety et al.论文中的图片,他是由许多上面讲的inception模块组合而成的图片。不过如果你仔细观察会在中间看见多余的橙色块,这些多出来的橙色块是用来调节数据的长和宽两个维度的。
  • 此外,值得注意的是,在有些层还有不同于之前inception模块的结构,如下图所示:
    在这里插入图片描述
    我们看到了这种模型不同于一般的inception module 具有自己的全连接层和输出层,这种模型一般出现在inception神经网络的后面几层,一般这种利用中间隐藏层输出的结果也可以参与到最终的输出的预测,起到了一种调节效果,并且能防止神经网络的过拟合。
  • 说些题外话,这种inception 神经网络是由Google开发的,被叫做是GoogleLeNet ,为了致敬传统的LeNet神经网络。
    Inception 神经网络的命名来源于盗梦空间(Inception),因为盗梦空间中有一个镜头说到"We should go deeper",这代表了发明这个神经网络的人希望自己的神经网络也可以"Go deeper"

如何使用开源资源

  • 因为很多神经网络的参数调节是复杂而精细的,如果从头开始训练需要大量数据去喂,同时也需要大量的精力去调节参数。所以使用网络开源的神经网络是一个不错的方法。
  • 使用GitHub下载开源代码:
  1. 首先用Google搜索你需要的神经网络+GitHub(开源社区),然后找到对应的资源,点击右上角的Fork(Fork原本是计算机内核调度的一个函数,用于在父进程上创建一个子进程,这里Fork的作用是讲这份开源代码复制到你的Git上)。
  2. 在你自己个人的GitHub上选择download下载这份代码,在本地编辑器打开这份代码就可以更改这份代码,并加入你的内容,从而构建属于你自己的神经网络了。

迁移学习

  • Andrew在卷积神经网络之前也提到过迁移学习的方法,在之前我已经对迁移学习是什么做过详细的讲解,下面就是迁移学习的传送门:https://blog.csdn.net/scanf_yourname/article/details/86498804
  • 为什么要采用迁移学习?
    因为想要训练好一个神经网络模型需要大量的数据,相比于从头开始训练权重或者随机初始化权重,下载别人已经训练好的神经网络模型,用其作为预训练模型,可以使你的训练效率提高很多。而且在视觉领域许多人喜欢把自己的训练数据上传到网络的开源社区,比如ImageNet、MS COCO、Pascal类型的数据集,很多视觉工作者使用这些数据集训练过他们的算法,这期间他们经历了复杂而痛苦的调参过程,并在最终得到了比较理想的结果,这期间可能要经历几星期甚至是几个月的时间,耗费大量的GPU运算,如果我们单纯从头开始训练神经网络一方面需要消耗大量的时间,另一方面需要大量运算能力的GPU,很多时候是很不现实的。这就看出来了迁移学习的重要性。
  • 如何实现迁移学习?
    在这里我想举几个例子来说明,如下图所示:
    在这里插入图片描述
    上图中,第一个神经网络是一个图像识别系统,现在要把它改成一个x光诊断系统。首先把原神经网络的输出层和其对应权重删除,然后为输出层重新赋上随机权重并把这个神经网络放在x光诊断的数据上重新训练,训练结束后看看效果如何。具体的训练策略有两种,如果你有足够多的x光诊断数据,可以选择训练整个神经网络;如果你的训练数据不是很多,可以选择只训练输出层。
    第二个神经网络是一个语音识别系统,我们要把它改成一个激活系统。语音识别系统的输入是一些音频输出是一些听写文本。同样我们选择删除原神经网络的输出层和输出层参数并加入新的输出节点或许这个例子里面你需要再向神经网络中加入几层,然后把新的标签输入神经网络进行训练。同样取决于数据多少,你可以训练新加入的几层或者所有层
  • 为什么迁移学习是有效果的?
    简单来说,神经网络每一层用于提取来自输入的不同特征,对于功能相似的神经网络,在前几层或者是某基层的特征是相似的,所以应该具有相似的参数,这就像人学过一类知识会把它迁移到相关领域一样。所以,使用迁移学习在很多的时候能够大大节约了训练的时间成本。
    在我们举的关于图像识别的例子中有很多低层次的特征,比如边缘检测、曲线检测、阳性对象探测(positive object detecting),这些特征可以从基于大规模数据的图像神经网络中习得,并应用于放射性诊断中。算法从图像神经网络中学到了很多结构信息、图像形状信息并利用这些信息帮助你的放射性诊断网络。

数据扩充

  • 不想其他领域,计算机视觉训练神经网络需要更多的数据,所以数据扩充是十分有必要的,数据扩充有几种基本的方法:垂直镜像对称法、随机剪裁法、旋转法、局部扭曲法、色彩变换法等等
  • 垂直镜像对称法:顾名思义就是对原始图片做垂直的镜像对称。因为原图片经过垂直镜像对称处理后,保留了要识别物体的特征。垂直镜像对称是数据增强中很实用的一个技巧。
    垂直镜像对称实例
  • 随机剪裁法:给定一个数据集并对其中图片进行随机剪裁,并将剪裁后的图片放入你的训练集当中,一张图片可以拥有多种不同剪裁。
    随机剪裁实例
  • 色彩变换法:我们都知道彩色图片有RBG三个通道,色彩变换法就是改变原图像某几个通道的值,从而使原图片与新生成的图片产生一定的色差,将新生成的图片放入训练集训练,可以增强图像识别系统对于光线和其他因素导致色差问题的鲁棒性。
    -色彩变换法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值