【Python机器学习】卷积神经网络卷积层、池化层、Flatten层、批标准化层的讲解(图文解释)

news2025/1/23 9:15:18

卷积神经网络

卷积神经网络(convolutional neural network, CNN)在提出之初被成功应用于手写字符图像识别,2012年的AlexNet网络在图像分类任务中取得成功,此后,卷积神经网络发展迅速,现在已经被广泛应用于图形、图像、语音识别等领域。

图片的像素数往往非常大,如果用多层全连接网络来处理,则参数数量将大到难以有效训练的地步。受猫脑研究的启发,卷积神经网络在多层全连接网络的基础上进行了改进,它在不减少层数的前提下有效提升了训练速度。卷积神经网络在多个研究领域都取得了成功,特别是在与图形有关的分类任务中。

卷积层和池化层是卷积神经网络的核心组成,它们和全连接层可以组合成很深层次的网络。卷积神经网络还可以按需要添加用来抑制过拟合的Dropout层、拉平多维数据的Flatten层、加快收敛和抑制梯度消散的BatchNormalization层等等。

卷积层

二维卷积层Conv2d的输入是:input_shape=(28,28,1)。这与前文讨论的所有机器学习模型的输入都不同,前文模型的输入是一维向量,该一维向量要么是经特征工程提取出来的特征,要么是被拉成一维的图像数据。而这里卷积层的输入是图片数据组成的多维数据。

MNIST图片中,只有一种颜色,通常称灰色亮度。MNIST图片的维度是(28,28,1),前面两维存储28×28个像素点的坐标位置,后面1维表示像素点的灰色亮度值,因此它是28×28的单通道数据。

从数学上来讲,卷积是一种积分变换。在深度学习中,它用来做数据的卷积运算,在图像处理领域取得了非常好的效果。

单通道数据上的卷积运算包括待处理张量I、卷积核K和输出张量S三个组成部分,它们的大小分别为4×4、3×3和2×2。

记待处理的张量为I,卷积核为K,每一次卷积运算可表述为:

式中,I∗K表示卷积运算,M和N分别表示卷积核的长度和宽度。i,j是待处理张量I的坐标位置,也是卷积核左上角对齐的位置

记待处理张量I的长度和宽度为P和Q,则输出张量S的长度P^′和Q^′宽度分别为:

 

虽然要扫描整个输入层,但一个通道只有一个卷积核,因此,对于整个输入层来说,前向传递计算时的参数是一样的,这称为参数共享(parameter sharing)。参数共享大大减少了需要学习的参数的数量。

 

 在卷积运算中,一般会设置多个卷积核。示例中设置了32个卷积核(TensorFlow中称为过滤器filters),因此该卷积层的输出为24×24×32,也就是说将28×28×1的数据变成了24×24×32的,在画神经网络结构图时,一般用下图中的长方体来表示上述卷积运算,水平方向长度示意卷积核的数量。

因为输入是单通道的,因此每卷积核只有一层,它的参数为5×5+1=26,共32个卷积核,因此训练参数为26×32=832个。

如果待处理张量规模很大,可以将卷积核由依次移动改为跳跃移动,即加大步长(strides),减少计算量,加快训练速度。

为了提取到边缘的特征,可以在待处理张量的边缘填充0再进行卷积运算,称为零填充(zero-padding)。填充也可以根据就近的值进行填充。边缘填充的另一个用途是在张量与卷积核不匹配时,通过填充使之匹配,从而卷积核能扫描到所有数据。

卷积层代码如下

### MindSpore
class mindspore.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, pad_mode='same', padding=0, dilation=1, group=1, has_bias=False, weight_init='normal', bias_init='zeros', data_format='NCHW')
 
### TensorFlow2
tf.keras.layers.Conv2D(
    filters, kernel_size, strides=(1, 1), padding='valid',
    data_format=None, dilation_rate=(1, 1), groups=1, activation=None,
    use_bias=True, kernel_initializer='glorot_uniform',
    bias_initializer='zeros', kernel_regularizer=None,
    bias_regularizer=None, activity_regularizer=None, kernel_constraint=None,
    bias_constraint=None, **kwargs
)

 池化层和Flatten层

池化(pooling)层一般跟在卷积层之后,用于压缩数据和参数的数量。

池化操作也叫下采样(sub-sampling),具体过程与卷积层基本相同,只不过卷积核只取对应位置的最大值或平均值,分别称为最大池化或平均池化。

池化层的移动方式与卷积层不同,它是不重叠地移动。

Flatten层很简单,只是将输入的多维数据拉成一维的,直观上可理解为将数据“压平”。

除卷积层、池化层和全连接层(输入之前隐含Flatten层)之外的层,不改变网络结构,因此,一般只用这三层来表示神经网络的结构。

 批标准化层

针对误差难继续传递问题,批标准化对每一层的批量输入数据x进行标准化,使之尽量避免落入饱和区,具体来讲就是使之均值为0,方差为1。对每一批输入数据B={x_1,x_2,…,x_m}:

 

其中,ϵ为防止除0的很小的常数。前三步分别为计算均值、计算方差、标准化,最后一步是对归一化后的结果进行缩放和平移,其中的γ和β是要学习的参数。

创作不易 觉得有帮助请点赞关注收藏~~~

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

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

相关文章

怎样在Odoo 16中启用完整的财务功能

Odoo是目前市场上最好的ERP软件之一。Odoo提供两种类型的版本,社区版和企业版。Odoo社区版是由开源软件支持的免费基本版。Odoo社区版本中没有一些模块和功能。但企业版付费版,升级版更适合更高的价值。Odoo企业版具有无限的功能支持和完整的功能。性能和…

「集合底层」深入浅出HashMap底层源码

「集合底层」深入浅出HashMap底层源码 一、HashMap介绍 HashMap底层采用了哈希表,而哈希表是由数组和链表实现的。数组和链表各有自己的特点: 数组:占用空间连续。 寻址容易,查询速度快。但是,增加和删除效率非常低…

倒序打印链表

在做这个题的时候我闹了一个大笑话,我用了反转链表做,哈哈哈哈, 这个题目思路很简单,用到了数组的头插法,注意题目要求返回数组 遍历链表,将链表的val放到数组中 下面来看代码 import java.util.ArrayLis…

flash基础知识

flash基础手册一、flash概念(一)特性(二)FLASH的块/扇区/页关系(三)常用FLASH型号大小(四)常用FLASH擦写规则(五)存储器类型参考二、与其他类型存储器件对照&…

PDF文件怎么加密?推荐3种方法给你

在我们的工作学习上,应该有不少人都需要使用到PDF文件格式,毕竟这个格式它兼容性较广,且不易编辑,能较好的保存文件。不过,我们有时为了不让它被其它人随意查看,会给这个文件进行加密的操作。那你们知道如何…

python实现基于TNDADATASET的人体行为识别

首先来看下TNDADATASET: 随便打开一个文件简单看下如下所示: 可以大概推测出来,这里面不同维度的数据集应该是由不同的穿戴式传感器采集得到的,最后一列的class表示的是当前的行为类型。 在我之前的博文里面已经做过了相关的工作…

计算机毕设Python+Vue养老机构管理信息系统(程序+LW+部署)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Sigrity常见问题解决方法(持续更新)

Sigrity常见问题解决方法(持续更新) 1.使用SpeedEM仿真时,报placement error 错误信息如下: 该问题是因为Mesh设置的过大,导致via和note在同一个mesh网格上存在粘连 解决方法是:将mesh进行auto设置 2…

鲍鱼年龄预测 knn svm 逻辑回归

数据: M,0.455,0.365,0.095,0.514,0.2245,0.101,0.15,15 M,0.35,0.265,0.09,0.2255,0.0995,0.0485,0.07,7 F,0.53,0.42,0.135,0.677,0.2565,0.1415,0.21,9 M,0.44,0.365,0.125,0.516,0.2155,0.114,0.155,10 I,0.33,0.255,0.08,0.205,0.0895,0.0395,0.055,7 I,0.425…

基于pytorch搭建CNN 人像口罩识别检测项目

项目介绍 我们将使用 CNN (卷积神经网络)和机器学习分类器创建一个检测一个人是否戴着口罩的分类器。它将检测一个人是否戴着口罩。 我们将从头开始学习,我将对每一步进行解释。我需要你对机器学习和数据科学有基本的了解。我已经在本地 Windows 10 机器上实现了它,如果你…

深入浅出JVM(七)之执行引擎的解释执行与编译执行

执行引擎 hotspot执行引擎结构图 执行引擎分为解释器、JIT即时编译器以及垃圾收集器 执行引擎通过解释器/即时编译器将字节码指令解释/编译为对应OS上的的机器指令 本篇文章主要围绕解释器与即时编译器,垃圾收集器将在后续文章解析 解释执行与编译执行 Java虚拟机…

方向图与天线增益

目录 一、方向图 二、增益 一、方向图 天线的方向性是指天线向一定方向辐射电磁波的能力。对于接收天线而言,方向性表示天线对不同方向传来的电磁波具有不同的接收能力。天线的方向性通常用方向图来表示。 在数学里,球坐标系是一种利用球坐标表示一个点…

Linux学习-90-Tomcat下载安装(tar压缩包)

17.20 Tomcat下载安装(tar压缩包) 访问apache官网下载tomcat压缩包。访问以下链接进行下载tomcat-8.5.83版本,高版本的tomcat存在一些问题影响使用,然后使用 Xftp 上传到/usr/local/src目录中或者使用wget命令直接到/usr/local/s…

SpringBoot:模块探究之spring-boot-cli

Spring Boot CLI 是运行 SpringBoot 命令的命令行工具,能够帮助你快速的构建 Spring Boot 项目。只需要编写简单的 groovy 脚本,即可用最少的代码构建并运行一个完整的 Spring Boot 项目。 Spring Boot CLI 为 SpringCloud 提供了 SpringBoot 命令行功能…

Java面试--CAS

这里写目录标题一、概念二、CAS 如何保证原子性2.1、总线锁定2.2、缓存锁定二、底层原理三、CAS典型应用四、CAS问题4.1、循环时间长,开销很大4.2、只能保证一个共享变量的原子操作4.3、引出来 ABA 问题一、概念 判断内存中某个位置的值是否为预期值,如…

Bootstrap5 表单浮动标签

默认情况下&#xff0c;标签内容一般显示在 input 输入框的上方&#xff1a; 使用浮动标签&#xff0c;可以在 input 输入框内插入标签&#xff0c;在单击 input 输入框时使它们浮动到上方 Bootstrap 实例 <div class"form-floating mb-3 mt-3"> <input ty…

uni.requestPayment使用

前言&#xff1a;由于uni.requestPayment没有封装H5支付方法&#xff0c;我自己封装了统一方法可以多端适用。 代码如下&#xff1a; 有两种方法&#xff1a; 方法1&#xff1a;安装 jweixin-module 包&#xff0c;我的是1.6.0版本->引入->使用 方法2&#xff1a;使用微…

51单片机实训day2——创建Keil工程(一)

以管理员身份打开软件&#xff01;&#xff01;&#xff01;以管理员身份打开软件&#xff01;&#xff01;&#xff01;以管理员身份打开软件&#xff01;&#xff01;&#xff01; 内 容&#xff1a;Keil工程创建 学 时&#xff1a;2学时 知识点&#xff1a;开发固件库介绍…

【Linux】进程替换与shell的模拟实现

目录 一、进程替换 1.1 进程替换的概念 1.2 替换函数 二、命令行解释器-Shell 2.1 shell的实现与运行 2.2 步骤讲解 一、进程替换 1.1 进程替换的概念 当我们使用 fork 函数创建子进程后&#xff0c;父子进程各自执行父进程代码的一部分。那如果创建的子进程想要执行一…

UG/NX二次开发Siemens官方NXOPEN实例解析—2.4 File2Points

列文章目录 UG/NX二次开发Siemens官方NXOPEN实例解析—2.1 AssemblyViewer UG/NX二次开发Siemens官方NXOPEN实例解析—2.2 Selection UG/NX二次开发Siemens官方NXOPEN实例解析—2.3 Selection_UIStyler UG/NX二次开发Siemens官方NXOPEN实例解析—2.4 File2Points 前言 随着…