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

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

3天内不再提示

CNN经典网络结构之Le-Net5

lviY_AI_shequ 来源:未知 作者:李倩 2018-11-23 16:40 次阅读

在前几次笔记中,笔者基本上将卷积神经网络的基本原理给讲完了。从本次笔记开始,笔者在深度学习笔记中会不定期的对 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

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 的简单实现代码。 导入相关库和创建输入输出的占位符变量:

import tensorflow as tfimport numpy as npfrom tensorflow.examples.tutorials.mnist import input_datadef create_placeholder(): X = tf.placeholder(tf.float32, shape=(None, 28 * 28)) Y = tf.placeholder(tf.float32, shape=(None, 10)) keep_prob = tf.placeholder(tf.float32) return X, Y, keep_prob

初始化各层参数:

def initialize_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} return para

创建 LeNet-5 的前向计算:

def forward_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) return f7

创建模型优化计算函数:

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

注:本深度学习笔记系作者学习 Andrew NG 的 deeplearningai 五门课程所记笔记,其中代码为每门课的课后assignments作业整理而成。

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

    关注

    42

    文章

    4733

    浏览量

    100410
  • 深度学习
    +关注

    关注

    73

    文章

    5462

    浏览量

    120875
  • cnn
    cnn
    +关注

    关注

    3

    文章

    350

    浏览量

    22126

原文标题:深度学习笔记14:CNN经典论文研读之Le-Net5及其Tensorflow实现

文章出处:【微信号:AI_shequ,微信公众号:人工智能爱好者社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    深度学习与图神经网络学习分享:CNN经典网络-ResNet

    深度学习与图神经网络学习分享:CNN 经典网络-ResNet resnet 又叫深度残差网络
    的头像 发表于 10-12 09:54 980次阅读
    深度学习与图神经<b class='flag-5'>网络</b>学习分享:<b class='flag-5'>CNN</b><b class='flag-5'>经典</b><b class='flag-5'>网络</b><b class='flag-5'>之</b>-ResNet

    直流电源EMI滤波器的设计原则、网络结构、参数选择

    的设计原则、网络结构、参数选择<br/>1设计原则——满足最大阻抗失配插入损耗要尽可能增大,即尽可能增大信号的反射。设电源的输出阻抗和与端接的滤波器的输人阻抗分别为ZO
    发表于 10-10 13:07

    TFCNN:Tensorflow构建卷积神经网络CNN的嘻嘻哈哈事详细攻略

    TFCNN:Tensorflow构建卷积神经网络CNN的嘻嘻哈哈事详细攻略
    发表于 12-19 17:03

    linux不同网络结构的不同IP设法

    Linux的装系统设IP,这应该是系统管理员的基本功,可是不同的网络结构有不同的IP设法,您知道吗?
    发表于 07-05 06:52

    神经网络结构搜索有什么优势?

    ,稍有不同就无法复现论文的结果。而网络结构作为一种特殊的超参数,在深度学习整个环节中扮演着举足轻重的角色。在图像分类任务上大放异彩的ResNet、在机器翻译任务上称霸的Transformer等网络结构
    发表于 09-11 11:52

    手绘网络结构

    手绘一些网络结构图,很初级
    发表于 10-25 14:06

    网络结构与IP分组交换技术

    《计算机体系结构网络篇1、2》 网络结构、IP分组交换技术、IP/MAC映射、NAT转换等...
    发表于 12-23 06:05

    TD-SCDMA网络结构

    TD-SCDMA 系统的网络结构完全遵循3GPP 指定的UMTS 网络结构,可以分为接入网(UTRAN)和核心网(CN)。本章首先介绍UMTS 的物理网络结构模型,根据TD-SCDMA 系统的接入网和核心网组成阐述
    发表于 06-19 14:10 217次下载

    DeviceNet 网络结构

    DeviceNet 网络结构 基于现场总线的开放的自动化系统底层结构近年来发展起来的现场总线技术以其灵活的控制方式信息共享和低成本等特点被广泛的用于复的
    发表于 03-22 15:46 30次下载

    环形网络,环形网络结构是什么?

    环形网络,环形网络结构是什么? 这种结构网络形式主要应用于令牌网中,在这种网络结构中各设备是直接通过电缆来串接的,最后形成一个闭环,
    发表于 03-22 11:14 6142次阅读

    NLP中CNN模型常见的Pooling操作方法及其典型网络结构

    CNN是目前自然语言处理中和RNN并驾齐驱的两种最常见的深度学习模型。图1展示了在NLP任务中使用CNN模型的典型网络结构。一般而言,输入的字或者词用Word Embedding的方式表达,这样
    发表于 11-15 17:59 1.5w次阅读
    NLP中<b class='flag-5'>CNN</b>模型常见的Pooling操作方法及其典型<b class='flag-5'>网络结构</b>

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

    卷积神经网络和深度学习发展历史上具有奠基性的经典论文之一的关于 LeNet-5 网络一文。LeNet-5 是由具有卷积神经
    的头像 发表于 01-14 09:26 1747次阅读

    卷积神经网络结构

    卷积神经网络结构 卷积神经网络(Convolutional Neural Network, CNN)是一种前馈神经网络,常用于图像处理、自然语言处理等领域中。它是一种深度学习(Deep
    的头像 发表于 08-17 16:30 1177次阅读

    cnn卷积神经网络简介 cnn卷积神经网络代码

    以解决图像识别问题为主要目标,但它的应用已经渗透到了各种领域,从自然语言处理、语音识别、到物体标记以及医疗影像分析等。在此,本文将对CNN的原理、结构以及基础代码进行讲解。 1. CNN的原理
    的头像 发表于 08-21 17:16 2604次阅读

    如何优化PLC的网络结构

    优化PLC的网络结构可以提高通信的效率和稳定性。以下是一些优化PLC网络结构的方法: (1)设计合理的拓扑结构:根据应用需求和设备分布情况,设计合理的网络拓扑
    的头像 发表于 12-23 08:15 650次阅读
    如何优化PLC的<b class='flag-5'>网络结构</b>?