CNN

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

卷积神经网络(Convolutional Neural Networks)是一种深度学习模型或类似于人工神经网络的多层感知器,常用来分析视觉图像。CNN在图像分类数据集上有非常突出的表现。

DNN与CNN

下图为DNN:

DNN

下图为CNN:

CNN

虽然两张图的结构直观上差异较大,但实际上它们的整体架构是非常相似的。

  • CNN通过一层一层的节点组织起来。
  • 和DNN一样,CNN的每一个节点都是一个神经元。
  • CNN的输入输出与DNN基本一致。以图像分类为例,CNN的输入层就是图像的原始像素,而输出层中的每一个节点代表了不同类别的可信度。DNN中的损失函数以及参数的优化过程也适用于CNN。

CNN结构

使用DNN处理图像的最大问题在于全连接层的参数太多。对于MNIST数据,每一张图片的大小为28*28*1,1表示图像是黑白的,只有一个彩色通道。假设第一层隐藏层的节点数为500个,那么一个全连接层的神经网络会有28*28*500+500=392500个参数。如果图片采取更大的规格,比如有RGB三个彩色通道,那么参数数量更是巨大。过多的参数会导致计算速度减慢以及过拟合。而CNN可以有效的减少参数的个数。下图是具体的CNN结构图:

CNN_detail

在CNN的前几层中,每一层的节点都被组织成一个三维矩阵。比如将输入的图片组织成一个32*32*3的三维矩阵。从上图中可以看出CNN的前几层中每个节点只和上一层中部分的节点相连。CNN主要由以下5中结构组成:

输入层

输入层是整个神经网络的输入,在处理图像的CNN中,它一般代表了一张图片的像素矩阵。在上图的最左侧的三维矩阵就可以代表一张图片。三维矩阵的长和宽代表了图像的大小,而三维矩阵的深度代表了图像的色彩通道。比如黑白图片的深度为1,而在RGB色彩模式下,图像的深度为3。

卷积层(Convolution Layer)

卷积层是CNN最重要的部分。和传统全连接层不同,卷积层中每一个节点的输入只是上一层神经网络的一小块。下图为卷积层的过滤器(filter)或者内核(kernel):

filter

filter可以将当前层神经网络上的一个子节点矩阵转化为下一层神经网络上的一个单位节点矩阵(长宽均为1,但深度不限)。filter的尺寸指的是filter输入节点矩阵的大小,通常有3*3或5*5。filter处理的矩阵深度和当前层神经网络节点矩阵(输入节点矩阵)的深度是一致的,而filter的深度指的是输出单位节点的深度。

示例

下图展示了如何通过filter将一个2*2*3的节点矩阵转化为一个1*1*5的单位节点矩阵。

g0

一个filter的前向传播过程和全连接层相似,它总共需要2*2*3*5+5个参数,+5表示偏置项参数的个数。假设使用 w x , y , z i w_{x,y,z}^i wx,y,zi 表示对于输出单位节点矩阵中的第i个节点,filter输入节点 ( x , y , z ) (x, y, z) (x,y,z) 的权重,使用 b i b^i bi 表示第i个输出节点对应的偏置项参数,那么单位矩阵中的第i个节点的取值 g ( i ) g(i) g(i) 为:
g ( i ) = f ( ∑ x = 1 2 ∑ y = 1 2 ∑ z = 1 3 a x , y , z ∗ w x , y , z i + b i ) g(i) = f(\sum_{x=1}^2\sum_{y=1}^2\sum_{z=1}^3 a_{x, y, z}*w_{x, y, z}^i + b^i) g(i)=f(x=12y=12z=13ax,y,zwx,y,zi+bi)
其中 a x , y , z a_{x, y, z} ax,y,z 为filter节点 ( x , y , z ) (x, y, z) (x,y,z) 的取值, f f f 采用ReLU作为激活函数。上图展示了 g ( 0 ) g(0) g(0) 的计算过程。每一个二维矩阵表示三维矩阵在某一个深度上的取值。

卷积层结构的前向传播就是通过将一个filter从神经网络当前层的左上角移动到右下角(即滑过整个图像),并在移动过程中重复上述运算:

slide

调整输出矩阵大小

全0填充

为了避免卷积层前向传播过程中节点矩阵的尺寸的变化,可以在当前矩阵的边界上加入全0填充。这样可以使得卷积层前向传播结果矩阵的大小和当前层矩阵保持一致:

padding

步长

下图显示了filter步长为2且使用全0填充时,卷积层前向传播的过程:

stride

输出矩阵的大小

宽度:
o u t w = W − F w + P S + 1 out_w = \frac {W - F_w + P} {S} + 1 outw=SWFw+P+1
高度:
o u t h = H − F h + P S + 1 out_h = \frac {H - F_h + P} {S} + 1 outh=SHFh+P+1
深度有人工指定。

  • W W W:输入图像的宽度
  • H H H:输入图像的高度
  • F w F_w Fw:filter的宽度
  • F h F_h Fh:filter的高度
  • P P P:全0填充的宽度
  • S S S:移动步幅

参数共享

当前卷积层中所有过滤器的参数是共享的,这样就可以巨幅减少神经网络上的参数。假设输入层矩阵的的维度为32*32*3,第一层卷积层filter尺寸为5*5,深度为16,那么这个卷积层的参数个数为5*5*3*16+16=1216个。如果使用全连接层,那么全连接层的参数个数为32*32*3*500=1536000个。相比之下,卷积层的参数个数要远远小于全连接层。卷积层的参数个数与图片的大小无关,它只和filter的尺寸、深度以及当前输入层的深度有关。这使得CNN可以很好地扩展到更大的图像数据上。

池化层(Pooling Layer)

池化层不会改变三维矩阵的深度,但是它可以缩小矩阵的大小。通过池化层,可以进一步缩小最后全连接层中节点的个数,从而达到减少整个神经网络参数的目的。使用池化层既可以加快计算速度也可以防止过拟合。

池化层filter的计算不是节点的加权和,而是采用最大值或者平均值计算。使用最大值操作的池化层被称之为最大池化层(max pooling),这是被使用得最多的池化层结构。使用平均值操作的池化层被称之为平均池化层(average pooling)。

池化层前向传播的过程也是通过移动一个类似filter的结构完成的。与卷积层的filter类似,池化层的filter也需要人工设定filter的尺寸、全0填充以及filter的步长。卷积层和池化层的filter移动方式也是相似的,唯一的区别在卷积层使用的filter是横跨整个深度的,而池化层使用的filter只影响一个深度上的节点。所以池化层的filter除了在长和宽两个维度移动外,它还需要在深度这个维度移动。如下图所示:

pooling

全连接层

在经过多轮卷积层和池化层的处理之后,在CNN的最后一般会由1到2个全连接层来给出最后的分类结果。经过几轮卷积层和池化层的处理之后,可以认为图像中的信息已经被抽象成了信息含量更高的特征。我们可以将卷积层和池化层看成自动图像特征提取的过程。在提取完成之后,仍然需要使用全连接层来完成分类任务。

Softmax层

通过Softmax层,可以得到当前样例属于不同种类的概率分布问题。


参考自:

  • 《TensorFlow实战Google深度学习框架》
  • https://yq.aliyun.com/articles/637953

http://chatgpt.dhexx.cn/article/5LXaTEwH.shtml

相关文章

CNN卷积神经网络(图解CNN)

文章目录 什么是卷积神经网络:1)网络结构2)局部感受野与权值共享3)卷积层、下采样层、全连接层卷积神经网络相比一般神经网络在图像理解中的优点:边缘检测卷积运算卷积层卷积后维度公式及运算示例 Padding填充Valid卷积…

CNN-卷积神经网络

一、基本的神经网络结构 神经网络其实就是按照一定规则连接起来的多个神经元,输入向量的维度和输入层(Input Layer)神经元个数相同,分类问题的类别个数决定输入层(Output Lazyer)的神经元个数。第N层的神经…

CNN是个啥?

阅读须知 本文主要意义是为了方便对CNN有个最直观的理解,知道这个玩意到底是干嘛的。文章本体是UP自己自学深度学习这块的时候做的笔记,内容均为网上收录。发在这里的原因是因为,也许有很多像UP一样不理解了就完全学不了的人存在&#xff0c…

(太长太全面了)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…