0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【连载】深度学习笔记14:CNN经典论文研读之Le-Net5及其Tensorflow实现

人工智能实训营 2019-01-14 09:26 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在前几次笔记中,笔者基本上将卷积神经网络的基本原理给讲完了。从本次笔记开始,笔者在深度学习笔记中会不定期的对 CNN 发展过程中的经典论文进行研读并推送研读笔记。今天笔者就和大家一起学习卷积神经网络和深度学习发展历史上具有奠基性的经典论文之一的关于 LeNet-5 网络一文。LeNet-5 是由具有卷积神经网络之父之美誉的 Yann LeCun 在1998年发表在 IEEE 上面的一篇 Gradient-based learning applied to document recognition 上提出来的,所以直接由 LeCun 大佬名字命名了。
论文原文:
http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf

LeNet-5 网络结构

该篇论文有 42 页,但关于 LeNet-5 网络的核心部分并没有那么多,我们直接定位第二章的B 小节进行阅读。LeNet-5 的网络结构如下:


LeNet-5 共有 7 层,输入层不计入层数,每层都有一定的训练参数,其中三个卷积层的训练参数较多,每层都有多个滤波器,也叫特征图,每个滤波器都对上一层的输出提取不同的像素特征。所以 LeNet-5 的简略结构如下:

输入-卷积-池化-卷积-池化-卷积(全连接)-全连接-全连接(输出)

各层的结构和参数如下:
C1层是个卷积层,其输入输出结构如下:
输入: 32 x 32 x 1 滤波器大小: 5 x 5 x 1 滤波器个数:6
输出: 28 x 28 x 6
参数个数: 5 x 5 x 1 x 6 + 6 = 156

P2层是个池化层,其输入输出结构如下:
输入: 28 x 28 x 6 滤波器大小: 2 x 2 滤波器个数:6
输出: 14 x 14 x 6
参数个数:2 x 6 = 12
在原文中,P1池化层采用的是平均池化,鉴于现在普遍都使用最大池化,所以在后面的代码实现中我们统一采用最大池化。

C3层是个卷积层,其输入输出结构如下:
输入: 14 x 14 x 6 滤波器大小: 5 x 5 x 6 滤波器个数:16
输出: 10 x 10 x 16
参数个数: 5 x 5 x 6 x 16 + 16 = 2416
640?wx_fmt=png
P2 池化之后的特征图组合计算得到C3的滤波器个数。

P4层是个池化层,其输入输出结构如下:
输入: 10 x 10 x 16 滤波器大小: 2 x 2 滤波器个数:16
输出: 5 x 5 x 16
参数个数: 2 x 16 = 32

C5层在论文中是个卷积层,但滤波器大小为 5 x 5,所以其本质上也是个全连接层。如果将5 x 5 x 16 拉成一个向量,它就是一个全连接层。其输入输出结构如下:
输入: 5 x 5 x 16 滤波器大小: 5 x 5 x 16 滤波器个数:120
输出: 1 x 1 x 120
参数个数: 5 x 5 x 16 x 120 + 120 = 48120

F6层是个全连接层,全连接的激活函数采用的是 tanh 函数,其输入输出结构如下:
输入:120
输出:84
参数个数:120 x 84 + 84 = 10164

F7层即输出层,也是个全连接层,其输入输出结构如下:
输入:84
输出:10
参数个数: 84 x 10 + 10 = 850

LeNet-5 的 Tensorflow 实现

我们前面关于如何使用 Tensorflow 搭建卷积神经网络的过程可以定下实现 LeNet-5 的基本思路。如果在 python 中写的时候我们需要定义创建输入输出的占位符变量模块、初始化各层参数模块、创建前向传播模块、定义模型优化迭代模型,以及在最后设置输入数据。

下面笔者用以上思路编写一个 LeNet-5 的简单实现代码。
导入相关库和创建输入输出的占位符变量:

importtensorflowastf
importnumpyasnp
fromtensorflow.examples.tutorials.mnistimportinput_data
defcreate_placeholder():
X=tf.placeholder(tf.float32,shape=(None,28*28))
Y=tf.placeholder(tf.float32,shape=(None,10))
keep_prob=tf.placeholder(tf.float32)
returnX,Y,keep_prob


初始化各层参数:

definitialize_parameters():
W1=tf.get_variable('W1',[5,5,1,6],initializer=tf.contrib.layers.xavier_initializer())
b1=tf.get_variable('b1',[6],initializer=tf.zeros_initializer())

W2=tf.get_variable('W2',[5,5,6,16],initializer=tf.contrib.layers.xavier_initializer())
b2=tf.get_variable('b2',[16],initializer=tf.zeros_initializer())

W3=tf.get_variable('W3',[5,5,16,120],initializer=tf.contrib.layers.xavier_initializer())
b3=tf.get_variable('b3',[120],initializer=tf.zeros_initializer())

W4=tf.get_variable('W4',[120,84],initializer=tf.contrib.layers.xavier_initializer())
b4=tf.get_variable('b4',[84],initializer=tf.zeros_initializer())

W5=tf.get_variable('W5',[84,10],initializer=tf.contrib.layers.xavier_initializer())
b5=tf.get_variable('b5',[10],initializer=tf.zeros_initializer())

para={'W1':W1,
'b1':b1,
'W2':W2,
'b2':b2,
'W3':W3,
'b3':b3,
'W4':W4,
'b4':b4,
'W5':W5,
'b5':b5}
returnpara


创建 LeNet-5 的前向计算:

defforward_propagation(X,para,dropout):

X=tf.reshape(X,[-1,28,28,1])
X=tf.pad(X,[[0,0],[2,2],[2,2],[0,0]])

c1=tf.nn.conv2d(X,para['W1'],strides=[1,1,1,1],padding='VALID')+para['b1']
p2=tf.nn.max_pool(c1,ksize=[1,2,2,1],strides=[1,2,2,1],padding='VALID')
c3=tf.nn.conv2d(p2,para['W2'],strides=[1,1,1,1],padding='VALID')+para['b2']
p4=tf.nn.max_pool(c3,ksize=[1,2,2,1],strides=[1,2,2,1],padding='VALID')
c5=tf.nn.conv2d(p4,para['W3'],strides=[1,1,1,1],padding='VALID')+para['b3']
c5=tf.contrib.layers.flatten(c5)
f6=tf.nn.tanh(tf.add(tf.matmul(c5,para['W4']),para['b4']))
f7=tf.nn.tanh(tf.add(tf.matmul(f6,para['W5']),para['b5']))
f7=tf.nn.dropout(f7,dropout)
returnf7


创建模型优化计算函数:

640?wx_fmt=png


最后传入 mnist 数据和相关超参数:

640?wx_fmt=png

本文来自《自兴人工智能》项目部:凯文


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 人工智能
    +关注

    关注

    1813

    文章

    49734

    浏览量

    261515
  • 机器学习
    +关注

    关注

    66

    文章

    8541

    浏览量

    136233
  • 深度学习
    +关注

    关注

    73

    文章

    5590

    浏览量

    123905
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CNN卷积神经网络设计原理及在MCU200T上仿真测试

    CNN算法简介 我们硬件加速器的模型为Lenet-5的变型,网络粗略分共有7层,细分共有13层。包括卷积,最大池化层,激活层,扁平层,全连接层。下面是各层作用介绍: 卷积层:提取特征。“不全
    发表于 10-29 07:49

    构建CNN网络模型并优化的一般化建议

    整个模型非常巨大。所以要想实现轻量级的CNN神经网络模型,首先应该避免尝试单层神经网络。 2)减少卷积核的大小:CNN神经网络是通过权值共享的方式,利用卷积运算从图像中提取线性纹理。在提取过程中感受域
    发表于 10-28 08:02

    【高云GW5AT-LV60 开发套件试用体验】基于开发板进行深度学习实践,并尽量实现皮肤病理图片的识别,第四阶段

    接第三阶段,上次说道要将cnn这个模块接入到高云自带的视频实例里面,于是就开始学习和了解这个实例里面的每个模块的功能,后来发现,除了要看一下高云自己的ip文档外,还要看很多视频处理相关的协议文档
    发表于 07-12 07:58

    哪些芯片支持蓝牙经典 A2DP 配置文件和 LE 音频?

    哪些芯片支持蓝牙经典 A2DP 配置文件和 LE 音频?
    发表于 07-01 06:41

    LE-Audio是什么?

    音频编解码、音频数据传输和音频控制方面进行了优化。与传统蓝牙音频相比,LE-Audio通过采用更高效的编码算法和改进的数据压缩技术,实现了更出色的音质和更长的电池寿命。LE-Audio的特点和优势1
    发表于 06-28 21:32

    【高云GW5AT-LV60 开发套件试用体验】基于开发板进行深度学习实践,并尽量实现皮肤病理图片的识别,第二阶段

    豪兄重新学习了一下有关的AI论文精读系列,里面有很多model都是比较成熟的,而且子豪兄也给出了相关的代码: https://github.com/TommyZihao
    发表于 06-23 18:37

    【高云GW5AT-LV60 开发套件试用体验】基于开发板进行深度学习实践,并尽量实现皮肤病理图片的识别

    可以多看看。*附件:fpga_cnn.rar 相关文件都在里面了 探索了一阵子cnn,并且也跟着网上的一些开源的方案学习一些 比如这里的:# 一起学习用Verilog在FPGA上
    发表于 06-11 22:35

    深度学习赋能:正面吊车载箱号识别系统的核心技术

    支撑。 深度学习驱动的智能识别 传统OCR技术易受光线、污损或箱体图案干扰,而新一代识别系统通过深度卷积神经网络(CNN)和注意力机制,实现
    的头像 发表于 05-07 10:10 428次阅读

    嵌入式AI技术深度学习:数据样本预处理过程中使用合适的特征变换对深度学习的意义

      作者:苏勇Andrew 使用神经网络实现机器学习,网络的每个层都将对输入的数据做一次抽象,多层神经网络构成深度学习的框架,可以深度理解数
    的头像 发表于 04-02 18:21 1281次阅读

    用树莓派搞深度学习TensorFlow启动!

    介绍本页面将指导您在搭载64位Bullseye操作系统的RaspberryPi4上安装TensorFlowTensorFlow是一个专为深度学习开发的大型软件库,它消耗大量资源。您可
    的头像 发表于 03-25 09:33 963次阅读
    用树莓派搞<b class='flag-5'>深度</b><b class='flag-5'>学习</b>?<b class='flag-5'>TensorFlow</b>启动!

    IPC2221简略学习笔记

    关于IPC2221的学习笔记
    发表于 03-14 18:07 7次下载

    LE Audio Combo模组智能座舱的应用

    ,凭借其先进的LE Audio技术和经典蓝牙支持,为智能座舱提供了卓越的解决方案,满足了用户在音质、连接稳定性上的高标准需求。 LE AudioCombo模组:引领智能座舱音频体验的未来 蓝牙技术的每次迭代都带来了巨大的性能提升
    的头像 发表于 03-07 14:02 779次阅读

    模电手账笔记14

    模电手账笔记14
    的头像 发表于 02-27 08:47 470次阅读
    模电手账<b class='flag-5'>笔记</b>(<b class='flag-5'>14</b>)

    军事应用中深度学习的挑战与机遇

    人工智能尤其是深度学习技术的最新进展,加速了不同应用领域的创新与发展。深度学习技术的发展深刻影响了军事发展趋势,导致战争形式和模式发生重大变化。本文将概述
    的头像 发表于 02-14 11:15 818次阅读

    BP神经网络与深度学习的关系

    BP神经网络与深度学习之间存在着密切的关系,以下是对它们之间关系的介绍: 一、BP神经网络的基本概念 BP神经网络,即反向传播神经网络(Backpropagation Neural Network
    的头像 发表于 02-12 15:15 1340次阅读