前言

前文详细介绍了卷积神经网络的开山之作LeNet,虽然近几年卷积神经网络非常热门,但是在LeNet出现后的十几年里,在目标识别领域卷积神经网络一直被传统目标识别算法(特征提取+分类器)所压制,直到2012年AlexNet(ImageNet Classification with Deep Convolutional

Neural Networks)在ImageNet挑战赛一举夺魁,使得卷积神经网络再次引起人们的重视,并因此而一发不可收拾,卷积神经网络的研究如雨后春笋一般不断涌现,推陈出新。

AlexNet是以它的第一作者Alex Krizhevsky而命名,这篇文章中也有深度学习领域三位大牛之一的Geoffrey Hinton的身影。AlexNet之所以这么有名气,不仅仅是因为获取比赛冠军这么简单。这么多年,目标识别、目标跟踪相关的比赛层出不穷,获得冠军的团队也变得非常庞大,但是反观一下能够像 AlexNet影响力这么大的,却是寥寥可数。

AlexNet相比于上一代的LeNet它首先在数据集上做了很多工作,

第一点:数据集

我们都知道,限制深度学习的两大因素分别输算力和数据集,AlexNet引入了数据增广技术,对图像进行颜色变换、裁剪、翻转等操作。

第二点:激活函数

在激活函数方面它采用ReLU函数代替Sigmoid函数,前面我用一篇文章详细的介绍了不同激活函数的优缺点,如果看过的同学应该清楚,ReLU激活函数不仅在计算方面比Sigmoid更加简单,而且可以克服Sigmoid函数在接近0和1时难以训练的问题。

第三点:Dropout

这也是AlexNet相对于LeNet比较大一点不同之处,AlexNet引入了Dropout用于解决模型训练过程中容易出现过拟合的问题,此后作者还发表几篇文章详细的介绍Dropout算法,它的引入使得卷积神经网络效果大大提升,直到如今Dropout在模型训练过程中依然被广泛使用。

第四点:模型结构

卷积神经网络的每次迭代,模型架构都会发生非常大的变化,卷积核大小、网络层数、跳跃连接等等,这也是不同卷积神经网络模型之间的区别最明显的一点,由于网络模型比较庞大,一言半语无法描述完整,下面我就来详细介绍一下AlexNet的网络模型。

AlexNet

如果读过前面一片文章应该了解,LeNet是一个5层的卷积神经网络模型,它有两个卷积层和3个全连接层。对比而言,AlexNet是一个8层的卷积升级网络模型,它有5个卷积层和3个全连接层。

我们在搭建一个网络模型的过程中,重点应该关注如下几点:

  • 卷积核大小
  • 输入输出通道数
  • 步长
  • 激活函数

关于AlexNet中使用的激活函数前面已经介绍过,它使用的是ReLU激活函数,它5层卷积层除了第一层卷积核为11*11、第二次为5*5之外,其余三层均为3*3,下面就详细介绍一下AlexNet的模型结构,

第一层:卷积层

卷积核大小11*11,输入通道数根据输入图像而定,输出通道数为96,步长为4。

池化层窗口大小为3*3,步长为2。

第二层:卷积层

卷积核大小5*5,输入通道数为96,输出通道数为256,步长为2。

池化层窗口大小为3*3,步长为2。

第三层:卷积层

卷积核大小3*3,输入通道数为256,输出通道数为384,步长为1。

第四层:卷积层

卷积核大小3*3,输入通道数为384,输出通道数为384,步长为1。

第五层:卷积层

卷积核大小3*3,输入通道数为384,输出通道数为256,步长为1。

池化层窗口大小为3*3,步长为2。

第六层:全连接层

输入大小为上一层的输出,输出大小为4096。

Dropout概率为0.5。

第七层:全连接层

输入大小为4096,输出大小为4096。

Dropout概率为0.5。

第八层:全连接层

输入大小为4096,输出大小为分类数。

注意:需要注意一点,5个卷积层中前2个卷积层后面都会紧跟一个池化层,而第3、4层卷积层后面没有池化层,而是连续3、4、5层三个卷积层后才加入一个池化层。

编程实践

在动手实践LeNet文章中,我介绍了网络搭建的过程,这种方式同样适用于除LeNet之外的其他模型的搭建,我们需要首先完成网络模型的搭建,然后再编写训练、验证函数部分。

在前面一篇文章为了让大家更加容易理解tensorflow的使用,更加清晰的看到网络搭建的过程,因此逐行编码进行模型搭建。但是,我们会发现,同类型的网络层之间很多参数是相同的,例如卷积核大小、输出通道数、变量作用于的名称,我们逐行搭建会有很多代码冗余,我们完全可以把这些通用参数作为传入参数提炼出来。因此,本文编程实践中会侧重于代码规范,提高代码的可读性。

编程实践中主要根据tensorflow接口的不同之处把网络架构分为如下4个模块:

  • 卷积层
  • 池化层
  • 全连接层
  • Dropout

卷积层

针对卷积层,我们把输入、卷积核大小、输入通道数、步长、变量作用域作为入参,我们使用tensorflow时会发现,我们同样需要知道输入数据的通道数,关于这个变量,我们可以通过获取输入数据的尺寸获得,

def conv_layer(self, X, ksize, out_filters, stride, name): in_filters = int(X.get_shape()[-1]) with tf.variable_scope(name) as scope: weight = tf.get_variable("weight

卷积核和全连接层的区别_「动手学计算机视觉」第十六讲:卷积神经网络之AlexNet...相关推荐

  1. 卷积层和全连接层的区别_卷积神经网络中全连接层作用理解总结

    前言 一般来说,卷积神经网络会有三种类型的隐藏层--卷积层.池化层.全连接层.卷积层和池化层比较好理解,主要很多教程也会解释. •  卷积层(Convolutional layer)主要是用一个采样器 ...

  2. 什么是1*1卷积?1*1的卷积核和全连接层有什么异同?

    简单回答一下: 1.数学本质上一样,都是特征图中的元素乘以权重再求和.全连接是把特征图拆开组成一个一维向量,再乘以一个权重向量,这两个向量中的元素一一对应所以输出结果是一个值.而1*1卷积,我们知道卷 ...

  3. 卷积层与全连接层的区别

    卷积层.池化层.全连接层的概念:https://towardsdatascience.com/convolutional-neural-network-17fb77e76c05 关于卷积.全连接层的参 ...

  4. 卷积层和全连接层的区别_CNN卷积层、全连接层的参数量、计算量

    我们以VGG-16为例,来探讨一下如何计算卷积层.全连接层的参数量.计算量.为了简单.直观地理解,以下讨论中我们都会忽略偏置项,实践中必须考虑偏置项. [卷积层的参数量] 什么是卷积层的参数? 卷积层 ...

  5. 全连接层的作用_全连接层实现

    本文以<Tensorflow2.0深度学习算法实战教材>参考,代码部分全程手打. 图1 将图1 堆叠可以得到含有多个隐藏层的全连接层,如图2所示.因为当前层的输入要与前一层的输出相匹配:所 ...

  6. 一阶微分算子锐化图像_【动手学计算机视觉】第三讲:图像预处理之图像分割...

    本讲完整代码>> 前言 图像分割是一种把图像分成若干个独立子区域的技术和过程.在图像的研究和应用中,很多时候我们关注的仅是图像中的目标或前景(其他部分称为背景),它们对应图像中特定的.具有 ...

  7. 卷积层和全连接层的区别_1*1的卷积核和全连接层有什么异同?

    简单回答一下: 1.数学本质上一样,都是特征图中的元素乘以权重再求和.全连接是把特征图拆开组成一个一维向量,再乘以一个权重向量,这两个向量中的元素一一对应所以输出结果是一个值.而1*1卷积,我们知道卷 ...

  8. C++ 偏微分数值计算库_【动手学计算机视觉】第一讲:图像预处理之图像去噪...

    我创建了一个知乎圈子:[平凡而诗意],专注于分享前沿技术.编程开发.实用工具等方面内容,感兴趣的可以首页搜索[平凡而诗意]加入我的圈子,让我们一起玩耍吧!QQ学习交流群:1077239487 平凡而诗 ...

  9. tensorflow gpu利用率低_「动手学习Tensorflow」- Tensorflow综述I

    " 一文概览Tensorflow方方面面." 大家好,我是人工智能工程师Alpha浪. 今天,我们开始「动手学习Tensorflow - Tensorflow 综述」部分. 快速学 ...

最新文章

  1. 小程序画布,随机24个数显示在画布上面,不可重叠
  2. 开源加持 NFV借势OPNFV实现进阶之路
  3. java创建线程代码_Java创建与结束线程代码示例
  4. 四十三、去年pandas的笔记
  5. 基于xilinx异构平台上视频采集分析
  6. python画星空的程序_用python画星空源代码是什么?
  7. JAXB: XML绑定的Java体系结构
  8. Vue CLI3 基本使用配置;
  9. altera fpga sdi输出方案_高段位攻城狮是这样解决SI分析、DDR、FPGA国产化问题的! | 电巢直播答疑汇总...
  10. python install causes ModuleNotFoundError: No module named ‘_swigfaiss‘
  11. sid图像数据_【技术前沿】首届“水下机器人目标抓取大赛”第一名的图像增强方法...
  12. (软考信息安全工程师--中级)二、网络攻击原理与常用方法
  13. 【OpenCV学习】对于仕琪所写《OpenCV教程基础篇》的一些想法
  14. javafx 教程_集成JavaFX和Swing
  15. assoc fetch mysql 用法_php mysql_fetch_assoc 循环遍历表格
  16. 博士读一半,导师跳槽了!博士生把亲身经历发在了Science上
  17. bilibili mac客户端 哔哩哔哩 b站mac客户端
  18. OGG跳过事务 logdump FORCETRANS begin now
  19. springboot大纲
  20. 无需任何配置,初学者必会的一键获取微信小程序源代码的快捷方法与工具使用

热门文章

  1. [转] 前端中的MVC
  2. grub4dos和winsetupfromusb1.4
  3. CentOS/Linux 卸载MATLAB
  4. 基于Linux的虚拟主机搭建
  5. ADOMD.net概述
  6. 重启唯一的窗体实例,以及调用系统重启函数失败解决办法
  7. HALCON示例程序ball电路板焊点识别、检测、测量程序2剖析(与上篇文章使用了不同方法)
  8. shopee虾皮科技测试工程师第一次笔试
  9. windows下的结束标志
  10. 求一个二维数组外围元素之和_C++数组作为函数的参数(学习笔记:第6章 04)...