CNN卷积神经网络初学

1.为什么要学CNN

在传统神经网络中,我们要识别下图红色框中的图像时,我们很可能识别不出来,因为这六张图的位置都不通,计算机无法分辨出他们其实是一种形状或物体。请添加图片描述
请添加图片描述

这是传统的神经网络图,通过权重调整神经元和神经元之间的关系达到处理信息的目的

另外,传统的神经网络在处理图像上有一些屏障:
**1.对于处理大图像和彩色图片有障碍:**目前用于计算机视觉问题的图像通常为224x224甚至更大,而如果处理彩色图片则又需加入3个颜色通道(RGB),即224x224x3。

如果构建一个BP神经网络,其要处理的像素点就有224x224x3=150528个,也就是需要处理150528个输入权重,而如果这个网络的隐藏层有1024个节点(这种网络中的典型隐藏层可能有1024个节点),那么,仅第一层隐含层我们就必须训练150528x1024=15亿个权重。这几乎是不可能完成训练的,更别说还有更大的图片了。

2.位置可变: 如果你训练了一个网络来检测狗,那么无论图像出现在哪张照片中,你都希望它能够检测到狗。

如果构建一个BP神经网络,则需要把输入的图片**“展平”(即把这个数组变成一列,然后输入神经网络进行训练)。但这破坏了图片的空间信息**。想象一下,训练一个在某个狗图像上运行良好的网络,然后为它提供相同图像的略微移位版本,此时的网络可能就会有完全不同的反应。

并且,有相关研究表明,人类大脑在理解图片信息的过程中,并不是同时观察整个图片,而是更倾向于观察部分特征,然后根据特征匹配、组合,最后得出整图信息。CNN用类似视觉的方式保留了图像的特征,当图像做翻转,旋转或者变换位置时,它也能有效的识别出来是类似的图像。

换句话说,在传统的ANN重,在BP全连接神经网络中,隐含层每一个神经元,都对输入图片 每个像素点 做出反应。这种机制包含了太多冗余连接。为了减少这些冗余,只需要每个隐含神经元,对图片的一小部分区域,做出反应就好了。而卷积神经网络,正是基于这种想法而实现的。

2.CNN卷积神经网络的特点

CNN是一种带有卷积结构的前馈神经网络,卷积结构可以减少深层网络占用的内存量,其中三个关键操作——局部感受野权值共享池化层,有效的减少了网络的参数个数,缓解了模型的过拟合问题

卷积层和池化层一般会取若干个,采用卷积层和池化层交替设置,即一个卷积层连接一个池化层,池化层后再连接一个卷积层,依此类推。由于卷积层中输出特征图的每个神经元与其输入进行局部连接,并通过对应的连接权值与局部输入进行加权求和再加上偏置值,得到该神经元输入值,该过程等同于卷积过程,CNN也由此而得名。

与ANN(Artificial Neural Networks,人工神经网络)的区别:上一节所学习的MLP、BP,就是ANN。ANN通过调整内部神经元与神经元之间的权重关系,从而达到处理信息的目的。而在CNN中,其全连接层就是就是MLP,只不过在前面加入了卷积层和池化层

3.CNN的主要结构

CNN主要包括以下结构:
**1、输入层(Input layer):**输入数据;
**2、卷积层(Convolution layer,CONV):**使用卷积核进行特征提取和特征映射;
**3、激活层:**非线性映射(ReLU)
**4、池化层(Pooling layer,POOL):**进行下采样降维;
**5、光栅化(Rasterization):**展开像素,与全连接层全连接,某些情况下这一层可以省去;
**6、全连接层(Affine layer / Fully Connected layer,FC):**在尾部进行拟合,减少特征信息的损失;
**7、激活层:**非线性映射(ReLU)
**8、输出层(Output layer):**输出结果。

其中,卷积层、激活层和池化层可叠加重复使用,这是CNN的核心结构。

在经过数次卷积和池化之后,最后会先将多维的数据进行“扁平化”,也就是把(height,width,channel)的数据压缩成长度为height × width × channel的一维数组,然后再与FC层连接,这之后就跟普通的神经网络无异了。(简而言之就是经过数次卷积操作和池化操作后,将我们的数据压缩为一维数组扁平化,后续操作和ANN差不多了)

3.1卷积层

在卷积神经网络中,卷积操作是指将一个可移动的小窗口(称为数据窗口,如下图绿色矩形)与图像进行逐元素相乘然后相加的操作。这个小窗口其实是一组固定的权重,它可以被看作是一个特定的滤波器(filter)或卷积核。这个操作的名称“卷积”,源自于这种元素级相乘和求和的过程。这一操作是卷积神经网络名字的来源。

卷积层由一组滤波器组成,滤波器为三维结构,其深度由输入数据的深度决定,一个滤波器可以看作由多个卷积核堆叠形成。这些滤波器在输入数据上滑动做卷积运算,从输入数据中提取特征。在训练时,滤波器上的权重使用随机值进行初始化,并根据训练集进行学习,逐步优化。

3.1.1卷积运算和卷积核(Kernel)

请添加图片描述
在这里插入图片描述

可以把卷积核理解为权重。每一个卷积核都可以当做一个**“特征提取算子”,把一个算子在原图上不断滑动,得出的滤波结果就被叫做“特征图”(Feature Map)**,这些算子被称为“卷积核”(Convolution Kernel)。我们不必人工设计这些算子,而是使用随机初始化,来得到很多卷积核,然后通过反向传播优化这些卷积核,以期望得到更好的识别结果。

请添加图片描述

3.2填充/填白(Padding)

在进行卷积层的处理之前,有时要向输入数据的周围填入固定的数据(比如0等),使用填充的目的是调整输出的尺寸,使输出维度和输入维度一致;确保卷积核能够覆盖输入图像的边缘区域,同时保持输出特征图的大小。这对于在CNN中保留空间信息和有效处理图像边缘信息非常重要。

如果不调整尺寸,经过很多层卷积之后,输出尺寸会变的很小。所以,为了减少卷积操作导致的,边缘信息丢失,我们就需要进行填充(Padding)。目的就是:总长能被步长整除。

请添加图片描述

3.3在CNN中,卷积操作主要涉及以下几个步骤:

1.数据窗口和卷积核相乘:

首先,将一个称为卷积核(也称为滤波器)的小矩阵应用于输入数据的局部区域(数据窗口)。
对于每个数据窗口,将卷积核中的每个元素与对应的数据窗口中的元素相乘,然后将这些乘积相加,得到卷积结果的一个值。

2.步幅(Stride)和填充(Padding):

步幅定义了在应用卷积核时移动的步长,即每次移动的像素数。
填充是在输入数据周围添加额外像素值,以便在边缘处也能进行有效的卷积操作。

3.多个卷积核:

CNN通常会使用多个卷积核,每个卷积核可以捕获不同的特征,例如边缘、纹理等。
每个卷积核与输入数据进行卷积操作,生成对应的特征图(Feature Map)。

3.2 池化层(Pooling layer)

池化层通常出现在卷积层之后,二者相互交替出现,并且每个卷积层都与一个池化层一一对应。

1.作用: 用于缩小我们的尺寸和模型规模,提高运算速度,同时提高提取特征的鲁棒性(抗干扰能力),简单来说,就是为了提取一定区域的主要特征,并减少参数数量,减少了特征图的空间维度,有助于减少计算量并控制过拟合。,防止模型过拟合

2.常见用法: 平均池化(Average Pooling / Mean Pooling)、最大池化(Max Pooling)、最小池化(Min Pooling)和随机池化(Stochastic Pooling)等,其中3种池化方式展示如下:
请添加图片描述

三种池化方式各有优缺点,均值池化是对所有特征点求平均值,而最大值池化是对特征点的求最大值。而随机池化则介于两者之间,通过对像素点按数值大小赋予概率,再按照概率进行亚采样,在平均意义上,与均值采样近似,在局部意义上,则服从最大值采样的准则。
根据Boureau理论2可以得出结论,在进行特征提取的过程中,均值池化可以减少邻域大小受限造成的估计值方差,但更多保留的是图像背景信息;而最大值池化能减少卷积层参数误差造成估计均值误差的偏移,能更多的保留纹理信息。随机池化虽然可以保留均值池化的信息,但是随机概率值确是人为添加的,随机概率的设置对结果影响较大,不可估计。

3.池化层的特征:

1、没有要学习的参数,这和池化层不同。池化只是从目标区域中取最大值或者平均值,所以没有必要有学习的参数
2、通道数不发生改变,即不改变Feature Map的数量。
3、它是利用图像局部相关性的原理,对图像进行子抽样,这样对微小的位置变化具有鲁棒性——输入数据发生微小偏差时,池化仍会返回相同的结果。

3.3 全连接层

https://blog.csdn.net/weixin_57128596/article/details/138859784?spm=1001.2014.3001.5502

3.3.1步骤

1.稠密层
在这里插入图片描述
2.ReLU激活函数
作用:进行非线性增强网络的学习能力,加强特征
在这里插入图片描述
在这里插入图片描述

3.输出层(softmax函数激活)
通过softmax函数将输入进行归一化,转为概率分布(到底是属于哪一类)
在这里插入图片描述

4.例子

1、输入数据:
假设我们有一张大小为 28x28 像素的灰度图像作为输入数据。每个像素值表示像素的强度,范围从 0(黑色)到 255(白色)。

2、卷积层:
**滤波器/卷积核:**我们定义了几个滤波器(也称为卷积核),用于在输入图像上滑动。每个滤波器检测特定的特征,例如边缘或纹理。
**卷积操作:**对于每个滤波器,我们执行卷积操作,通过在输入图像上滑动滤波器,在每个位置计算滤波器与重叠区域的点积。
**激活函数:**在卷积操作之后,我们应用激活函数如 ReLU(修正线性单元),引入非线性并增强网络的学习能力。
卷积输出:卷积层的输出是一组特征图。每个特征图突出显示了由滤波器学习到的不同特征。

3、池化层:
池化操作:在池化层中,我们对每个特征图执行池化操作(通常是最大池化或平均池化)。池化减少了特征图的空间维度,有助于减少计算量并控制过拟合。
**池化大小:**通常,我们使用一个 2x2 像素的池化窗口,步长为 2,这意味着我们在每个 2x2 窗口内取最大或平均值,并每次移动窗口 2 个像素。
**池化输出:**池化层的输出是一组降采样的特征图,具有减小的空间维度。

4、展平:
在卷积和池化层之后,我们将前一层的输出展平为一个 1 维向量。这个展平步骤准备数据供全连接层使用

5、全连接层:
**稠密层:**展平的向量输入一个或多个全连接(稠密)层。这些层中的每个神经元都与前一层中的每个神经元相连,允许网络学习复杂的模式。
**激活函数:**类似于卷积层,我们对每个稠密层的输出应用激活函数如 ReLU,非线性增强网络学习能力,保留主要信息特征。
**输出层:**最终的稠密层通常具有与分类任务中类别数相同的神经元数量(例如,在 MNIST 中有 10 个神经元用于数字识别)。
Softmax 激活:对于分类任务,我们通常在输出层使用 softmax 激活函数,将原始分数转换为概率。每个神经元的输出表示输入属于特定类别的概率。

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

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

相关文章

五丰黎红销量增长的秘诀:一物一码数字化营销开创调味品行业新格局!

根据当今经济环境和未来的发展趋势,传统经济向数字化经济转型的发展方向可以说是大势所趋,如何把握先机,率先迈出数字化转型第一步,可以说是无数传统企业都需要思考的问题。 作为中国调味品行业的佼佼者,五丰黎红踩着时…

荣耀MagicBook X 14 Pro锐龙版 2023 集显(FRI-H76)笔记本电脑原装出厂Windows11系统工厂模式安装包下载,带F10智能还原

恢复开箱状态预装OEM系统,适用型号:HONOR荣耀FRI-H76、FRI-H56 链接:https://pan.baidu.com/s/1Lcg45byotu5kDDSBs3FStA?pwdl30r 提取码:l30r 华为荣耀原装WIN11系统工厂安装包,含F10一键恢复功能、系统自带所有驱…

##22 深入理解Transformer模型

文章目录 前言1. Transformer模型概述1.1 关键特性 2. Transformer 架构详解2.1 编码器和解码器结构2.1.1 多头自注意力机制2.1.2 前馈神经网络 2.2 自注意力2.3 位置编码 3. 在PyTorch中实现Transformer3.1 准备环境3.2 构建模型3.3 训练模型 4. 总结与展望 前言 在当今深度学…

居家短视频怎么拍:四川京之华锦信息技术公司

居家短视频怎么拍:技巧与创意指南 在数字化时代,短视频已成为人们生活中不可或缺的一部分。无论是分享生活点滴,还是展示个人才艺,短视频都为我们提供了一个广阔的舞台。对于许多人来说,居家拍摄短视频既方便又实用。…

山东大学计算机考研数据分析,初复试占比6:4,复试内容不少得花精力准备!

山东大学(ShandongUniversity),简称山大,位于中国山东,是中华人民共和国教育部直属的综合性全国重点大学,是国家“211工程”、“985工程”重点建设院校,入选“111计划”、“珠峰计划”、“卓越工…

一种请求头引起的跨域问题记录(statusCode = 400/CORS)

问题表象 问题描述 当我们需要在接口的headers中添加一个自定义的变量的时候,前端的处理是直接在拦截器或者是接口配置的地方直接进行写,比如下面的这段比较基础的写法: $http({method: "post",url:constants.backend.SERVER_LOGIN…

判断上三角矩阵 分数 15

题目展示&#xff1a; 代码展示&#xff1a; 点这里&#xff0c;输入题目名称即可检索更多题目答案 ​#include<stdio.h>int main() {//T-tint t 0;scanf("%d",&t);while(t--)//循环t次&#xff0c;处理t个矩阵{int n 0;scanf("%d",&n);…

zip压缩unzip解压缩、gzip和gunzip解压缩、tar压缩和解压缩

一、tar压缩和解压缩 tar [选项] 打包文件名 源文件或目录 选项含义-c创建新的归档文件-x从归档文件中提取文件-v显示详细信息-f指定归档文件的名称-z通过gzip进行压缩或解压缩-j通过bzip2进行压缩或解压缩-J通过xz进行压缩或解压缩-p保留原始文件的权限和属性–excludePATTE…

Blender 导入资源包的例子

先到清华源下载资源包&#xff1a; Index of /blender/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 具体地址&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/blender/demo/asset-bundles/human-base-meshes/human-base-meshes-bundle-v1.1.0.zip 解压/hum…

机器学习 - 梯度下降算法推导

要逐步推导多变量线性回归的梯度计算过程&#xff0c;我们首先需要明确模型和损失函数的形式&#xff0c;然后逐步求解每个参数的偏导数。这是梯度下降算法核心部分&#xff0c;因为这些偏导数将指导我们如何更新每个参数以最小化损失函数。 模型和损失函数 考虑一个多变量线…

数学建模——农村公交与异构无人机协同配送优化

目录 1.题目 2.问题1 1. 问题建模 输入数据 ​编辑 2. 算法选择 3.数据导入 3.模型构建 1. 距离计算 2. 优化模型 具体步骤 进一步优化 1. 重新定义问题 2. 变量定义 3. 优化目标 具体步骤 再进一步优化 具体实现步骤 1. 计算距离矩阵 2. 变量定义 3. 约束…

mysql 查询---多表设计

部分数据 1distinct去重 select distinct job from tb_emp;select * from tb_emp where id in (1,2,3); select * from tb_emp where id between 1 and 5; select * from tb_emp where name like __; #下划线匹配单个字符, %匹配任意多个字符select min(entrydate) from tb_e…

为什么Python中会有集合set类型?

知乎上有人提问&#xff0c;为什么Python有了列表list、元组tuple、字典dict这样的容器后&#xff0c;还要弄个集合set&#xff1f; 确实set和list、tuple、dict一样&#xff0c;都是python的主要数据类型&#xff0c;它们的作用是不同的。 因为set是数学意义上的集合&#xf…

四、基于Stage模型的应用架构设计

前面我们了解了如何构建鸿蒙应用以及开发了第一个页面&#xff0c;这只是简单的demo&#xff1b;那么如何去设计&#xff0c;从0到1搭建一个真正的应用呢 一、基本概念 1、Stage模型基本概念 Stage模型概念图 AbilityStage&#xff1a;是一个Module级别的组件容器&#xff0…

Linux---编辑器vim的认识与简单配置

前言 我们在自己的电脑上所用的编译软件&#xff0c;就拿vs2022来说&#xff0c;我们可以在上面写C/C语言、python、甚至java也可以在上面进行编译&#xff0c;这种既可以用来编辑、运行编译&#xff0c;又可以支持很多种语言的编译器是一种集成式开发环境&#xff0c;集众多于…

海外住宅IP介绍

住宅IP&#xff0c;通俗的来讲就是分配给家庭的IP地址&#xff0c;ISP默认分配用户为家庭用户&#xff0c;其真实性与安全性都有一定保障。海外住宅IP是指由海外互联网服务提供商分配给家庭用户的IP地址&#xff0c;IP地址通常是静态的&#xff0c;稳定的&#xff0c;可以为用户…

vue3专栏项目 -- 四、前后端结合(上)

一、前后端分离是什么 前面我们一直在和静态数据打交道&#xff0c;虽然流程可以跑个半通&#xff0c;但是静态数据还是给我们造成了诸多不便&#xff0c;现在我们是时候用上后端了。 现在的应用开发模式&#xff0c;自从SPA出现以后&#xff0c;前端和后端可以平行的进行对应…

【动态规划五】回文串问题

目录 leetcode题目 一、回文子串 二、最长回文子串 三、分割回文串 IV 四、分割回文串 II 五、最长回文子序列 六、让字符串成为回文串的最少插入次数 leetcode题目 一、回文子串 647. 回文子串 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/…

5.15_操作符详解

1、操作符分类&#xff1a; 算术操作符 - * / % 移位操作符 << >> 位操作符 & | ^ 赋值操作符 - ...... 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员 2、算术操作符 - * / …

【Linux】系统登录,调用shell,shell配置文件,shell命令,特殊符号,shell快捷键,Linux运行级别,解决无限登录问题,修改提示符

目录 Linux系统的登录方式 以及 调用shell Linux shell 以及 shell配置文件 shell 命令 shell 特殊符号 shell 快捷键 Linux操作系统运行级别 单用户模式下解决无限登录问题 centos7修改命令行提示符 PS1 补充、centos7没有滚动条 Linux系统的登录方式 以及 调用shell…