4.2深度卷积网络

觉得有用的话,欢迎一起讨论相互学习~Follow Me

参考文献
Inception网络 --Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[J]. 2014:1-9.

2.5网络中的网络与1*1卷积

Network in Network

  • 在架构内容设计方面,一个比较有帮助的想法是使用\(1*1\)的卷积。输入一张\(6*6*1\)的单通道图片,使用一个\(1*1*1\)的小卷积核。结果相当于把原有的像素对应乘以2.
  • 对于单通道的图片看不出什么效果,但是如果是一张\(6*6*32\)的图片,卷积核大小为\(1*1*32\)的具有32个通道的卷积核,卷积效果不错。
    • 具体而言,即是遍历原始图片的36个单元格,计算左图中32个通道中的数字和卷积核中32个数字的元素的智能乘积(对应位置的乘积加和)。然后应用ReLU非线性函数。
    • \(1*1的卷积\)也被称为Network in Network

    示例

  • 假设输入层的大小为\(28*28*192\)的192个通道的特征图,想要使192个通道的特征图压缩为具有32个通道的特征图,则可以使用32个\(1*1*192\)的卷积核对这个特征图进行卷积操作。具体而言,一般只需要设置卷积核的长和宽而无需设置卷积核的通道数维度。因为一般而言卷积核的第三个维度是和原始特征图的通道数量保持一致的。


2.6谷歌Inception网络简介

问题引入

  • 当构建卷积层时,你要决定卷积核的大小究竟是\(1*3\)还是\(3*3\)或者是\(5*5\).并且什么时候加入池化层。这些都是十分繁琐而纠结的。
  • 而Inception网络的作用就是代替你来做决定以构建网络的结构。虽然网络结构因此变得更加复杂,但是网络变现却非常好。

    Inception网络原理

  • Inception网络可以代替人工来确定卷积层中卷积核的类型,或者确定是否需要创建卷积层或池化层。
  • 假设输入为\(28*28*192\)的具有192个通道的图片。以下卷积都是通过"SAME"方式进行卷积。使用64个\(1*1\)的卷积核得到的特征图大小为\(28*28*64\),如果使用128个\(3*3\)的卷积核进行卷积,得到的特征图的大小为\(28*28*128\).如果使用32个\(5*5\)的卷积核进行卷积,得到的特征图的大小为\(28*28*32\).此时将三个特征图堆叠在一起。
  • 当然你也可以直接使用最大值池化层,输出的结果为\(28*28*32\)。也将结果特征图堆叠在一起。为了使所有的特征图长和宽一致,需要对池化层也使用Padding=“SAME”操作。
  • 此时,这个堆叠起来的\(28*28*256\)的结构被称为"Inception模块"

  • 基本思想是Incetion 网络不需要人为决定使用哪个过滤器,或者是否需要池化,而是由网络自行决定确定这些参数。你可以给模块增加这些参数,然后把这些输出连接起来,让网络自己学习它需要什么样的参数,采用哪些过滤器组合。

    Inception网络计算成本

  • 假设Inception网络的输入是一个\(28*28*192\)的具有192个通道的特征图片,使用32个\(5*5\)的卷积核以Padding="SAME"的方式进行卷积,则输出为\(28*28*32\)
  • 使用了32个过滤器,每个过滤器的大小为\(5*5*192\)因为输入图片的信道数量为192。所以对于输出特征图中的\(28*28*32\)个节点每一个都需要进行\(5*5*192\)次乘法运算,即每个输出值所需的乘法运算次数乘以输出值的个数。
    \[28*28*32*5*5*192=120M=1.2亿\]

    使用Network in Network瓶颈层降低网络的计算成本

  • 使用16个\(1*1\)的卷积核把输入值从192个信道减少到16个信道。然后对于这个小的特征图,使用32个\(5*5*16\)的卷积核得到最终输出。
  • 注意这种方式下得到的\(28*28*32\)的特征图和上文中的特征图的维度一致。
  • 目的就是将左边较大的特征图压缩成较小的中间层,这个中间层有时被称为瓶颈层(bottleneck layer)
  • 此时瓶颈层所有神经元的计算成本为\[28*28*16*1*1*192=2.4M=240W\]
  • 第二个卷积层得计算成本为\[28*28*32*5*5*16=10M=1000W\]
  • 所以这两层的计算成本之和为\[240W+1000W=1240W\]
    这使得原来的120M的计算成本降低成大约原来的10分之1即12.4M,所需的加法次数与乘法次数相近,所以只统计了乘法运算的次数。
  • 事实证明,只要合理构建瓶颈层,你既可以显著的缩小表示层规模又不会降低网络性能,从而大大节省了计算


2.7Inception网络GoogleNet

  • 所有卷积和池化操作均使用Padding="SAME"卷积/池化方式
  • Inception网络即是Inception模块的重复拼接,其中插有额外的有池化层来改变模型的宽度和高度。

  • Inception网络是一个可调整的网络,其可以根据需要只是用网络中的部分节点进行预测和分类。即在网络中有全连接层和Sofxmax分类分支用以进行分类。

[DeeplearningAI笔记]卷积神经网络2.5-2.7 Network in Network/1*1卷积/Inception网络/GoogleNet的更多相关文章

  1. 李宏毅机器学习笔记5:CNN卷积神经网络

    李宏毅老师的机器学习课程和吴恩达老师的机器学习课程都是都是ML和DL非常好的入门资料,在YouTube.网易云课堂.B站都能观看到相应的课程视频,接下来这一系列的博客我都将记录老师上课的笔记以及自己对 ...

  2. CS231n课程笔记翻译9:卷积神经网络笔记

    译者注:本文翻译自斯坦福CS231n课程笔记ConvNet notes,由课程教师Andrej Karpathy授权进行翻译.本篇教程由杜客和猴子翻译完成,堃堃和李艺颖进行校对修改. 原文如下 内容列 ...

  3. CNN笔记:通俗理解卷积神经网络【转】

    本文转载自:https://blog.csdn.net/v_july_v/article/details/51812459 通俗理解卷积神经网络(cs231n与5月dl班课程笔记) 1 前言 2012 ...

  4. tensorflow学习笔记——图像识别与卷积神经网络

    无论是之前学习的MNIST数据集还是Cifar数据集,相比真实环境下的图像识别问题,有两个最大的问题,一是现实生活中的图片分辨率要远高于32*32,而且图像的分辨率也不会是固定的.二是现实生活中的物体 ...

  5. Python机器学习笔记:卷积神经网络最终笔记

    这已经是我的第四篇博客学习卷积神经网络了.之前的文章分别是: 1,Keras深度学习之卷积神经网络(CNN),这是开始学习Keras,了解到CNN,其实不懂的还是有点多,当然第一次笔记主要是给自己心中 ...

  6. CNN笔记:通俗理解卷积神经网络

    CNN笔记:通俗理解卷积神经网络 2016年07月02日 22:14:50 v_JULY_v 阅读数 250368更多 分类专栏: 30.Machine L & Deep Learning 机 ...

  7. 【学习笔记】卷积神经网络 (CNN )

    前言 对于卷积神经网络(cnn)这一章不打算做数学方面深入了解,所以只是大致熟悉了一下原理和流程,了解了一些基本概念,所以只是做出了一些总结性的笔记. 感谢B站的视频 https://www.bili ...

  8. 卷积神经网络CNN学习笔记

    CNN的基本结构包括两层: 特征提取层:每个神经元的输入与前一层的局部接受域相连,并提取该局部的特征.一旦该局部特征被提取后,它与其它特征间的位置关系也随之确定下来: 特征映射层:网络的每个计算层由多 ...

  9. (转载)Convolutional Neural Networks卷积神经网络

    Convolutional Neural Networks卷积神经网络 Contents 一:前导 Back Propagation反向传播算法 网络结构 学习算法 二:Convolutional N ...

随机推荐

  1. vue之指令篇 ps简单的对比angular

    这两天在开始vue的大型项目,发现和ng还是有许多不同,这里对比下两者的指令系统 难度系数:ng的指令难度大于vue:至少vue上暂时没发现@&=:require,compile,precom ...

  2. PHP开发中常见的漏洞及防范

    PHP开发中常见的漏洞及防范 对于PHP的漏洞,目前常见的漏洞有五种.分别是Session文件漏洞.SQL注入漏洞.脚本命令执行漏洞.全局变量漏洞和文件漏洞.这里分别对这些漏洞进行简要的介绍和防范. ...

  3. Beautiful Year(拆分四位数)

    Description It seems like the year of 2013 came only yesterday. Do you know a curious fact? The year ...

  4. scrum立会报告+燃尽图(第三周第七次)

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2286 项目地址:https://coding.net/u/wuyy694 ...

  5. 人生苦短,我用Python!

    一.程序分析 1.读取文件到缓冲区 def process_file(): # 读文件到缓冲区 try: # 打开文件 f = open("C:\\Users\\panbo\\Desktop ...

  6. 团队Alpha冲刺(八)

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...

  7. Dijkstra、Bellman_Ford、SPFA、Floyd算法复杂度比较

    参考 有空再更新下用c++, 下面用的Java Dijkstra:适用于权值为非负的图的单源最短路径,用斐波那契堆的复杂度O(E+VlgV) BellmanFord:适用于权值有负值的图的单源最短路径 ...

  8. goroutine与channels

    goroutine(协程) 大家都知道java中的线程Thread,golang没有提供Thread的功能,但是提供了更轻量级的goroutine(协程),协程比线程更轻,创办一个协程很简单,只需要g ...

  9. 团队作业4——第一次项目冲刺(Alpha版本)第一次

    一.会议内容 制定任务内容 制作leangoo表格 初步工作 二.各人工作 成员 计划任务 遇见难题 贡献比 塗家瑜(组长) 后端与数据库通讯 无 1 张新磊 表设计 无 1 姚燕彬 测试计划编写 无 ...

  10. Windows Forms编程实战学习:第一章 初识Windows Forms

    初识Windows Forms 1,用C#编程 using System.Windows.Forms;   [assembly: System.Reflection.AssemblyVersion(& ...