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

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


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

    关注

    1820

    文章

    50324

    浏览量

    266923
  • 机器学习
    +关注

    关注

    67

    文章

    8564

    浏览量

    137217
  • 深度学习
    +关注

    关注

    73

    文章

    5607

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    FPGA实现CNN卷积层的高效窗口生成模块设计与验证

    卷积神经网络(CNN)可以分为卷积层、池化层、激活层、全链接层结构,本篇要实现的,就是CNN的卷积层中的window窗。
    的头像 发表于 04-15 10:35 150次阅读
    FPGA<b class='flag-5'>实现</b><b class='flag-5'>CNN</b>卷积层的高效窗口生成模块设计与验证

    深度学习驱动的超构表面设计进展及其在全息成像中的应用

    实现高质量图像的获取。基于神经网络深度学习方法进行超构表面设计的文章数量日益增多,但关于该主题的综述仍较为匮乏。据麦姆斯咨询报道,近期,中国计量大学田颖教授等人
    的头像 发表于 04-09 13:55 131次阅读
    <b class='flag-5'>深度</b><b class='flag-5'>学习</b>驱动的超构表面设计进展<b class='flag-5'>及其</b>在全息成像中的应用

    使用 iw612 Android 14 或 15 NXP 版本中是否有任何可用的 LE 音频支持?

    使用 iw612 Android 14 或 15 NXP 版本中是否有任何可用的 LE 音频支持?
    发表于 04-03 07:26

    WiMi-net五层协议栈深度拆解:有中心自组网的落地实践

    从OSI七层到WiMi-net五层,经典理论如何落地?本文深度拆解WiMi-net有中心自组网协议栈的五层架构:物理层(Sub-GHz射频)、链路层(TDMA时隙)、网络层(动态路由)
    的头像 发表于 04-02 17:40 1545次阅读
    WiMi-<b class='flag-5'>net</b>五层协议栈<b class='flag-5'>深度</b>拆解:有中心自组网的落地实践

    深度解析AD9683:14位高速高精度ADC的卓越

    深度解析AD9683:14位高速高精度ADC的卓越选 在电子设计领域,模数转换器(ADC)是连接模拟世界和数字世界的关键桥梁。今天,我们聚焦于ADI公司的AD9683,一款14位、采
    的头像 发表于 03-30 15:15 182次阅读

    蓝牙5.3 经典音频 + LE Audio,一颗模块兼顾两种生态

    用蓝牙连手机听歌、打电话,大家早已习以为常;近几年 LE Audio 冒头,多设备同步、低延迟、广播音频成了新卖点。问题来了:经典蓝牙生态一时半会退不了,LE Audio 又确实香,选谁?——其实
    的头像 发表于 03-24 16:11 883次阅读

    穿孔机顶头检测仪 机器视觉深度学习

    顶头状态。 检测顶头算法 引入人工智深度学习技术,通过Keras实现卷积神经网络(CNN),用Numpy实现采集数据的训练,得到符合现场需求
    发表于 12-22 14:33

    Amphenol Ve - NET™:汽车多千兆位差分连接器系统的卓越

    Amphenol Ve - NET™:汽车多千兆位差分连接器系统的卓越选 在汽车电子技术飞速发展的今天,高速、可靠的以太网连接对于汽车的智能化和高级驾驶辅助系统(ADAS)等功能的实现至关重要
    的头像 发表于 12-12 09:15 463次阅读

    蓝牙模块低功耗新突破:LE Audio技术详解(LC3编解码/多设备串流/广播音频)

    目录: 什么是LE Audio LE Audio和经典蓝牙相比的优势 LE Audio的局限性 LE Audio 的应用场景
    的头像 发表于 12-10 11:20 2172次阅读
    蓝牙模块低功耗新突破:<b class='flag-5'>LE</b> Audio技术详解(LC3编解码/多设备串流/广播音频)

    构建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