CNN是个啥?

article/2025/9/26 3:19:03

阅读须知

本文主要意义是为了方便对CNN有个最直观的理解,知道这个玩意到底是干嘛的。文章本体是UP自己自学深度学习这块的时候做的笔记,内容均为网上收录。发在这里的原因是因为,也许有很多像UP一样不理解了就完全学不了的人存在,为了这些人能粗略地了解一下CNN于是发了出来。网上很多教程可以说是非常严谨了,要公式有公式要出典有出典,但就是看不懂...所以本文会涉及到很多UP自己的理解,如果有一定的错误还望指出。

以下正文

本文主要参考https://zhuanlan.zhihu.com/p/27908027

CNN的作用为特征提取器,用于提取给定数据内的某个特征。

以识别图片的方式理解CNN,比如,创建一个CNN识别一张图片是X还是O的模型。我们最开始输入了

一个栗子


作为输入数据,让程序去学习X的特征。于是第二次再输入该图的时候,机器知道了,这个就是X。

但是第三次,我们输入的不是这张图,而是

四个栗子


机器此时就无法再识别出该图到底是不是X了。因为机器只学过第一张图,所以模型无法整理出通用特征。用机器学习的话来说就模型复杂度低,学习样本不够,这种时候被称为欠拟合。(原文是欠拟合,但也有说过拟合的)

为了解决这个问题,只用第一张图作为学习样本很明显是不太够的。毕竟人类也不一定一次就总结出某个第一次见到的事物的特征。比如我到现在都没搞清楚一些日语词的用法,只能通过每次听到这个词在什么语境下使用,一点点自己总结这个词到底是什么意思。机器需要做相同的事情。

这里提到一点,对于数码图片,在人眼里是各种波长的光组成的一张图片,但是在机器层面,是下图这样的  

不一样的X


当然,这只是一个例子,图中-1代表黑色,1代表白色,用这种1与-1的行列来表述一张黑白图片。

当机器想用如上两张图来总结规律时,他们是实际在做的事情是,找到这两张图里通用的特征。比如这两张图虽然对应的行列结构不一样,但是存在一致的地方,比如

我们一样耶^^


这些被框框框住的区域仍然是相同的,因此依然可以用来辅助机器识别图片到底是不是X。

(小想法,从某种层面上来说,机器学习是赋予机器一种模糊判断的能力。从一个到一类的转变。)

但是上图框框有一个是3x3,两个是2x2,尽可能保持特征为同样行列的矩阵的话会更好处理。于是,从上图这俩例子来说,机器提炼出了如下的三种特征。从行列的角度来说如下

随机挑选几名幸运特征


这种被提取出来的特征被称为卷积核,一般是3x3或者5x5大小。

接下来说一说机器学习里一直说来说去的卷积到底是什么意思。

当机器提取了如上的三种特征之后,他要做的下一步事情,是拿这三个特征行列,去和图片里的每一处3x3乘一遍,

在这里三个特征行列我们先称为特征行列1,特征行列2和特征行列3.


最终得到另一个3x3行列,

当当~


再将这个3x3行列的9个元素的平均值写在最中间的位置。

这个位置对应的数字


这意味着,在蓝框框中心的这个位置的3X3行列,每一个元素与特征行列1的特征值分别相乘之后,平均值为1.

这里只是当蓝框框在这个位置时候和特征行列1相乘的一个例子,我们在之前也说了,需要拿特征行列与该图片中的每一处3x3都要乘一遍,于是我们要把蓝框框再挪一挪。对了,这个蓝框框称为窗口。

蓝框框最开始应该在这个位置。

把整个图片扫描一遍


当算完这个蓝框框之后,会继续向右移动。如果我们设置步长stride=1的话,则会变成

右走一步(注意,这里可以有重叠区域,比如第二列)


当移动到最右边之后,我们得去第二行,于是向下移动一个步长stride=1,则会变成

向下走一步


当我们用这种方式把整个图上所有的地方都计算了一遍之后,这张图变成了这样

注意这里少了2行2列,为什么呢?


这张图称为特征图feature map

注意哈,这张图不再是最开始黑白图的那个9x9行列了,而变成了7x7。这是很容易理解的,毕竟原本黑白那张图的(1,1)元素为中心的蓝框框是不存在的。

同样的,这张图只是对特征行列1进行了计算,还有特征行列2和3,所以我们还要进行两次同样的计算,并最终得到

是不是看着还挺炫酷的


这么三个特征行列。至此,特征图计算完毕了。

接下来来介绍另外两个概念。

当我们获得如上三张特征图之后,还是觉得数据量太大,计算机处理起来太麻烦。那能不能再简化一点的。

可以。

这里有一个新的方法,使用relu函数。这个函数的功能是保留行列中大于等于零的数字,且将小于零的数直接改写为0。(因为在特征图里,数字越接近1则表示相关性越高,越接近-1则相关性越低,故为了方便计算,将小于0的略去)

这里对应关系比较简单,我就只放一张图在这里了


最终将左图完全改写成如下形式

其实没啥区别,就是小于0的因为关系不大,就让他们都等于0得了


这一层叫做非线性激活层,relu函数是一种常用的非线性激活函数

现在我们这张图上小于0的元素因为相关性太低都被清理掉了。数据一下少了很多。那能不能再降低一下数据量呢?

还是可以的。

比方说,我们依然可以用之前那种窗口的方式,然后选取窗口内的最大值,填到一个新的行列里去

红框框区域内发生的事情


在红框框区域中,最大值是1.00,于是便将这个1.00填入新行列的(1,1)位置。然后,窗口红框框一般不会重复选择数据,因此下一个位置选这里

第二个红框框区域发生的事情


当红框框框在最右边单独的列时,我们将被框住的空白视为0即可。

这种填补的行为被称为填充(padding),有很多种方法和模式


因此在这个位置输出的最大值应为0.33。当对整张图都进行了一遍取最大值之后,这张图变成了这样。

9X9到4X4了,芜湖


这种处理方法,被称为池化(pooling)

相应的,这一层被称为池化层,这种取最大值的方法叫做最大池化,还有一种取平均值的方法叫做平均池化。池化这种处理方式的特征为,一定程度保留数据特征的前提下,减少参数和计算量(数据的长宽),通道数不变。

这是一个长224,宽224,64个通道的数据组的例子


------------------------------------------------------------------------------------------------------------

注意,接下来的部分为全连接层,这一部分我把网上快翻遍了都没找到几个好理解的。因此只能硬着头皮理解了一番之后整理了一下自己的理解。可能有错,注意甄别。

------------------------------------------------------------------------------------------------------------

当数据处理到这里时,可以继续重复之前的这几种层再来一遍,

层层套娃


或者进入另一种处理方式

光翼展开(bushi


把上一步得到池化之后的三个行列一维展开,就是按照从左往右从上往下的方式改写成一列,这一列将作为全连接层的输入层,然后把输入层的所有元素都与隐层相连

这里太复杂了,我就画个示意图在这里,要是有不懂得我也可以把图片做个完整版出来


而隐层,则是人为放了一个具有n个元素(或者说神经元)的一列行列。里面的每个元素可以视作一个多项式,每个多项式都不同,这样才可以更好地拟合数据分布。[1](如果隐层神经元都一样的话,那输入层的数字输入哪个神经元都没区别)隐层未必只有一层,可以有很多层,但是太多太少都不好。这块要依靠经验来。

至于输出层,需要分成几类,就设置输出层有几个神经元就行。比如说分类X或者O,就是两类,所以就放两个神经元。

所以整个流程就是,输入层的每个数字都分别与隐层的每个神经元算一算,得到各自的结果,然后把这个结果稍加处理之后分别再次发到输出层的两个神经元上,最终输出层的两个神经元各自会得到一个数字,把这两个数字用softmax函数处理了之后,最终会分别获得两种分类的概率。比方说40%概率是X,60%概率是O这样。(softmax函数的作用是使预测结果值为大于等于0的基础上,再使预测结果概率之和为1[2])

输入层是输入数据的特征,隐藏层是特征是否满足某n个条件(可视为),输出层则是与该结果的符合程度。

至此,CNN就先告一段落。

[1] https://zhuanlan.zhihu.com/p/33841176

[2]https://blog.csdn.net/lz_peter/article/details/84574716 作者:Setsunal_ https://www.bilibili.com/read/cv20632670 出处:bilibili


http://chatgpt.dhexx.cn/article/WlLxiUKr.shtml

相关文章

(太长太全面了)CNN超详细介绍

原文链接:https://blog.csdn.net/jiaoyangwm/article/details/80011656 文章目录 1、卷积神经网络的概念2、 发展过程3、如何利用CNN实现图像识别的任务4、CNN的特征5、CNN的求解6、卷积神经网络注意事项7、CNN发展综合介绍8、LeNet-5结构分析9、AlexNet10、ZFNet10…

深度学习——卷积神经网络(CNN)简介

卷积神经网络简介 文章目录 卷积神经网络简介前言一.如何理解卷积1.1什么是卷积1.2 为什么要卷积 二.神经网络的结构三.卷积层四.池化层五.全连接层六.数据训练七.常见的卷积神经网络1. LeNet2 AlexNet3. VGG net4. ResNet 前言 卷积神经网络(Convolutional Neural…

CNN卷积神经网络 的学习记录一

1. 概述 卷积神经网络的特点:一方面它的神经元间的连接是非全连接的, 另一方面同一层中某些神经元之间的连接的权重是共享的(即相同的)。 上图左:图像有1000*1000个像素,有10^6个隐层神经元,进行…

CNN是什么意思?它与传统神经网络有什么不同?

CNN代表卷积神经网络(Convolutional Neural Network)。它是一种专门用于处理具有网格结构数据的神经网络模型,尤其在图像识别和计算机视觉任务中表现出色。CNN的设计灵感来自于生物视觉系统对视觉信息的处理方式。 与传统神经网络相比&#x…

Person

设计一个学校在册人员类(Person)。数据成员包括:身份证号(IdPerson),姓名(Name), 性别(Sex),生日(Birthday)和…

Using an in-memory repository. Keys will not be persisted to storage.问题

记录一个问题: 2020-04-13 15:26:18.3489|Microsoft.AspNetCore.DataProtection.Repositories.EphemeralXmlRepository|WARN|Using an in-memory repository. Keys will not be persisted to storage. 2020-04-13 15:26:18.3577|Microsoft.AspNetCore.DataProtectio…

Persistence

str.strip()#删除多余空格 通过指定第二个参数来决定BIF open()用哪种模式打开文件 默认r参数读取 可以用w参数写入 默认输入方式为标准输出,若要改为输出到文件,用file指定 用w模式打开时,若文件不存在,则创建一个新文件 注意…

persevere的用法_词汇精选:persist的用法和辨析 - 英语讨论网

一、详细释义: v. 坚持;固执 [I] 例句: We must persist in taking the road of self reliance. 我们必须坚持自力更生的道路。 例句: If you persist in disregarding my advice, I shall wash my hands of the whole business. …

tomcat启动时报:IOException while loading persisted sessions: java.io.EOFException的解决方案

错误代码如下:严重: IOException while loading persisted sessions: java.io.EOFException java.io.EOFExceptionat java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2325)at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectI…

@Deprecated

Deprecated是java内置注解,此注解可以用在方法,属性,类上,表示不推荐程序员使用,但是还可以使用

detached entity passed to persist:***

detached entity passed to persist 翻译:翻译传递到持久化的分离实体。 错误提示: detached entity passed to persist: com.lzh.blog.po.Tag; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: co…

Spring Boot进阶(26):Mybatis 中 resultType、resultMap详解及实战教学 | 超级详细,建议收藏

1. 前言🔥 今天,我要给大家讲一个我因前几天遇到的一个bug,由此为灵感而想跟大家分享这个东西,既专写一篇关于[ 如何正确使用resultType/resultMap ]的文章,具有很好的入门教学,希望能帮助更多小伙伴💯,不会因它们而犯低级错💥。 这将又会是干货满满的一期,全程无…

resultType(输出类型)

可输出的类型有四种:返回一般数据类型(单条)、JavaBean 类型(单条)、List类型(多条)、Map类型 ① 一般数据类型(单条) 比如要根据Id属性获得数据库中的某个字段值,示例: ② JavaBean 类型(单条) 比如根据某个字段获得数据库中的信息&#xff…

mysql resulttype map_Mybatis中的resultType和resultMap查询操作实例详解

resultType和resultMap只能有一个成立,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,resultMap解决复杂查询是的映射问题。比如:列名和对象属性名不一致时可以使用resultMap来配置;还有查询的…

java中resulttype_ResultMap和ResultType在使用中的区别、MyBatis中Mapper的返回值类型

在使用mybatis进行数据库连接操作时对于SQL语句返回结果的处理通常有两种方式,一种就是resultType另一种就是resultMap,下面说下我对这两者的认识和理解 resultType:当使用resultType做SQL语句返回结果类型处理时,对于SQL语句查询出的字段在相应的pojo中必须有和它相同的字段…

resulttype和resultMap区别详解

目录 一、对象不同 1. resultMap 2. resultType 3. 分析 二、描述不同 1、resultMap 2、resulTtype 三、类型适用不同 一、对象不同 1. resultMap 如果查询出来的结果的列名和实体属性不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系&…

MyBatis查询结果resultType返回值类型详细介绍

一、返回一般数据类型 比如要根据 id 属性获得数据库中的某个字段值。 mapper 接口&#xff1a; // 根据 id 获得数据库中的 username 字段的值String getEmpNameById(Integer id); SQL 映射文件&#xff1a; <!-- 指定 resultType 返回值类型时 String 类型的&#xff0c…

Mybatis ResultType处理返回类型

目录 1. 使用resultType返回List 2. 使用resultType返回单个对象 3. 使用resultType返回List&#xff0c;适用于多表查询返回结果集 4. 使用resultType返回Map&#xff0c;适用于多表查询返回单个结果集,object> 1. 使用resultType返回List<T> Mapper.xml <se…

详解Mybatis中的resultType和resultMap

resultType和resultMap是Mybatis基于xml配置开发过程中sql语句所在标签的一种属性&#xff0c;它们的特性如下&#xff1a; 1. resultType&#xff1a;该属性是为了配置mybatis查询的返回结果类型&#xff0c;如果返回值类型是整型数据&#xff0c;该属性处可以配置int&#x…

redis的incr+expire的坑

背景 用户需要进行ocr识别&#xff0c;为了防止接口被刷&#xff0c;这里面做了一个限制(每分钟调用次数不能超过xxx次)。 经过调研后&#xff0c;决定使用redis的incr和expire来实现这个功能 说明&#xff1a;以下代码使用golang实现 第一版代码 // 执行ocr调用 func (o *ocr…