深度学习卷积神经网络参数计算难点重点

 

目录

一、卷积层图像输出尺寸

 二、池化层图像输出尺寸

三、全连接层输出尺寸

四、卷积层参数数量

五、全连接层参数数量

 六、代码实现与验证


 以LeNet5经典模型为例子并且通道数为1

LeNet5网络有7层

​ 1.第1层:卷积层

​ 输入:原始的图片像素矩阵(长度、宽度、通道数),大小为32×32×1;

​ 参数:滤波器尺寸为5×5,深度为6,不使用全0填充,步长为1;

​ 输出:特征图,大小为28×28×6。

​ 分析:因为没有使用全0填充,所以输出尺寸 = 32 - 5 + 1 = 28,深度与滤波器深度一致,为6。

​ 2.第2层:池化层

​ 输入:特征图,大小为28×28×6;

​ 参数:滤波器尺寸为2×2,步长为2;

​ 输出:特征图,大小为14×14×6。

​ 3.第3层:卷积层

​ 输入:特征图,大小为14×14×6;

​ 参数:滤波器尺寸为5×5,深度为16,不使用全0填充,步长为1;

​ 输出:特征图,大小为10×10×16。

​ 分析:因为没有使用全0填充,所以输出尺寸 = 14 - 5 + 1 = 10,深度与滤波器深度一致,为16。

​ 4.第4层:池化层

​ 输入:特征图,大小为10×10×16;

​ 参数:滤波器尺寸为2×2,步长为2;

​ 输出:特征图,大小为5×5×16。

​ 5.第5层:全连接层

​ 输入节点个数:5×5×16 = 400;

​ 参数个数:5×5×16×120+120 = 48120;

​ 输出节点个数:120。

​ 6.第6层:全连接层

​ 输入节点个数:120;

​ 参数个数:120×84+84 = 10164;

​ 输出节点个数:84。

​ 7.第7层:全连接层

​ 输入节点个数:84;

​ 参数个数:84×10+10 = 850;

​ 输出节点个数:10。

​ 由于使用的是MNIST数据集,图片大小是28×28×1的,1代表通道数,也就是灰度图像,所以后面代码实现是用28×28的并进行讲解。

​ 上面没看懂没关系,公式来了。

一、卷积层图像输出尺寸

​ 定义如下:

​ O = 输出图像的尺寸。

​ I = 输入图像的尺寸。

​ K = 卷积层的核尺寸

​ N = 核数量

​ S = 移动步长

​ P = 填充数

​ 公式:

 

 

(数字0和字母O很像,请忽略掉这个小小问题)

​ 示例:MNIST手写数字图片大小是28×28×1的,LeNet5第一层卷积核个数为5,故输出图像尺寸为:

 故输出的图像大小为:24×24×6. (一个卷积核对应一个通道

 二、池化层图像输出尺寸

​ 定义如下:

​ O=输出图像的尺寸。

​ I=输入图像的尺寸。

​ S=移动步长

​ PS=池化层尺寸

​ 公式:

​ 示例:第一层的输出为24×24×6,故输出图像尺寸为:

​ 

​ 故输出的图像大小为:12×12×6. (池化层不改变通道个数

三、全连接层输出尺寸

​ 全连接层输出向量长度等于神经元的数量。

四、卷积层参数数量

​ 在CNN中,每层有两种类型的参数:权重weights 和偏置项biases.总参数数量为所有weights和biases的总和.

​ 定义如下:

​ WC = 卷积层的weights数量

​ BC = 卷积层的biases数量

​ PC = 所有参数的数量

​ K = 核尺寸

​ N = 核数量

​ C = 输入图像通道数

​ 卷积层中,核的深度等于输入图像的通道数.于是每个核有K*K个参数.并且有N个核.由此得出以下的公式:

​ 示例:LeNet5第一层卷积层,卷积核大小为5*5,并且有6个,输入图像大小为28×28×1,即K = 5, C = 1, N = 6,故有:

​ 所以第一层的总参数量为:156。

​ 池化层不计算参数。

五、全连接层参数数量

​ 在CNN中有两种类型的全连接层。第1种是连接到最后1个卷积层,另外1种的FC层是连接到其他的FC层。两种情况分开讨论。

​ ①连接到最后一个卷积层:

​ 定义如下:

​ Wcf= weights的数量

​ Bcf= biases的数量

​ O= 前卷积层的输出图像的尺寸

​ N = 前卷积层的核数量

​ F = 全连接层的神经元数量

​ 公式:

 

 

示例:以MNIST的28×28×1的输入图片为例,在LeNet5的第一个全连接层中,前面一层的输出图像大小为:4×4×16,该全连接层有120个神经元,即 O = 4, N = 16 , F = 120,故有:

 

所以该层总共有30840个参数。

​ ②连接到上一个全连接层

​ 定义如下:

​ Wff= weights的数量

​ Bff= biases的数量

​ Pff= 总参数的数量

​ F= 当前FC层的神经元数量

​ F-1 = 前FC层的神经元数量

​ 公式:

示例:LeNet5中全连接层的第2层,前一个全连接层的神经元个数为F-1 = 120, 当前层的神经元个数为F = 84,则有:
 

 六、代码实现与验证

​ 基于TensorFlow的代码实现如下:

# LeNet5网络模型
model = tf.keras.Sequential([
    # 第1层-卷积层 滤波器尺寸5*5,6个
    keras.layers.Conv2D(6,5),
    # 第2层-池化层,滤波器尺寸为2×2,步长为2
    keras.layers.MaxPooling2D(pool_size=2,strides=2),
    keras.layers.ReLU(),
    # 第3层-卷积层 滤波器尺寸5*5,16个
    keras.layers.Conv2D(16,5),
    # 第4层-池化层,滤波器尺寸为2×2,步长为2
    keras.layers.MaxPooling2D(pool_size=2,strides=2),
    keras.layers.ReLU(),
    keras.layers.Flatten(), # 拉平之后方便做全连接
    # 第5层-全连接层
    keras.layers.Dense(120,activation='relu'),
    # 第6层-全连接层
    keras.layers.Dense(84,activation='relu'),
    # 第7层-全连接层
    keras.layers.Dense(10,activation='softmax') # 最后输出10类,0-9的数字
])

 运行代码输出:

 文献参考:

  1. https://www.cnblogs.com/touch-skyer/p/9150039.html

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

openGauss学习笔记-131 openGauss 数据库运维-启停openGauss

文章目录 openGauss学习笔记-131 openGauss 数据库运维-启停openGauss131.1 启动openGauss131.2 停止openGauss131.3 示例131.3.1 启动openGauss131.3.2 停止openGauss 131.4 错误排查 openGauss学习笔记-131 openGauss 数据库运维-启停openGauss 131.1 启动openGauss 以操作系…

MySQL与Redis如何保证数据的一致性

文章目录 MySQL与Redis如何保证数据的一致性?不好的方案1. 先写 MySQL,再写 Redis2. 先写 Redis,再写 MySQL3. 先删除 Redis,再写 MySQL 好的方案4. 先删除 Redis,再写 MySQL,再删除 Redis5. 先写 MySQL&am…

【间歇振荡器2片555时基仿真】2022-9-24

缘由multisim出现这个应该怎么解决吖,急需解决-嵌入式-CSDN问答 输出一定要有电阻分压才能前后连接控制否则一定报错。

【Java 进阶篇】Jedis 操作 String:Redis中的基础数据类型

在Redis中,String是最基础的数据类型之一,而Jedis作为Java开发者与Redis交互的利器,提供了丰富的API来操作String。本文将深入介绍Jedis如何操作Redis中的String类型数据,通过生动的代码示例和详细的解释,让你轻松掌握…

@Scheduled注解 定时任务讲解

用于在Java Spring框架中定时执行特定任务的注解 Scheduled,它能够指定方法在特定时间间隔或特定时间点执行。默认参数是cron,cron参数被用来定义一个Cron表达式,它代表了任务执行的时间规则 参数如下 Cron 这是是一种时间表达式&#xff…

系统优化软件Bitsum Process Lasso Pro v12.4,供大家学习研究参考

1、自动或手动调整进程优先级;将不需要抑制的进程添加到排除列表; 2、设置动态提升前台运行的进程/线程的优先级 3、设置进程黑名单,禁止无用进程(机制为启动即结束,而非拦截其启动)。 4、优化I/O优先级以及电源模式自动化。 5、ProBalance功能。翻译成中文是“进程平衡…

JVM深入理解

JVM深入理解(一) JVM是什么 JRE、JDK和JVM 的关系 JVM原理 1、JVM是什么? JVM是Java Virtual Machine(Java虚拟机)的缩写,由一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域等组…

C语言——从终端(键盘)读入 20 个数据到数组中,统计其中正数的个数,并计算这些正数之和

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i0;int sum0;int count0;int arr[20];printf("输入20个数据&#xff1a;\n");for(i1;i<20;i){scanf("%d",&arr[i]);if(arr[i]>0){count;sumarr[i];}}printf("正…

[工业自动化-25]:IDEC和泉RU2S-24D/RU4S-24D继电器的使用说明和接线方式

目录 一、外观 1.1 继电器整体&#xff1a; 1.2 继电器主体&#xff1a; 1.3 底座&#xff1a; 二、RU系列通用继电器介绍 2.1 总体 2.2 性能规格 2.3 锁存杆 2.4 信号定义与连线 - 2S系列 &#xff08;1&#xff09;24V输入 &#xff08;2&#xff09;第一路输出 …

系列六、Spring整合单元测试

一、概述 Spring中获取bean最常见的方式是通过ClassPathXmlApplicationContext 或者 AnnotationConfigApplicationContext的getBean()方式获取bean&#xff0c;那么在Spring中如何像在SpringBoot中直接一个类上添加个SpringBootTest注解&#xff0c;即可在类中注入自己想要测试…

c语言数字转圈

数字转圈 题干输入整数 N&#xff08;1≤N≤9&#xff09;&#xff0c;输出如下 N 阶方阵。 若输入5显示如下方阵&#xff1a; * 1** 2** 3** 4** 5* *16**17**18**19** 6* *15**24**25**20** 7* *14**23**22**21** 8* *13**12**11**10** 9*输入样例3输出样例* 1*…

【电子通识】为什么说做产品不是简单的将不同的技术进行搭积木?

很多人说做产品的硬件工程师&#xff0c;其实就是将专项技术工程师已经调好的模块进行拼接。类似于小孩将积木搭成一个房子的形状&#xff0c;虽然不同人搭的房子风格迥异&#xff0c;但所使用的原材料却都是一样的。 首先我并不同意这种看法&#xff0c;原因是产品工程师是需要…

vs2015如何远程启动程序来进行调试

vs远程调试的方式有两种&#xff0c;远程启动方式和附加进程方式。   一般来说&#xff0c;咱们使用vs调试代码时&#xff0c;直接附加进程即可&#xff0c;但某些时候附加进程方式无法命中断点。比如我们想调试的C代码&#xff0c;但是调试的入口程序是C#程序&#xff0c;如…

Verilog基础:时序调度中的竞争(一)

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 作为一个硬件描述语言&#xff0c;Verilog HDL常常需要使用语句描述并行执行的电路&#xff0c;但其实在仿真器的底层&#xff0c;这些并行执行的语句是有先后顺序…

文件批量重命名技巧:图片文件名太长怎么办?告别手动改名方法

在日常生活中&#xff0c;常常会遇到文件名过长导致的问题。尤其是在处理大量图片文件时&#xff0c;过长的文件名可能会使得文件管理变得混乱不堪。现在来看下云炫文件管理器如何批量重命名&#xff0c;让图片文件名变得更简洁&#xff0c;提高工作效率。 操作1、在云炫文件…

python之TCP的网络应用程序开发

文章目录 版权声明python3编码转换socket类的使用创建Socket对象Socket对象常用方法和参数使用示例服务器端代码客户端代码 TCP客户端程序开发流程TCP服务端程序开发流程TCP网络应用程序注意点socket之send和recv原理剖析send原理剖析recv原理剖析send和recv原理剖析图 多任务版…

【教3妹学编程-算法题】统计和小于目标的下标对数目

2哥 : 3妹&#xff0c;OpenAI的宫斗剧迎来了大结局&#xff01;OpenAI宣布阿尔特曼复职CEO&#xff0c;董事会重组 3妹&#xff1a;啊&#xff1f;到底谁才是幕后操纵者啊&#xff0c;有咩有揪出来 2哥 : 也不是很清楚&#xff0c;据说在被开除的几周前&#xff0c;前CEO曾谴责…

【电子通识】什么是物料清单BOM(Bill of Material))

BOM (Bill of Materials)是我们常说的物料清单。BOM是制造业管理的重点之一&#xff0c;用于记载产品组成所需要的全部物料&#xff08;Items&#xff09;。物料需求的计算是从最终产品开始&#xff0c;层层往下推算出部件&#xff0c;组件&#xff0c;零件和原材料的需求量。这…

浏览器缓存控制讲解

缓存的作用 在你访问互联网中的任何资源其所产生的任何链路中的每一个节点几乎都会进行缓存&#xff0c;整个缓存体系和细节十分复杂。比如浏览器缓存&#xff0c;服务器缓存&#xff0c;代理服务器缓存&#xff0c;CDN缓存等。 但是缓存又十分重要&#xff0c;不可缺少&…

弹窗msvcp140_1.dll丢失的解决方法,超简单的方法分享

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中最常见的就是缺少某个文件的错误。最近&#xff0c;我在使用某些软件时&#xff0c;遇到了一个名为“msvcp140_1.dll”的错误提示。这个错误通常出现在运行某些程序时&#xff0c;由于缺少了msvcp140…