卷积神经网络-经典分类网络结构(LetNet-5,AlexNet)

news2024/11/25 7:00:26

目录

一:LeNet-5解析

1.网络结构

输入层:

1.conv1:

2.pool1层:

3.conv2:

4.pool2:

5.fc3,fc4:

6.output层: 

2.参数形状

 二:AlexNet

1层:

2层:

3层:

4 层

5 层

6 全连接层

7 全连接层

8 全连接层

三:卷积网络结构的优化:

1.常见结构特点:

2.引入Inception模块

 1.Inception结构:

1.MLP卷积(1x1卷积)

2.1x1卷积介绍

 3.通道数变化:

4.Inception层

5.Inception改进

三:卷积神经网络学习特征可视化

四:案例

1.获取模型数据

2.图片的输入以及格式转换

3.进行本地图片加载

4.使用模型对数据进行处理和预测

输出结果:

 都看到这里了,点个赞把!!!!


一:LeNet-5解析

论文地址:http://yann.lecun.com/exdb/publis/pdf/lecun-98.pdf

1.网络结构

不知道卷积层的先去看我上两篇文章

 图中:输入32*32*3数据,经过两个卷积网络得到一个400的数据,在经过一个两层神经网络输出十个类别

整个LeNet-5网络总共包括7层(不含输入层):conv1(卷积层)-pool1(池化层)-conv2-pool2-fc3(第一层神经网络)-fc4(第二层神经网络)-output(输出)

输入层:

输入一个32*32像素的图像,通道数为3

1.conv1:

卷积层,使用6个5*5大小的卷积核,padding=0,stride=1,得到6个28*28大小的特征图:32-5+1=28

2.pool1层:

池化层,使用6个2*2大小的卷积核进行池化,padding=0,stride=2,得到6个14*14带下的特征图:28/2=14

3.conv2:

同conv1一样的卷积层,但是这个使用的是16个5*5的卷积核

4.pool2:

同pool1一样的池化层,但是这个是使用16个2*2大小的卷积核

5.fc3,fc4:

全连接层:每个神经元都与前面卷积好的特征图相连接,计算输入向量和权重向量之间的点积,再加上偏置,然后再通过sortmax函数输出

6.output层: 

最后的 Output 层也是全连接层,采用了softmax函数计算输入向量和参数向量之间的距离

激活层默认不画网络图中,整个网络图使用的是sigmoid和Tanh函数

将卷积,激活,池化视作一层

2.参数形状

 二:AlexNet

AlexNet结构相对简单,使用了8层卷积神经网络,前五层是卷积层,剩下的3层是全连接层。

1层:

卷积层,基本结构为:卷积---ReLU---池化

1.卷积:输入277*277*3,96个11*11*3的卷积核,不扩充边缘padding=0,步长=4,所以FeatrueMap大小为(227-11+0*2+4)/4=55,即55*55*96

2.激活函数使用ReLU

3.池化:池化和大小为3*3,padding=0,步长为2。所以FeatureMap输出大小为:(55-3+0*2)/2=27,即第一层的输出为27*27*96(如果使用的是两个GPU,那么会将分成两组,每组27*27*48)

2层:

C2的基本结构为:卷积–>ReLU–>池化

1.卷积:输入27×27×96,256个5×5×96的卷积核,扩充边缘padding = 2, 步长stride = 1,因此其FeatureMap大小为(27-5+2×2+1)/1 = 27,即27×27×256;
2.激活函数:ReLU;
3.池化:池化核大小3 × 3,不扩充边缘padding = 0,步长stride = 2,因此其FeatureMap输出大小为(27-3+0+2)/2=13, 即C2输出为13×13×256(此处未将输出分到两个GPU中,若按照论文将分成两组,每组为13×13×128)

3层:

3的基本结构为:卷积–>ReLU。注意一点:此层没有进行MaxPooling操作。

卷积:输入13×13×256,384个3×3×256的卷积核, 扩充边缘padding = 1,步长stride = 1,因此其FeatureMap大小为(13-3+1×2+1)/1 = 13,即13×13×384;
激活函数:ReLU,即C3输出为13×13×384(此处未将输出分到两个GPU中,若按照论文将分成两组,每组为13×13×192);

4 层

    4的基本结构为:卷积–>ReLU。注意一点:此层也没有进行MaxPooling操作。

卷积:输入13×13×384,384个3×3×384的卷积核, 扩充边缘padding = 1,步长stride = 1,因此其FeatureMap大小为(13-3+1×2+1)/1 = 13,即13×13×384;
激活函数:ReLU,即C4输出为13×13×384(此处未将输出分到两个GPU中,若按照论文将分成两组,每组为13×13×192);


5 层

    5的基本结构为:卷积–>ReLU–>池化

卷积:输入13×13×384,256个3×3×384的卷积核,扩充边缘padding = 1,步长stride = 1,因此其FeatureMap大小为(13-3+1×2+1)/1 = 13,即13×13×256;
激活函数:ReLU;
池化:池化核大小3 × 3, 扩充边缘padding = 0,步长stride = 2,因此其FeatureMap输出大小为(13-3+0×2+2)/2=6, 即C5输出为6×6×256(此处未将输出分到两个GPU中,若按照论文将分成两组,每组为6×6×128);


6 全连接层

    6的基本结构为:全连接–>>ReLU–>Dropout

全连接:此层的全连接实际上是通过卷积进行的,输入6×6×256,4096个6×6×256的卷积核,扩充边缘padding = 0, 步长stride = 1, 因此其FeatureMap大小为(6-6+0×2+1)/1 = 1,即1×1×4096;
激活函数:ReLU;
Dropout:全连接层中去掉了一些神经节点,达到防止过拟合,FC6输出为1×1×4096;


7 全连接层

    7的基本结构为:全连接–>>ReLU–>Dropout

全连接:此层的全连接,输入1×1×4096;
激活函数:ReLU;
Dropout:全连接层中去掉了一些神经节点,达到防止过拟合,FC7输出为1×1×4096;


8 全连接层

    8的基本结构为:全连接–>>softmax

全连接:此层的全连接,输入1×1×4096;
softmax:softmax为1000,FC8输出为1×1×1000

总参数量:60M=6000万,5层卷积+3层全连接

使用了非线性激活函数:ReLU

使用了批标准化

三:卷积网络结构的优化:

1.常见结构特点:

整个过程:AlexNet---NIN--(VGG--GoogLeNet)---ResNet

NIN:引入1*1卷积

NIN网络是inception的前身,提供了减少训练数量的思想,提高了运算的速度

GoogleNet:用更多的卷积,更深的层次可以得到更好的结构(没有证明浅的层次不能达到整个效果)

2.引入Inception模块

 

 1.Inception结构:

Inception模块的核心思想就是将不同的卷积层通过并联的方式结合在一起,经过不同卷积层处理的结果矩阵在深度这个维度拼接起来,形成一个更深的矩阵。Inception模块可以反复叠堆形成更大的网络,它可以对网络的深度和宽度进行高效的扩充,在提升深度学习网络准确率的同时防止过拟合现象的发生。Inception模块的优点是可以对尺寸较大的矩阵先进行降维处理的同时,在不同尺寸上对视觉信息进行聚合,方便从不同尺度对特征进行提取

首先我们要说一下在Network in Network中引入的1 x 1卷积结构的相关作用

1.MLP卷积(1x1卷积)

目的:提出了一种新的深度网络结构,称为“网络中的网络”(NIN),增强接受域内局部贴片的模型判别能力。

做法:对于传统线性卷积核:采用线性滤波器,然后采用非线性激活。
提出MLP卷积取代传统线性卷积核

作用或优点:

1、多个1x1的卷积核级联加上配合激活函数,将feature map由多通道的线性组合变为非线性组合(信息整合),提高特征抽象能力(Multilayer Perceptron,缩写MLP,就是一个多层神经网络)
2、1x1的卷积核操作还可以实现卷积核通道数的降维和升维,实现参数的减小化

2.1x1卷积介绍

从图中,看到1 x 1卷积的过程,那么这里先假设只有3个1x1Filter,那么最终结果还是56x56x3。但是每一个FIlter的三个参数的作用,看作是对三个通道进行了线性组合。
我们甚至可以把这几个FIlter可以看成就是一个简单的神经元结构,每个神经元参数数量与前面的通道数量相等。

通常在卷积之后会加入非线性激活函数,在这里之后加入激活函数,就可以理解成一个简单的MLP网络了。

 3.通道数变化:

那么对于1x1网络对通道数的变化,其实并不是最重要的特点,因为毕竟3 x 3,5 x 5都可以带来通道数的变化,

而1x1卷积的参数并不多,我们拿下面的例子来看。

保持通道数不变
提升通道数
减少通道数

4.Inception层

这个结构也叫盗梦空间

目的:

代替人工去确定到底使用1x1,3x3,5x5还是是否需要max_pooling层,有网络自动去寻找适合的结构。

特点:

是每一个卷积/池化最终结构的长,宽大小一致

特殊的池化层,需要添加padding,步长来时输出大小一致,并且选择32的通道数

最终结果28x28x256,使用更少的参数,达到AlexNet或者VGG同样类似的输出结果 

5.Inception改进

改进目的:减少计算,如5x5卷积的运算量

  • 上面的参数:5 x 5 x 32 x 192 =153600
  • 下面的参数:192 x 16 + 5 x 5 x 16 x 32 = 3072 + 12800 = 15872

所以上面的结构会需要大量的计算,我们把这种改进的结构称之为网络的"瓶颈",网络缩小后扩大。

那么这样改变会影响网络的性能和效果吗?

GoogleNet就是如此,获得了非常好的效果。所以合理的设计网络当中的Inception结构能够减少计算,实现更好的效果

三:卷积神经网络学习特征可视化

我们肯定会疑问这个深度的卷积网络到底在干什么,可以将网络学习中产生的特征图可视化一下,看看每一层都干什么

 

 

  • layer1,layer2学习到的特征基本是颜色、边缘等低层特征
  • layer3学习到的特征,一些纹理特征,如网格纹理
  • layer4学习到的特征会稍微复杂些,比如狗的头部形状
  • layer5学习到的是完整一些的,比如关键性的区分特征

四:案例

我们来使用一个VGG16的模型进行预测,这个模型源码文件中提供了相关的处理图片的接口预测结果概率的处理API

from tensorflow.python.keras.applications import VGG16
from tensorflow.python.keras.applications.vgg16 import decode_predictions
from tensorflow.python.keras.applications.vgg16 import preprocess_input

 preprocess_input:处理输入图片

decode_predictions:对预测结果进行处理

1.获取模型数据

因为数据要到网上下载,所以第一次运行会很慢

model = VGG16()
print(model.summary())

模型打印为:

2.图片的输入以及格式转换

先下载一个API

pip install PIL

from tensorflow.keras.preprocessing.image import load_img
from tensorflow.keras.preprocessing.image import img_to_array

3.进行本地图片加载

# 加载一个图片到VGG指定输入大小
image = load_img('./tiger.png', target_size=(224, 224))

# 进行数据转换到numpy数组形式,以便于VGG能够进行使用
image = img_to_array(image)

# 形状修改
image = image.reshape((1, image.shape[0], image.shape[1], image.shape[2]))

4.使用模型对数据进行处理和预测

# 输入数据进行预测,进行图片的归一化处理
image = preprocess_input(image)
y_predict = model.predict(image)

# 进行结果解码
label = decode_predictions(y_predict)
# 进行lable获取
res = label[0][0]
# 预测的结果输出
print('预测的类别为:%s 概率为:(%.2f%%)' % (res[1], res[2]*100))

输出结果:

 8192/35363 [=====>........................] - ETA: 0s
24576/35363 [===================>..........] - ETA: 0s
40960/35363 [==================================] - 0s 6us/step

预测的类别为:tiger 概率为:(80.30%)

 都看到这里了,点个赞把!!!!

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

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

相关文章

招生管理|基于Java+vue的招生管理系统(源码+数据库+文档)

招生管理|学生管理系统|高校招生管理 目录 基于Javavue的招生管理系统 一、前言 二、系统设计 三、系统功能设计 系统功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|…

什么是OAuth 2.0?OAuth 2.0的工作流程是什么?与OAuth 1.0有哪些区别?

在浏览网页时,你肯定会遇到允许你使用社交媒体账户登录的网站。此功能一般是使用流行的OAuth 2.0框架构建的。OAuth 2.0是对OAuth 1.0的彻底重写,OAuth 2.0与OAuth 1.0或1.1不向后兼容。 1. OAuth产生背景 为了更好的理解OAuth,我们假设有如…

CAN总线-STM32上CAN外设

1.STM32 CAN外设简介 2.CAN网拓扑结构 3.CAN收发器电路 4.CAN框图 5.CAN基本结构 6.发送过程 7.接收过程 8.发送和接收配置位 9.标识过滤器(重点) 这里的FBMX模式设置的列表模式:你在列表中输入你想要的报文ID,不在你列表中的ID屏…

css grid布局属性详解

Grid布局 前言一、认识Grid1.1容器和项目1.2行和列1.3单元格和网格线 二、容器属性2.1.grid-template-columns与grid-template-rows属性2.1.1 直接使用长度单位比如px2.1.2 使用百分比 %2.1.3 使用repeat函数2.1.4 按比例划分 fr 关键字2.1.5 自动填充 auto 关键字2.1.6 最大值…

c4d的重命名工具(支持模型和材质) 及 python窗口定义

不是我牛逼,是豆包牛逼! 一个简化版的窗口 import c4d from c4d import guiclass MyDialog(gui.GeDialog):def __init__(self):super().__init__()self.SetTitle("My Dialog")def CreateLayout(self):# 设置对话框布局return Truemy_dialog …

C语言补习课番外篇——采样sin(x)

需求:让stm32的DAC输出正弦波形 分析:DAC的原理这里不作过多介绍。在[0.2π]的定义域内对sin(x)的值域进行采样,采样次数为256次;采样结果需要等比例缩放到0~4095的无符号数范围内,并且输出到一个SinFile.txt文本文档…

无敌C++大王养成篇一

1.命名空间 namespace c语⾔项⽬类似下⾯程序这样的命名冲突是普遍存在的问题&#xff0c;C引⼊namespace就是为了更好的解决 这样的问题 #include<stdio.h> //#include<stdlib.h>int rand 10;int main() {printf("%d\n",rand); }//运行时编译没有…

Grafana 可视化配置

Grafana 是什么 Grafana 是一个开源的可视化和监控工具&#xff0c;广泛用于查看和分析来自各种数据源的时间序列数据。它提供了一个灵活的仪表盘&#xff08;dashboard&#xff09;界面&#xff0c;用户可以通过它将数据源中的指标进行图表化展示和监控&#xff0c;帮助分析趋…

语音转文字工具全解析

无论是学生群体记录课堂笔记&#xff0c;职场人士整理会议纪要&#xff0c;还是自媒体创作者捕捉灵感火花&#xff0c;录音转文字软件都以其独特的便利性和高效性赢得了广泛的好评。今天&#xff0c;就让我们一起探索那些深受大家喜爱的录音转文字工具吧。 1.365在线转文字 链…

C++ | Leetcode C++题解之第397题整数替换

题目&#xff1a; 题解&#xff1a; class Solution { public:int integerReplacement(int n) {int ans 0;while (n ! 1) {if (n % 2 0) {ans;n / 2;}else if (n % 4 1) {ans 2;n / 2;}else {if (n 3) {ans 2;n 1;}else {ans 2;n n / 2 1;}}}return ans;} };

Window 本地启动Nacos

前言 本文帮助大家快速windows环境本地启动naco&#xff08;以版本2.2.3为例&#xff09; 进一步深入学习nacos推荐我的另外一篇文章&#xff1a; springCloud组件专题&#xff08;一&#xff09; --- Nacos_springcloud中的nacos如何使用-CSDN博客 ** 在本地启动nacos之前&…

C:字符函数与字符串函数-学习笔记

目录 1、字符分类函数 2、字符转换函数 3、字符串函数 4、strlen 函数的使用与模拟实现 4.1 strlen函数的使用 4.2 strlen函数的模拟实现 1、字符分类函数 C语言中有一系列的函数是专门做字符分类的&#xff0c;也就是一个字符是属于什么类型的字符的。 这些函数的使用都…

Vue(10)——自定义指令

自定义指令 自定义指令&#xff1a;可以封装一些dom操作&#xff0c;扩展额外功能。 全局注册-语法&#xff1a; Vue.directive(指令名,{ "inserted"(el){ inserted指指令所绑定的元素被添加到页面时自动调用 //可以对el标签扩展额外功能 el.focus() } }) 局部…

基于python+django+vue+MySQL的酒店推荐系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】pythondjangovueMySQL的酒店推…

NLP中文本生成任务

文本生成任务 1.生成式任务2.自回归模型实现3.Encoder-Decoder结构3.1Attention机制出现3.2Attention思想3.3soft - Attention3.4hard - Attention3.5Teacher Forcing3.6详解Mask Attention3.6.1通过Mask控制训练方式 4.生成式任务评价指标5.生成式任务常见问题5.1采样策略5.2指…

深入解析Java内存模型:从堆到栈的全面剖析

在Java程序运行的背后&#xff0c;JVM&#xff08;Java Virtual Machine&#xff0c;Java虚拟机&#xff09;负责管理和分配内存。理解Java的内存模型&#xff08;Java Memory Model, JMM&#xff09;是编写高效、稳定程序的关键&#xff0c;尤其在并发编程中&#xff0c;内存管…

rose 聊开源—2 如何快速上手一个开源项目

在前面的一篇开源项目系列中&#xff0c;主要介绍了目前开源项目蓬勃发展的态势&#xff0c;并且拥有一个开源项目&#xff0c;对我们个人履历、职业发展等都有非常多的好处。 这一次就来跟大家分享一下&#xff0c;面对一个开源项目&#xff0c;我们应该如何上手&#xff0c;快…

【Android笔记】Android Studio打包 提示Invalid keystore format

前言 Android项目通过Android Studio生产签名文件进行打包。提示 com.android.ide.common.signing.KeytoolException: Failed to read key hocsdn from store "/Users/ho/TestProject/app/ho_developer.jks": Invalid keystore format 不合法的签名文件格式&#…

在职研生活学习--20240907

开学第一天 9月7日&#xff0c;中南大学商学院迎来了一支充满活力的队伍——2024级MBA新生集体整装待发&#xff0c;我们满怀期待地登上了前往长沙望城柏乐园的大巴&#xff0c;准备开启一场为期两天一夜的素质拓展与团队建设之旅。 迎新幼儿园PPT 出发 抵达柏乐园&#xff0c;…

Android生成Java AIDL

AIDL:Android Interface Definition Language AIDL是为了实现进程间通信而设计的Android接口语言 Android进程间通信有多种方式&#xff0c;Binder机制是其中最常见的一种 AIDL的本质就是基于对Binder的运用从而实现进程间通信 这篇博文从实战出发&#xff0c;用一个尽可能…