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计划”、“珠峰计划”、“卓越工…

【C++风云录】跨界融合:纺织工程与材料科学

工具库揭秘:洞察TexGen、MatLib、CGAL、Eigen、Boost Geometry和VTK的内核 前言 在这个技术日新月异的时代,各种工具库正如春笋般迅速崭露头角。本文将深入探讨六个重要的工具库:TexGen,MatLib,CGAL,Eige…

一种请求头引起的跨域问题记录(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);…

Python装饰器,增强代码的魔力

写在前言 hello&#xff0c;大家好&#xff0c;我是一点&#xff0c;专注于Python编程&#xff0c;如果你也对感Python感兴趣&#xff0c;欢迎关注交流。 希望可以持续更新一些有意思的文章&#xff0c;如果觉得还不错&#xff0c;欢迎点赞关注&#xff0c;有啥想说的&#x…

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

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

VsionPro

VisionPro是一个功能强大的机器视觉软件工具&#xff0c;用于自动化和智能化生产线上的视觉检测、识别、定位等任务。它具备以下主要特点和功能&#xff1a; 编程接口&#xff1a;VisionPro提供了可编程接口&#xff0c;支持多种编程语言&#xff0c;如C、C#等&#xff0c;方便…

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;因为这些偏导数将指导我们如何更新每个参数以最小化损失函数。 模型和损失函数 考虑一个多变量线…

nginx配置部署

server { // 监听的端口&#xff0c;代理后&#xff0c;前端访问输入的端口 listen 9090; #listen [::]:80 default_server ipv6onlyon; server_name localhost; // root根路径&#xff0c;nginx部署后放置的前台打包后dist里的文件的静态目录 location / { root /home/ruoyi/…

前端 Node.js

Node.js Node.js简介Node.js开发环境搭建使用vscode开发Node.js应用Node.js核心模块Node.js fs 模块 (File System)Node.js http 模块Node.js https 模块Node.js url 模块Node.js querystring 模块Node.js path 模块Node.js events 模块Node.js util 模块 (Utilities)Node.js …

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

目录 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…

Vueday2

01-指令修饰符 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>01-指令修饰符</title> </h…

Oracle 中索引与完整性(SQL)

索引 在数据库中建立索引主要有以下作用&#xff1a; &#xff08;1&#xff09;快速存取数据&#xff1b; &#xff08;2&#xff09;既可以改善数据库性能&#xff0c;又可以保证列值的唯一性&#xff1b; &#xff08;3&#xff09;实现表与表之间的参照完整性&#xff1b;…

数据库ID生成策略及相应的代码示例(优缺点)

以下是各大厂常用的数据库ID生成策略及相应的代码示例&#xff1a; 1. 自增ID&#xff08;Auto Increment&#xff09; 适用于单机数据库&#xff0c;如MySQL、PostgreSQL。 应用场景&#xff1a;主要用于单机数据库&#xff0c;如MySQL、PostgreSQL。优点&#xff1a;简单易…