| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 人工智能 -> 卷积神经网络CNN详解 -> 正文阅读 |
|
|
[人工智能]卷积神经网络CNN详解 |
一、全连接神经网络1、全连接网络:网络层的每一个结点都与上一层的所有结点相连。
对于每个神经元:
2、如果没有激活函数,我们的求和函数拟合能力均为线性的,而激活函数的作用在于,为我们的模型提供了非线性的拟合能力。
?3、全连接神经网络处理大尺寸图像具有三个明显的缺点: (1)首先将图像展开为向量会丢失空间信息; (2)其次参数过多效率低下,训练困难; (3)同时大量的参数也很快会导致网络过拟合。 而使用卷积神经网络可以很好地解决上面的三个问题。 二、卷积神经网络与常规神经网络不同,卷积神经网络的各层中的神经元是3维排列的:宽度、高度和深度。 其中的宽度和高度是很好理解的,因为本身卷积就是一个二维模板,但是在卷积神经网络中的深度指的是网络的层数。 举个例子来理解什么是宽度,高度和深度,假如使用CIFAR-10中的图像是作为卷积神经网络的输入,该输入数据体的维度是32x32x3(宽度,高度和深度)。我们将看到,层中的神经元将只与前一层中的一小块区域连接,而不是采取全连接方式。 对于用来分类CIFAR-10中的图像的卷积网络,其最后的输出层的维度是1x1x10,因为在卷积神经网络结构的最后部分将会把全尺寸的图像压缩为包含分类评分的一个向量,向量是在深度方向排列的。下面是例子:
左侧是一个3层的神经网络; 右侧是一个卷积神经网络,将它的神经元在成3个维度(宽、高、深度)进行排列;红色的输入层代表输入图像,所以它的宽度和高度就是图像的宽度和高度,它的深度是3(代表了红、绿、蓝3种颜色通道),与红色相邻的蓝色部分是经过卷积和池化之后的激活值(也可以看做是神经元) ,后面是接着的卷积池化层。 卷积神经网络的每一层都将3D的输入数据变化为神经元3D的激活数据并输出; 三、卷积神经网络的各种层卷积神经网络主要由这几类构成:输入层、卷积层,ReLU层、池化层和全连接层(全连接层和常规神经网络中的一样)。将这些层叠加起来,就可以构建一个完整的卷积神经网络。 在实际应用中往往将卷积层与ReLU层共同称之为卷积层,所以卷积层经过卷积操作也是要经过激活函数的。具体说来,卷积层和全连接层(CONV/FC)对输入执行变换操作的时候,不仅会用到激活函数,还会用到很多参数,即神经元的权值w和偏差b;而ReLU层和池化层则是进行一个固定不变的函数操作。卷积层和全连接层中的参数会随着梯度下降被训练,这样卷积神经网络计算出的分类评分就能和训练集中的每个图像的标签吻合了。 1、卷积层卷积层是构建卷积神经网络的核心层,产生了网络中大部分的计算量。注意计算量而不是参数量。 ? 2、卷积层作用
? 3、感受野(重点)在处理图像的高维度输入时,让每个神经元都与前一层中的所有神经元进行全连接是不现实的。 相反,我们让每个神经元只与输入数据的一个局部区域连接。该连接的空间大小叫做神经元的感受野(receptive field),它的尺寸是一个超参数(其实就是滤波器的空间尺寸)。 在深度方向上,这个连接的大小总是和输入量的深度相等。需要再次强调的是,我们对待空间维度(宽和高)与深度维度是不同的,但是在深度上总是和输入数据的深度一致,这一点会在下面举例具体说明。
?在图 2 中展现的卷积神经网络的一部分,其中的红色为输入数据,假设输入数据体尺寸为[32x32x3](比如CIFAR-10的RGB图像),如果感受野(或滤波器尺寸)是5x5,那么卷积层中的每个神经元会有输入数据体中[5x5x3]区域的权重,共5x5x3=75个权重(还要加一个偏差参数)。 注意这个连接在深度维度上的大小必须为3,和输入数据体的深度一致。 其中还有一点需要注意,对应一个感受野有75个权重,这75个权重是通过学习进行更新的,所以很大程度上这些权值之间是不相等。 注意是一个偏置,无论输入输入数据是多少层,一个卷积核就对应一个偏置。 ? 4、神经元的空间排列感受野讲解了卷积层中每个神经元与输入数据体之间的连接方式,但是尚未讨论输出数据体中神经元的数量,以及它们的排列方式。 3个超参数控制着输出数据体的尺寸:深度,步长和零填充。 (1) 输出数据体的深度:它是一个超参数,和使用的滤波器的数量一致,而每个滤波器在输入数据中寻找一些不同的东西,即图像的某些特征。(注意图像的深度和输出的深度不同?) (2) 在滑动滤波器的时候,必须指定步长。当步长为1,滤波器每次移动1个像素;当步长为2,滤波器滑动时每次移动2个像素,当然步长也可以是不常用的3,或者更大的数字,但这些在实际中很少使用)。这个操作会让输出数据体在空间上变小。 (3) 有时候将输入数据体用0在边缘处进行填充是很方便的。这个零填充(zero-padding)的尺寸是一个超参数。零填充有一个良好性质,即可以控制输出数据体的空间尺寸(最常用的是用来保持输入数据体在空间上的尺寸,使得输入和输出的宽高都相等)。 ? 5、权值共享在卷积层中权值共享是用来控制参数的数量。假如在一个卷积核中,每一个感受野采用的都是不同的权重值(卷积核的值不同),那么这样的网络中参数数量将是十分巨大的。 权值共享是基于这样的一个合理的假设:如果一个特征在计算某个空间位置 (x1,y1)(x1,y1) 的时候有用,那么它在计算另一个不同位置 (x2,y2)(x2,y2) 的时候也有用。 比如一个数据体尺寸为[55x55x96]的就有96个深度切片,每个尺寸为[55x55],其中在每个深度切片上的结果都使用同样的权重和偏差获得的。在这样的参数共享下,假如一个例子中的第一个卷积层有96个卷积核,那么就有96个不同的权重集了,一个权重集对应一个深度切片,如果卷积核的大小是 11x11的,图像是RGB 3 通道的,那么就共有96x11x11x3=34,848个不同的权重,总共有34,944个参数(因为要+96个偏差),且在每个深度切片中的55x55 的结果使用都是同样的参数。 在反向传播的时候,都要计算每个神经元对它的权重的梯度,但是需要把同一个深度切片上的所有神经元对权重的梯度累加,这样就得到了对共享权重的梯度。这样,每个切片只更新一个权重集。这样做的原因可以通过下面这张图进行解释。 ? 而每个切片只更新一个权重集的原因也是这样的,从图3 中可以看到,不同深度的神经元不会公用相同的权重,所以只能更新一个权重集。 |
|
|
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年10日历 | -2025/10/27 5:30:54- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |