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

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


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

    关注

    1776

    文章

    43871

    浏览量

    230621
  • 机器学习
    +关注

    关注

    66

    文章

    8126

    浏览量

    130570
  • 深度学习
    +关注

    关注

    73

    文章

    5239

    浏览量

    119911
收藏 人收藏

    评论

    相关推荐

    基于Python和深度学习CNN原理详解

    卷积神经网络 (CNN) 由各种类型的层组成,这些层协同工作以从输入数据中学习分层表示。每个层在整体架构中都发挥着独特的作用。
    的头像 发表于 04-06 05:51 930次阅读
    基于Python和<b class='flag-5'>深度</b><b class='flag-5'>学习</b>的<b class='flag-5'>CNN</b>原理详解

    如何使用TensorFlow构建机器学习模型

    在这篇文章中,我将逐步讲解如何使用 TensorFlow 创建一个简单的机器学习模型。
    的头像 发表于 01-08 09:25 361次阅读
    如何使用<b class='flag-5'>TensorFlow</b>构建机器<b class='flag-5'>学习</b>模型

    什么是卷积神经网络?如何MATLAB实现CNN

    卷积神经网络(CNN 或 ConvNet)是一种直接从数据中学习深度学习网络架构。 CNN 特别适合在图像中寻找模式以识别对象、类和类别
    发表于 10-12 12:41 594次阅读
    什么是卷积神经网络?如何MATLAB<b class='flag-5'>实现</b><b class='flag-5'>CNN</b>?

    深度学习的由来 深度学习经典算法有哪些

    深度学习作为机器学习的一个分支,其学习方法可以分为监督学习和无监督学习。两种方法都具有其独特的
    发表于 10-09 10:23 364次阅读
    <b class='flag-5'>深度</b><b class='flag-5'>学习</b>的由来 <b class='flag-5'>深度</b><b class='flag-5'>学习</b>的<b class='flag-5'>经典</b>算法有哪些

    iTOP-RK3588开发板使用 tensorflow框架

    TensorFlow 是一个软件库或框架,由 Google 团队设计,以最简单的方式实现机器学习深度学习概念。它结合了优化技术的计算代数,
    发表于 10-08 10:04

    一文详解CNN

    1 CNN简介 CNN即卷积神经网络(Convolutional Neural Networks),是一类包含卷积计算的神经网络,是深度学习(deep learning)的代表算法之
    发表于 08-18 06:56

    深度学习框架对照表

    深度学习框架,并对它们进行对比。 1. TensorFlow TensorFlow是由Google Brain团队开发的一款深度
    的头像 发表于 08-17 16:11 494次阅读

    深度学习算法库框架学习

    深度学习算法库框架学习 深度学习是一种非常强大的机器学习方法,它可以用于许多不同的应用程序,例如
    的头像 发表于 08-17 16:11 440次阅读

    深度学习算法的选择建议

    常重要的。本文将提供一些选择建议,以及如何决定使用哪种框架和算法。 首先,选择框架。目前,深度学习领域最流行和使用最广泛的框架有TensorFlow、PyTorch、Keras和Caffe。以下是每个框架的优缺点:
    的头像 发表于 08-17 16:11 388次阅读

    深度学习框架tensorflow介绍

    深度学习框架tensorflow介绍 深度学习框架TensorFlow简介
    的头像 发表于 08-17 16:11 1457次阅读

    基于FPGA的深度学习CNN加速器设计方案

    因为CNN的特有计算模式,通用处理器对于CNN实现效率并不高,不能满足性能要求。 因此,近来已经提出了基于FPGA,GPU甚至ASIC设计的各种加速器来提高CNN设计的性能。
    发表于 06-14 16:03 1614次阅读
    基于FPGA的<b class='flag-5'>深度</b><b class='flag-5'>学习</b><b class='flag-5'>CNN</b>加速器设计方案

    PyTorch教程-14.8。基于区域的 CNN (R-CNN)

    Studio 实验室在 SageMaker Studio Lab 中打开笔记本 除了第 14.7 节中描述的单次多框检测之外,基于区域的 CNN 或具有 CNN 特征的区域 (R-CNN
    的头像 发表于 06-05 15:44 387次阅读
    PyTorch教程-14.8。基于区域的 <b class='flag-5'>CNN</b> (R-<b class='flag-5'>CNN</b>)

    PyTorch教程-12.1. 优化和深度学习

    12.1. 优化和深度学习¶ Colab [火炬]在 Colab 中打开笔记本 Colab [mxnet] Open the notebook in Colab Colab [jax
    的头像 发表于 06-05 15:44 356次阅读
    PyTorch教程-12.1. 优化和<b class='flag-5'>深度</b><b class='flag-5'>学习</b>

    深度学习中的图像分割

    深度学习可以学习视觉输入的模式,以预测组成图像的对象类。用于图像处理的主要深度学习架构是卷积神经网络(C
    的头像 发表于 05-05 11:35 844次阅读

    2023年使用树莓派和替代品进行深度学习

    此页面可帮助您在Raspberry Pi或Google Coral或Jetson Nano等替代品上构建深度学习模式。有关深度学习及其限制的
    的头像 发表于 05-05 09:47 2130次阅读
    2023年使用树莓派和替代品进行<b class='flag-5'>深度</b><b class='flag-5'>学习</b>