卷积神经网络模型之——LeNet

news2024/11/23 8:22:45

目录

  • LeNet
  • 模型参数介绍
  • 该网络特点
  • 关于C3与S2之间的连接
  • 关于最后的输出层
  • 子采样
  • 参考

LeNet

LeNet是一个用来识别手写数字的最经典的卷积神经网络,是Yann LeCun在1998年设计并提出的。Lenet的网络结构规模较小,但包含了卷积层、池化层、全连接层,他们都构成了现代CNN的基本组件。

网络模型结构图:
在这里插入图片描述
网络模型结构参数设计图:
在这里插入图片描述

模型参数介绍

LeNet-5 共5层:卷积层C1、C3、C5、全连接层 F6、输出层

输入:3232=1024的手写字体图片,相当于1024个神经元。这些手写字体包含0~9数字,也就是相当于10个类别的图片。3232的图像这要比Mnist数据库(caffe中的输入尺寸为28*28)中最大的字母还大。这样做的原因是希望潜在的明显特征,比如笔画断续、角点能够出现在最高层特征监测子感受野的中心。

C1层:卷积层使用6个特征卷积核,卷积核大小55,步长为1,无padding,这样我们可以得到6个特征图,然后每个特征图的大小为2828,也就是神经元的个数为62828=784。(32-5+1=28)

注:C1有156个可训练参数(每个滤波器55=25个unit参数和一个bias参数,一共6个滤波器,共(55+1)6=156个参数),共156(2828)=122,304个连接。

此处为什么要进行卷积?
卷积运算一个重要的特点就是:通过卷积运算,可以使原信号特征增强,并且降低噪音,同时不同的卷积层可以提取到图像中的不同特征,这层卷积我们就是用了6个卷积核。

S2层:MaxPooling下采样层,也就是使用最大池化进行下采样,池化的滤波器大小f选择(2,2),步长stride为2。这样我们可以得到输出大小为61414.

说明下为什么要进行下采样?
利用图像局部相关性的原理,对图像进行子抽样,可以减少数据处理量同时保留有用信息,从而降低了网络训练的参数和模型的过拟合程度

C3层:卷积层,卷积核大小55,步长为1,无padding,据此我们可以得到新的图片大小为1010,此处采用16个卷积核,所以最终输出161010。

S4层:MaxPooling下采样层,对C3的16张1010的图片进行最大池化,池化的滤波器大小f选择(2,2),步长stride为2。因此最后S4层为16张大小为55的图片。至此我们的神经元个数已经减少为:1655=400。

特征图中的每个单元与C3中相应特征图的22邻域相连接,跟C1和S2之间的连接一样。S4层有32(216)个可训练参数(每个特征图1个因子和一个偏置)和2000个连接。

C5层:将S4层的输出平铺为一个400的一维向量。然后用这400个神经元构建下一层,C5层有120个神经元。S4层的400个神经元与C5层的每一个神经元相连(C5层有120个神经元),这就是全连接层。C5层有48120个可训练连接((5516+1)*120)。

F6层:对C5层的120个神经元再添加一个全连接层,F6层含有84个神经元,之所以选这个数字的原因来自于输出层的设计。该层有10164个可训练参数((11120+1)*84=10164

输出:最后将F6层的84个神经元填充到一个SoftMax函数,得到输出长度为10的张量,张量中为1的位置代表所属类别。(例如[0,0,0,1,0,0,0,0,0,0]的张量,1在index=3的位置,故该张量代表的图片属于第三类)。

因此模型结构总体是由以下结构组成:输入->卷积->池化->卷积->池化->卷积->全链接->全链接(输出)

该网络特点

1)激活函数使用tanh

2)卷积核5x5,步长1,未使用padding

3)池化层使用最大池化MaxPooling

关于C3与S2之间的连接

C3中的每个特征图是连接到S2中的所有6个或者几个特征map的,表示本层的特征图是上一层提取到的特征map的不同组合。

这里是组合,就像人的视觉系统一样,底层的结构构成上层更抽象的结构,例如边缘构成形状或者目标的部分。

在Yann的论文中说明了C3中每个特征图与S2中哪些特征图相连,连接情况如下表所示:
在这里插入图片描述

由上表可以发现C3的前6个特征图以S2中3个相邻的特征图为输入。接下来6个特征图以S2中4个相邻特征图为输入,下面的3个特征图以不相邻的4个特征图为输入。最后一个特征图以S2中所有特征图为输入。

这样C3层有1516个可训练参数((253+1)6+(254+1)9+(256+1)=1516)和151600(151610*10)个连接。

那么为什么不把S2中的每个特征图连接到每个C3的特征图呢?

原因有两个:

第一,不完全的连接机制将连接的数量保持在合理的范围内。

第二,也是最重要的,其破坏了网络的对称性。由于不同的特征图有不同的输入,所以迫使他们抽取不同的特征(希望是互补的)。

关于最后的输出层

输出层由欧式径向基函数(Euclidean Radial Basis Function)单元组成,每类一个单元,每个有84个输入。

换句话说,每个输出RBF单元计算输入向量和参数向量之间的欧式距离。输入离参数向量越远,RBF输出的越大。一个RBF输出可以被理解为衡量输入模式和与RBF相关联类的一个模型的匹配程度的惩罚项。

用概率术语来说,RBF输出可以被理解为F6层配置空间的高斯分布的负log-likelihood。给定一个输入模式,损失函数应能使得F6的配置与RBF参数向量(即模式的期望分类)足够接近。这些单元的参数是人工选取并保持固定的(至少初始时候如此)。

这些参数向量的成分被设为-1或1。虽然这些参数可以以-1和1等概率的方式任选,或者构成一个纠错码,但是被设计成一个相应字符类的7*12大小(即84)的格式化图片。这种表示对识别单独的数字不是很有用,但是对识别可打印ASCII集中的字符串很有用。

使用这种分布编码而非更常用的“1 of N”编码用于产生输出的另一个原因是,当类别比较大的时候,非分布编码的效果比较差。

原因是大多数时间非分布编码的输出必须为0。这使得用sigmoid单元很难实现。另一个原因是分类器不仅用于识别字母,也用于拒绝非字母。使用分布编码的RBF更适合该目标。因为与sigmoid不同,他们在输入空间的较好限制的区域内兴奋,而非典型模式更容易落到外边。

RBF参数向量起着F6层目标向量的角色。需要指出这些向量的成分是+1或-1,这正好在F6 sigmoid的范围内,因此可以防止sigmoid函数饱和。实际上,+1和-1是sigmoid函数的最大弯曲的点处。这使得F6单元运行在最大非线性范围内。必须避免sigmoid函数的饱和,因为这将会导致损失函数较慢的收敛和病态问题。

子采样

子采样具体过程如下:

每邻域四个像素求和变为一个像素,然后通过标量Wx+1加权,再增加偏置bx+1,然后通过一个sigmoid激活函数,产生一个大概缩小四倍的特征映射图Sx+1。

在整个网络中,S-层可看作是模糊滤波器,起到二次特征提取的作用。隐层与隐层之间空间分辨率递减,而每层所含的平面数递增,这样可用于检测更多的特征信息。

参考

https://blog.csdn.net/L888666Q/article/details/124490708
http://blog.csdn.net/qiaofangjie/article/details/16826849
https://blog.csdn.net/Chenyukuai6625/article/details/77872489

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/404240.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mr. Cappuccino的第49杯咖啡——冒泡APP(升级版)之基于Docker部署Gitlab

冒泡APP(升级版)之基于Docker部署Gitlab基于Docker安装Gitlab登录Gitlab创建Git项目上传代码使用Git命令切换Git地址使用IDE更换Git地址基于Docker安装Gitlab 查看beginor/gitlab-ce镜像版本 下载指定版本的镜像 docker pull beginor/gitlab-ce:11.3.0…

c# 源生成器

本文概述了 .NET Compiler Platform(“Roslyn”)SDK 附带的源生成器。 通过源生成器,C# 开发人员可以在编译用户代码时检查用户代码。 生成器可以动态创建新的 C# 源文件,这些文件将添加到用户的编译中。 这样,代码可以…

线程(一)

线程 1. 线程 定义:线程是进程的组成部分,不同的线程执行不同的任务,不同的功能模块,同时线程使用的资源师由进程管理,主要分配CPU和内存。 ​ 在进程中,线程执行的方式是抢占式执行操作,需要考…

33--Vue-前端开发-使用Vue脚手架快速搭建项目

一、vue脚手架搭建项目 node的安装: 官方下载,一路下一步 node命令类似于python npm命令类似于pip 使用npm安装第三方模块,速度慢一些,需换成淘宝镜像 以后用cmpm代替npm的使用 npm install -g cnpm --registry=https://registry.npm.taobao.org安装脚手架: cnpm inst…

汉诺塔--课后程序(Python程序开发案例教程-黑马程序员编著-第6章-课后作业)

实例3:汉诺塔 汉诺塔是一个可以使用递归解决的经典问题,它源于印度一个古老传说:大梵天创造世界的时候做了三根金刚石柱子,其中一根柱子从下往上按照从大到小的顺序摞着64片黄金圆盘,大梵天命令婆罗门把圆盘从下面开始…

C++回顾(二十)—— vector容器 和 deque容器

20.1 vector容器 20.1.1 vector容器简介 vector是将元素置于一个动态数组中加以管理的容器。vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法)。vector尾部添加或移除元素非常快速。但是在中部或头部插入元素或移除元素比…

es6的class(类)

目录 一、class(类)的语法 二、代码 三、效果 一、class(类)的语法 ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过class关键字,可以…

Java基础(二):原码、反码、补码及进制之间的运算

Java基础系列文章 Java基础(一):语言概述 Java基础(二):原码、反码、补码及进制之间的运算 Java基础(三):数据类型与进制 目录一、不同进制的表示方式二、二进制三、进制之间的转换四、byte的取值范围一、不同进制的表示方式 所有数字在计…

Leetcode 141.环形链表 142环形链表II

141环形链表 文章目录快慢指针快慢指针 代码思路: slow 和fast 指向 head slow走一步,fast走两步 没有环: fast每次走2步 ,如果 fast 最终遇到NULL(链表中的元素是 偶数)或者fast->next(链表中的元素是 奇数)遇到NULL&#xf…

【ArcGIS Pro二次开发】(12):txt文件和Excel文件的读写

在Arcgis Pro的工作流中,数据的输入是很常见的。这里以TXT和Excel两种文件为例,在SDK中实现数据的读取和写入。 一、txt文件的读写 txt文件的读写相对简单,可以用Arcgis Pro自带的OpenItemDialog打开txt文件,并直接读取&#xff…

浙江大学海宁IMBA提面经验分享

先来介绍一下我的个人情况:本人毕业于浙江一所普通的本科院校,毕业已经6年了,在一家互联网公司担任市场部经理。其实在参加浙大IMBA项目提面之前,我也参加了浙大MBA项目的提面,可惜只拿到了良好的结果,所以…

力扣-每天的领导和合伙人

大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目:1693. 每天的领导和合伙人二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.…

SWMM从入门到实践教程 04 快速入门案例的模拟执行

文章目录1 模拟时间的设置2 模拟执行3 报告查看3.1 完整报告3.2 总结报告4 纵断面查看5 结果播放1 模拟时间的设置 在左侧双击Options中的Dates,即可弹出时间的设置。此处为了教学,建议仅模拟6个小时,加快结果的生成。实际项目中,…

Gradle 的下载安装教程

Gradle 8.0.1 下载安装教程笔者的环境: Java 17.0.1 Gradle 8.0.1 Windows 10 教育版 64位 在继续阅读本教程之前,需要先完成 JDK 的安装。JDK 需要选择 8 及以上的版本。关于 JDK 的安装,可见笔者的另一篇博客: Java 的下载安…

卷积神经网络之AlexNet

目录概述AlexNet特点激活函数sigmoid激活函数ReLu激活函数数据增强层叠池化局部相应归一化DropoutAlexnet网络结构网络结构分析AlexNet各层参数及其数量模型框架形状结构关于数据集训练学习keras代码示例概述 由于受到计算机性能的影响,虽然LeNet在图像分类中取得了…

【轻轻松松学MongoDB】操作命令02:插入/删除

文档&#xff08;document&#xff09;的数据结构和 JSON 基本一样。所有存储在集合中的数据都是 BSON 格式。 一、文档插入 db.collection.insert( <document or array of documents>, { writeConcern: <document>, ordered: <boolean> } ) 例子&#xff…

【编程基础】009.输入两个正整数m和n,求其最大公约数和最小公倍数。

最大公约数与最小公倍数 题目描述 输入两个正整数m和n&#xff0c;求其最大公约数和最小公倍数。 输入格式 两个整数 输出格式 最大公约数&#xff0c;最小公倍数 样例输入 5 7 样例输出 1 35 题目思路 在这里我们用m表示较大的那个数&#xff0c;n表示较小的数。求…

三分钟拥有自己的 chat-gpt (开发到上线)

三分钟拥有自己的 chat-gpt (开发到上线) 首先你需要有一个 laf 账号&#xff0c;如果你还不知道 laf 是什么&#xff0c;点击这里三分钟学会然后你还需要有一个 chat-gpt 的账号并且生成一个 apiKey (这一步可以问 Google ) 云函数 具备了上面这两个条件我们就可以开始啦。…

CNCF x Alibaba云原生技术公开课 第八章 应用配置管理

Pod配置管理分类 可变配置就用 ConfigMap&#xff1b;敏感信息是用 Secret&#xff1b;身份认证是用 ServiceAccount&#xff1b;资源配置是用 Resources&#xff1b;安全管控是用 SecurityContext&#xff1b;前置校验是用 InitContainers。 1、ConfigMap 概念&#xff1a;…

Java高级技术:单元测试、反射、注解

目录 单元测试 单元测试概述 单元测试快速入门 单元测试常用注解 反射 反射概述 反射获取类对象 反射获取构造器对象 反射获取成员变量对象 反射获取方法对象 反射的作用-绕过编译阶段为集合添加数据 反射的作用-通用框架的底层原理 注解 注解概述 自定义注解 …