卷积神经网络入门((7)卷积神经网络的基本结构)

本文目录
- (7)卷积神经网络的基本结构
- 初识卷积神经网络
- 视觉-卷积层基础知识
- 一文看懂卷积神经网络-CNN(基本原理+独特价值+实际应用)
- GCN图卷积网络入门详解
- 卷积神经网络的基本原理
- 卷积神经网络
- 卷积神经网络(CNN)基础
- 卷积神经网络原理
- 卷积神经网络通俗理解
(7)卷积神经网络的基本结构
卷积神经网络主要结构有:卷积层、池化层、和全连接层。通过堆叠这些层结构形成一个卷积神经网络。将原始图像转化为类别得分,其中卷积层和全连接层拥有参数,激活层和池化层没有参数。参数更新通过反向传播实现。
(1)卷积层
卷积核是一系列的滤波器,用来提取某一种特征
我们用它来处理一个图片,当图像特征与过滤器表示的特征相似时,卷积操作可以得到一个比较大的值。
当图像特征与过滤器不相似时,卷积操作可以得到一个比较小的值,实际上,卷积的结果特征映射图显示的是对应卷积核所代表的特征在原始特征图上的分布情况。
每个滤波器在空间上(宽度和高度)都比较小,但是深度和输入数据保持一致(特征图的通道数),当卷积核在原图像滑动时,会生成一个二维激活图,激活图上每个空间位置代表原图像对该卷积核的反应。每个卷积层,会有一整个集合的卷积核,有多少个卷积核,输出就有多少个通道。每个卷积核生成一个特征图,这些特征图堆叠起来组成整个输出结果。
卷积核体现了参数共享和局部连接的模式。每个卷积核的大小代表了一个感受野的大小。
卷积后的特征图大小为(W-F+2*P)/s+1 ;P 为填充 s 为步长
(2)池化层
池化层本质上是下采样,利用图像局部相关性的原理(认为最大值或者均值代表了这个局部的特征),对图像进行子抽样,可以减少数据处理量同时保留有用信息。这里池化有平均池化,L2范式池化,最大池化,经过实践,最大池化的效果要好于平均池化(平均池化一般放在卷积神经网络的最后一层),最大池化有利于保存纹理信息,平均池化有利于保存背景信息。实际上(因为信息损失的原因)我们可以看到,通过在卷积时使用更大的步长也可以缩小特征映射的尺寸,并不一定要用池化,有很多人不建议使用池化层。32*32在5*5卷积核步长为1下可得到28*28。
池化操作可以逐渐降低数据体的空间尺寸,这样的话就能减少网络中参数的数量,使得计算资源耗费变少,也能有效控制过拟合。
(3)全连接层
通过全连接层将特征图转化为类别输出。全连接层不止一层,在这个过程中为了防止过拟合会引入DropOut。最新研究表明,在进入全连接层之前,使用全局平均池化可以有效降低过拟合。
(4)批归一化BN——Batch Normal
随着神经网络训练的进行,每个隐层的参数变化使得后一层的输入发生变化,从而每一批的训练数据的分布也随之改变,致使网络在每次迭代中都需要拟合不同的数据分布,增大训练复杂度和过拟合的风险,只能采用较小的学习率去解决。
通常卷积层后就是BN层加Relu。BN已经是卷积神经网络中的一个标准技术。标准化的过程是可微的,因此可以将BN应用到每一层中做前向和反向传播,同在接在卷积或者全连接层后,非线性层前。它对于不好的初始化有很强的鲁棒性,同时可以加快网络收敛速度。
(5)DropOut
Dropout对于某一层神经元,通过定义的概率来随机删除一些神经元,同时保持输入层与输出层神经元的个数不变,然后按照神经网络的学习方法进行参数更新,下一次迭代中,重新随机删除一些神经元,直至训练结束。
(6)softmax层
Softmax层也不属于CNN中单独的层,一般要用CNN做分类的话,我们习惯的方式是将神经元的输出变成概率的形式,Softmax就是做这个的: 。显然Softmax层所有的输出相加为1,按照这个概率的大小确定到底属于哪一类。
初识卷积神经网络
按照上文中介绍的神经网络,如果处理一张图片的话,参数有多大呢?假设图像的大小为1200 * 1200,下一层的神经元个数为10^5,不难得出参数量为 1200 * 1200 * 10^5 = 1.44 * 10^12。可以看出一层的参数量就是很大了,如果再多加几层,那参数量大的应该是超出了内存的承受范围,这从研究和工程的角度都是不允许的。而且参数太多,很容易造成过拟合。
怎么解决这个问题呢?经过研究,从稀疏连接、参数共享和平移不变性三个方面来进行改进。
可能有些人不懂这种稀疏连接是怎么实现的?先来说说卷积操作,以一个二维矩阵为输入(可以看作是一个单通道图片的像素值),卷积产生的稀疏连接根本原因就是这块的核函数,一般的核函数的大小远小于输入的大小。
以下图例:卷积操作可以看做是一种滑窗法,首先,输入维度是4×4,输入中红色部分,先和核函数中的元素对应相乘,就是输出中左上角的元素值s1,即 s1 = a×k1+b×k2+e×k3+f×k4。
参数共享是指在一个模型的多个函数中使用相同的参数,它是卷积运算带来的固有属性。
在全连接中,计算每层的输出时,权重矩阵中的元素只作用于某一个输入元素一次;
而在卷积神经网络中,卷积核中的每一个元素将作用于每一个局部输入的特定位置上。根据参数共享的思想,我们只需要学习一组参数集合,而不需要针对每一个位置的每一个参数来进行优化学习,从而大大降低了模型的存储需求。
如果一个函数的输入做了一些改变,那么输出也跟着做出同样的改变,这就时平移不变性。
平移不变性是由参数共享的物理意义所得。在计算机视觉中,假如要识别一个图片中是否有一只猫,那么无论这只猫在图片的什么位置,我们都应该识别出来,即就是神经网络的输出对于平移不变性来说是等变的。
根据稀疏连接、参数共享和平移不变性三个思想,卷积核就应运而生了。看下图,有个直观的感受。
上图就是在一个通道上做的卷积,但现实中,图片一般是由3个通道构成(R\G\B),卷积核也由二维的平面生成了三维立体。具体的样子如下图:
如上图所示,Filter W0 即为卷积核,其大小为(3 * 3 * 3),每个3*3的二维平面会和图片的相应的通道进行卷积,3个通道的结果相加后加上统一的偏置b0,结果即为Output Volume 第一个通道的第一个位置的数。
从上图还可以看出 Input Volume 四周加了0,这个0叫做padding,一般是为了卷积划动的过程中包含原有的所有数;而多通道卷积核计算过程和卷积核计算过程,不太一样的是多通道卷积核计算过程每次滑2下,这个滑动的距离叫做步长-stride。
所以通过输入大小和卷积核大小,我们可以推断出最终的结果的大小。比如上图卷积核计算过程,输入大小为5 * 5,卷积核为3 * 3,那么卷积核在原图上每次滑动一格,横向滑3次,纵向也是3次,最终结果为 3 * 3。在多通道卷积核计算过程中,每次滑动为2格,横向滑3次,纵向也是3次,最终结果也为 3*3。可以推断出,最终大小的公式为:(输入大小 - 卷积核大小)/ 滑动步长。
在卷积核计算过程,可以看出经过卷积后的大小变小了,那能不能经过卷积计算且大小不变呢?这里,引出了 padding 的另一个作用,保证输入和输出的大小一致。比方输出的 5*5 加 padding,那么四周就被0围绕了,这时的输入大小就变为7 * 7, 再经过 3 * 3的卷积后,按照上边推断出的公式,可以得出 最终的大小为 5 * 5,这时与输入大小保持了一致。
池化层夹在连续的卷积层中间, 用于压缩数据和参数的量,减小过拟合。
简而言之,如果输入是图像的话,那么池化层的最主要作用就是压缩图像。
池化层用的方法有Max pooling 和 average pooling,而实际用的较多的是Max pooling。下图演示一下Max pooling。
对于每个2 * 2的窗口选出最大的数作为输出矩阵的相应元素的值,比如输入矩阵第一个2 * 2窗口中最大的数是1,那么输出矩阵的第一个元素就是1,如此类推。
全连接层的部分就是将之前的结果展平之后接到最基本的神经网络了。
根据上边的介绍,可以得出,卷积核的通道数目和输入的图像的通道数目是保持一致的,而输出的通道数目是和卷积核数目是一致的。这样参数量可以得出,假设输入的通道为5,卷积核大小为 3 * 3 ,输出的通道数目为10,那么参数量为:3 * 3 * 5 * 10,其中3 * 3 * 5是1个卷积核的参数个数,3 * 3 * 5 * 10 是 10个卷积核的参数个数,也就总共的参数个数。
在卷积中,滑动一次会经过多次的点乘,只经过一次的加法,所以加法的计算量可以忽略不计。其中,滑动一次会的点乘次数和卷积核的大小有关系,比方 3 * 3的卷积,则是经过了 3 * 3 = 9次点积。一共滑动多少次和输出大小有关系,比方 输出的结果也为 3 * 3,那么就是滑动了9次。这样就可以得出输入和输出单通道时计算量 3 * 3 * 3 * 3 = 81。那么对于输入多通道时,卷积核也需要增加相应的通道数目,此时应该在刚才的计算量上乘以通道的数目,得出输入多通道的一个卷积核的计算量。这样,对于输出多通道,总的计算量则是乘以多个卷积核即可。
视觉-卷积层基础知识
1. 卷积层的组成和每层的作用
卷积神经网络(CNN)主要由卷积层、激活函数、池化层、全连接层组成。
卷积层(Conv):使用卷积核进行特征提取和特征映射
激活函数(Activation):由于卷积也是一种线性运算,因此需要增加非线性映射
池化层(Pool):对输入的特征图进行压缩,一方面使特征图变小,简化网络计算复杂度;一方面进行特征压缩,提取主要特征
全连接层(FC):连接所有的特征,将输出值送给分类器
2. 为什么使用 卷积核:
1x1卷积的主要目的是为了减少维度,还用于修正线性激活(ReLU)。
加深了网络的层次,同时也增强了网络的非线性。
3. Max Pooling vs. Average Pooling
通常来讲,max-pooling的效果更好,虽然max-pooling和average-pooling都对数据做了下采样,但是max-pooling感觉更像是做了特征选择,选出了分类辨识度更好的特征,提供了非线性。 pooling的主要作用一方面是去掉冗余信息,一方面要保留feature map的特征信息,在分类问题中,我们需要知道的是这张图像有什么object,而不大关心这个object位置在哪,在这种情况下显然max pooling比average pooling更合适。在网络比较深的地方,特征已经稀疏了,从一块区域里选出最大的,比起这片区域的平均值来,更能把稀疏的特征传递下去。
average-pooling更强调对整体特征信息进行一层下采样,在减少参数维度的贡献上更大一点,更多的体现在信息的完整传递这个维度上,在一个很大很有代表性的模型中,比如说DenseNet中的模块之间的连接大多采用average-pooling,在减少维度的同时,更有利信息传递到下一个模块进行特征提取。average-pooling在全局平均池化操作中应用也比较广,在ResNet和Inception结构中最后一层都使用了平均池化。有的时候在模型接近分类器的末端使用全局平均池化还可以代替Flatten操作,使输入数据变成一位向量。
4. 为什么要使用许多小卷积核(如3x 3 )而不是几个大卷积核?
这在VGGNet的原始论文中得到了很好的解释。原因有二:首先,您可以使用几个较小的核而不是几个较大的核来获得相同的感受野并捕获更多的空间上下文,但是使用较小的内核时,您使用的参数和计算量较少。其次,因为使用更小的核,您将使用更多的滤波器,您将能够使用更多的激活函数,从而使您的CNN学习到更具区分性的映射函数。
5. 什么是数据正则化/归一化(normalization)?为什么我们需要它?
数据归一化是非常重要的预处理步骤,用于重新缩放输入的数值以适应特定的范围,从而确保在反向传播期间更好地收敛。一般来说采取的方法都是减去每个数据点的平均值并除以其标准偏差。如果我们不这样做,那么一些特征(那些具有高幅值的特征)将在cost函数中得到更大的加权(如果较高幅值的特征改变1 %,则该改变相当大,但是对于较小的特征,该改变相当小)。数据归一化使所有特征的权重相等。
一文看懂卷积神经网络-CNN(基本原理+独特价值+实际应用)
在 CNN 出现之前,图像对于人工智能来说是一个难题,有2个原因:
图像需要处理的数据量太大,导致成本很高,效率很低
图像在数字化的过程中很难保留原有的特征,导致图像处理的准确率不高
下面就详细说明一下这2个问题:
图像是由像素构成的,每个像素又是由颜色构成的。
现在随随便便一张图片都是 1000×1000 像素以上的, 每个像素都有RGB 3个参数来表示颜色信息。
假如我们处理一张 1000×1000 像素的图片,我们就需要处理3百万个参数!
1000×1000×3=3,000,000
这么大量的数据处理起来是非常消耗资源的,而且这只是一张不算太大的图片!
卷积神经网络 – CNN 解决的第一个问题就是「将复杂问题简化」,把大量参数降维成少量参数,再做处理。
更重要的是:我们在大部分场景下,降维并不会影响结果。比如1000像素的图片缩小成200像素,并不影响肉眼认出来图片中是一只猫还是一只狗,机器也是如此。
图片数字化的传统方式我们简化一下,就类似下图的过程:
假如有圆形是1,没有圆形是0,那么圆形的位置不同就会产生完全不同的数据表达。但是从视觉的角度来看, 图像的内容(本质)并没有发生变化,只是位置发生了变化 。
所以当我们移动图像中的物体,用传统的方式的得出来的参数会差异很大!这是不符合图像处理的要求的。
而 CNN 解决了这个问题,他用类似视觉的方式保留了图像的特征,当图像做翻转,旋转或者变换位置时,它也能有效的识别出来是类似的图像。
那么卷积神经网络是如何实现的呢?在我们了解 CNN 原理之前,先来看看人类的视觉原理是什么?
深度学习的许多研究成果,离不开对大脑认知原理的研究,尤其是视觉原理的研究。
1981 年的诺贝尔医学奖,颁发给了 David Hubel(出生于加拿大的美国神经生物学家) 和TorstenWiesel,以及 Roger Sperry。前两位的主要贡献,是“ 发现了视觉系统的信息处理 ”,可视皮层是分级的。
人类的视觉原理如下:从原始信号摄入开始(瞳孔摄入像素 Pixels),接着做初步处理(大脑皮层某些细胞发现边缘和方向),然后抽象(大脑判定,眼前的物体的形状,是圆形的),然后进一步抽象(大脑进一步判定该物体是只气球)。下面是人脑进行人脸识别的一个示例:
对于不同的物体,人类视觉也是通过这样逐层分级,来进行认知的:
我们可以看到,在最底层特征基本上是类似的,就是各种边缘,越往上,越能提取出此类物体的一些特征(轮子、眼睛、躯干等),到最上层,不同的高级特征最终组合成相应的图像,从而能够让人类准确的区分不同的物体。
那么我们可以很自然的想到:可以不可以模仿人类大脑的这个特点,构造多层的神经网络,较低层的识别初级的图像特征,若干底层特征组成更上一层特征,最终通过多个层级的组合,最终在顶层做出分类呢?
答案是肯定的,这也是许多深度学习算法(包括CNN)的灵感来源。
典型的 CNN 由3个部分构成:
卷积层
池化层
全连接层
如果简单来描述的话:
卷积层负责提取图像中的局部特征;池化层用来大幅降低参数量级(降维);全连接层类似传统神经网络的部分,用来输出想要的结果。
下面的原理解释为了通俗易懂,忽略了很多技术细节,如果大家对详细的原理感兴趣,可以看这个视频《 卷积神经网络基础 》。
卷积层的运算过程如下图,用一个卷积核扫完整张图片:
这个过程我们可以理解为我们使用一个过滤器(卷积核)来过滤图像的各个小区域,从而得到这些小区域的特征值。
在具体应用中,往往有多个卷积核,可以认为,每个卷积核代表了一种图像模式,如果某个图像块与此卷积核卷积出的值大,则认为此图像块十分接近于此卷积核。如果我们设计了6个卷积核,可以理解:我们认为这个图像上有6种底层纹理模式,也就是我们用6中基础模式就能描绘出一副图像。以下就是25种不同的卷积核的示例:
总结:卷积层的通过卷积核的过滤提取出图片中局部的特征,跟上面提到的人类视觉的特征提取类似。
池化层简单说就是下采样,他可以大大降低数据的维度。其过程如下:
上图中,我们可以看到,原始图片是20×20的,我们对其进行下采样,采样窗口为10×10,最终将其下采样成为一个2×2大小的特征图。
之所以这么做的原因,是因为即使做完了卷积,图像仍然很大(因为卷积核比较小),所以为了降低数据维度,就进行下采样。
总结:池化层相比卷积层可以更有效的降低数据维度,这么做不但可以大大减少运算量,还可以有效的避免过拟合。
这个部分就是最后一步了,经过卷积层和池化层处理过的数据输入到全连接层,得到最终想要的结果。
经过卷积层和池化层降维过的数据,全连接层才能”跑得动”,不然数据量太大,计算成本高,效率低下。
典型的 CNN 并非只是上面提到的3层结构,而是多层结构,例如 LeNet-5 的结构就如下图所示:
卷积层 – 池化层- 卷积层 – 池化层 – 卷积层 – 全连接层
在了解了 CNN 的基本原理后,我们重点说一下 CNN 的实际应用有哪些。
卷积神经网络 – CNN 很擅长处理图像。而视频是图像的叠加,所以同样擅长处理视频内容。下面给大家列一些比较成熟的应用�:
图像分类、检索
图像分类是比较基础的应用,他可以节省大量的人工成本,将图像进行有效的分类。对于一些特定领域的图片,分类的准确率可以达到 95%+,已经算是一个可用性很高的应用了。
典型场景:图像搜索…
目标定位检测
可以在图像中定位目标,并确定目标的位置及大小。
典型场景:自动驾驶、安防、医疗…
目标分割
简单理解就是一个像素级的分类。
他可以对前景和背景进行像素级的区分、再高级一点还可以识别出目标并且对目标进行分类。
典型场景:美图秀秀、视频后期加工、图像生成…
人脸识别
人脸识别已经是一个非常普及的应用了,在很多领域都有广泛的应用。
典型场景:安防、金融、生活…
骨骼识别
骨骼识别是可以识别身体的关键骨骼,以及追踪骨骼的动作。
典型场景:安防、电影、图像视频生成、游戏…
今天我们介绍了 CNN 的价值、基本原理和应用场景,简单总结如下:
CNN 的价值:
能够将大数据量的图片有效的降维成小数据量(并不影响结果)
能够保留图片的特征,类似人类的视觉原理
CNN 的基本原理:
卷积层 – 主要作用是保留图片的特征
池化层 – 主要作用是把数据降维,可以有效的避免过拟合
全连接层 – 根据不同任务输出我们想要的结果
CNN 的实际应用:
图片分类、检索
目标定位检测
目标分割
人脸识别
骨骼识别
本文首发在 easyAI - 人工智能知识库
《 一文看懂卷积神经网络-CNN(基本原理+独特价值+实际应用) 》
GCN图卷积网络入门详解
在这篇文章中,我们将仔细研究一个名为GCN的著名图神经网络。首先,我们先直观的了解一下它的工作原理,然后再深入了解它背后的数学原理。
字幕组双语原文: 【GCN】图卷积网络(GCN)入门详解
英语原文: Graph Convolutional Networks (GCN)
翻译: 听风1996 、 大表哥
许多问题的本质上都是图。在我们的世界里,我们看到很多数据都是图,比如分子、社交网络、论文引用网络。
图的例子。(图片来自)
在图中,我们有节点特征(代表节点的数据)和图的结构(表示节点如何连接)。
对于节点来说,我们可以很容易地得到每个节点的数据。但是当涉及到图的结构时,要从中提取有用的信息就不是一件容易的事情了。例如,如果2个节点彼此距离很近,我们是否应该将它们与其他对节点区别对待呢?高低度节点又该如何处理呢?其实,对于每一项具体的工作,仅仅是特征工程,即把图结构转换为我们的特征,就会消耗大量的时间和精力。
图上的特征工程。(图片来自)
如果能以某种方式同时得到图的节点特征和结构信息作为输入,让机器自己去判断哪些信息是有用的,那就更好了。
这也是为什么我们需要图表示学习的原因。
我们希望图能够自己学习 "特征工程"。(图片来自)
论文 :基于图神经网络的半监督分类 (2017)
GCN是一种卷积神经网络,它可以直接在图上工作,并利用图的结构信息。
它解决的是对图(如引文网络)中的节点(如文档)进行分类的问题,其中仅有一小部分节点有标签(半监督学习)。
在Graphs上进行半监督学习的例子。有些节点没有标签(未知节点)。
就像"卷积"这个名字所指代的那样,这个想法来自于图像,之后引进到图(Graphs)中。然而,当图像有固定的结构时,图(Graphs)就复杂得多。
从图像到图形的卷积思想。 (图片来自)
GCN的基本思路:对于每个节点,我们从它的所有邻居节点处获取其特征信息,当然也包括它自身的特征。假设我们使用average()函数。我们将对所有的节点进行同样的操作。最后,我们将这些计算得到的平均值输入到神经网络中。
在下图中,我们有一个引文网络的简单实例。其中每个节点代表一篇研究论文,同时边代表的是引文。我们在这里有一个预处理步骤。在这里我们不使用原始论文作为特征,而是将论文转换成向量(通过使用NLP嵌入,例如tf-idf)。NLP嵌入,例如TF-IDF)。
让我们考虑下绿色节点。首先,我们得到它的所有邻居的特征值,包括自身节点,接着取平均值。最后通过神经网络返回一个结果向量并将此作为最终结果。
GCN的主要思想。我们以绿色节点为例。首先,我们取其所有邻居节点的平均值,包括自身节点。然后,将平均值通过神经网络。请注意,在GCN中,我们仅仅使用一个全连接层。在这个例子中,我们得到2维向量作为输出(全连接层的2个节点)。
在实际操作中,我们可以使用比average函数更复杂的聚合函数。我们还可以将更多的层叠加在一起,以获得更深的GCN。其中每一层的输出会被视为下一层的输入。
2层GCN的例子:第一层的输出是第二层的输入。同样,注意GCN中的神经网络仅仅是一个全连接层(图片来自)。
让我们认真从数学角度看看它到底是如何起作用的。
首先,我们需要一些注解
我们考虑图G,如下图所示。
从图G中,我们有一个邻接矩阵A和一个度矩阵D。同时我们也有特征矩阵X。
那么我们怎样才能从邻居节点处得到每一个节点的特征值呢?解决方法就在于A和X的相乘。
看看邻接矩阵的第一行,我们看到节点A与节点E之间有连接,得到的矩阵第一行就是与A相连接的E节点的特征向量(如下图)。同理,得到的矩阵的第二行是D和E的特征向量之和,通过这个方法,我们可以得到所有邻居节点的向量之和。
计算 "和向量矩阵 "AX的第一行。
在问题(1)中,我们可以通过在A中增加一个单位矩阵I来解决,得到一个新的邻接矩阵Ã。
取lambda=1(使得节点本身的特征和邻居一样重要),我们就有Ã=A+I,注意,我们可以把lambda当做一个可训练的参数,但现在只要把lambda赋值为1就可以了,即使在论文中,lambda也只是简单的赋值为1。
通过给每个节点增加一个自循环,我们得到新的邻接矩阵
对于问题(2): 对于矩阵缩放,我们通常将矩阵乘以对角线矩阵。在当前的情况下,我们要取聚合特征的平均值,或者从数学角度上说,要根据节点度数对聚合向量矩阵ÃX进行缩放。直觉告诉我们这里用来缩放的对角矩阵是和度矩阵D̃有关的东西(为什么是D̃,而不是D?因为我们考虑的是新邻接矩阵Ã 的度矩阵D̃,而不再是A了)。
现在的问题变成了我们要如何对和向量进行缩放/归一化?换句话说:
我们如何将邻居的信息传递给特定节点?我们从我们的老朋友average开始。在这种情况下,D̃的逆矩阵(即,D̃^{-1})就会用起作用。基本上,D̃的逆矩阵中的每个元素都是对角矩阵D中相应项的倒数。
例如,节点A的度数为2,所以我们将节点A的聚合向量乘以1/2,而节点E的度数为5,我们应该将E的聚合向量乘以1/5,以此类推。
因此,通过D̃取反和X的乘法,我们可以取所有邻居节点的特征向量(包括自身节点)的平均值。
到目前为止一切都很好。但是你可能会问加权平均()怎么样?直觉上,如果我们对高低度的节点区别对待,应该会更好。
但我们只是按行缩放,但忽略了对应的列(虚线框)。
为列增加一个新的缩放器。
新的缩放方法给我们提供了 "加权 "的平均值。我们在这里做的是给低度的节点加更多的权重,以减少高度节点的影响。这个加权平均的想法是,我们假设低度节点会对邻居节点产生更大的影响,而高度节点则会产生较低的影响,因为它们的影响力分散在太多的邻居节点上。
在节点B处聚合邻接节点特征时,我们为节点B本身分配最大的权重(度数为3),为节点E分配最小的权重(度数为5)。
因为我们归一化了两次,所以将"-1 "改为"-1/2"
例如,我们有一个多分类问题,有10个类,F 被设置为10。在第2层有了10个维度的向量后,我们将这些向量通过一个softmax函数进行预测。
Loss函数的计算方法很简单,就是通过对所有有标签的例子的交叉熵误差来计算,其中Y_{l}是有标签的节点的集合。
层数是指节点特征能够传输的最远距离。例如,在1层的GCN中,每个节点只能从其邻居那里获得信息。每个节点收集信息的过程是独立进行的,对所有节点来说都是在同一时间进行的。
当在第一层的基础上再叠加一层时,我们重复收集信息的过程,但这一次,邻居节点已经有了自己的邻居的信息(来自上一步)。这使得层数成为每个节点可以走的最大跳步。所以,这取决于我们认为一个节点应该从网络中获取多远的信息,我们可以为#layers设置一个合适的数字。但同样,在图中,通常我们不希望走得太远。设置为6-7跳,我们就几乎可以得到整个图,但是这就使得聚合的意义不大。
例: 收集目标节点 i 的两层信息的过程
在论文中,作者还分别对浅层和深层的GCN进行了一些实验。在下图中,我们可以看到,使用2层或3层的模型可以得到最好的结果。此外,对于深层的GCN(超过7层),反而往往得到不好的性能(虚线蓝色)。一种解决方案是借助隐藏层之间的残余连接(紫色线)。
不同层数#的性能。图片来自论文
论文作者的说明
该框架目前仅限于无向图(加权或不加权)。但是,可以通过将原始有向图表示为一个无向的两端图,并增加代表原始图中边的节点,来处理有向边和边特征。
对于GCN,我们似乎可以同时利用节点特征和图的结构。然而,如果图中的边有不同的类型呢?我们是否应该对每种关系进行不同的处理?在这种情况下如何聚合邻居节点?最近有哪些先进的方法?
在图专题的下一篇文章中,我们将研究一些更复杂的方法。
如何处理边的不同关系(兄弟、朋友、......)?
***隐藏网址***
***隐藏网址***
***隐藏网址***
***隐藏网址***
***隐藏网址***
雷锋字幕组是一个由AI爱好者组成的翻译团队,汇聚五五多位志愿者的力量,分享最新的海外AI资讯,交流关于人工智能技术领域的行业转变与技术创新的见解。
团队成员有大数据专家,算法工程师,图像处理工程师,产品经理,产品运营,IT咨询人,在校师生;志愿者们来自IBM,AVL,Adobe,阿里,百度等知名企业,北大,清华,港大,中科院,南卡罗莱纳大学,早稻田大学等海内外高校研究所。
如果,你也是位热爱分享的AI爱好者。欢迎与雷锋字幕组一起,学习新知,分享成长。
卷积神经网络的基本原理
卷积神经网络的基本原理如下:
卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一
卷积神经网络具有表征学习(representation learning)能力,能够按其阶层结构对输入信息进行平移不变分类(shift-invariant classification),因此也被称为“平移不变人工神经网络(Shift-Invariant Artificial Neural Networks, SIANN)”。
对卷积神经网络的研究始于二十世纪80至90年代,时间延迟网络和LeNet-5是最早出现的卷积神经网络;在二十一世纪后,随着深度学习理论的提出和数值计算设备的改进,卷积神经网络得到了快速发展,并被应用于计算机视觉、自然语言处理等领域。
卷积神经网络仿造生物的视知觉机制构建,可以进行监督学习和非监督学习,其隐含层内的卷积核参数共享和层间连接的稀疏性使得卷积神经网络能够以较小的计算量对格点化特征,例如像素和音频进行学习、有稳定的效果且对数据没有额外的特征工程要求。
卷积神经网络
1、二维互相关运算
二维互相关(cross-correlation)运算的输入是一个二维输入数组和一个二维核(kernel)数组,输出也是一个二维数组,其中核数组通常称为卷积核或过滤器(filter)。卷积核的尺寸通常小于输入数组,卷积核在输入数组上滑动,在每个位置上,卷积核与该位置处的输入子数组按元素相乘并求和,得到输出数组中相应位置的元素。图1展示了一个互相关运算的例子,阴影部分分别是输入的第一个计算区域、核数组以及对应的输出。
2、二维卷积层
卷积层得名于卷积运算,但卷积层中用到的并非卷积运算而是互相关运算。我们将核数组上下翻转、左右翻转,再与输入数组做互相关运算,这一过程就是卷积运算。由于卷积层的核数组是可学习的,所以使用互相关运算与使用卷积运算并无本质区别。
二维卷积层将输入和卷积核做互相关运算,并加上一个标量偏置来得到输出。卷积层的模型参数包括卷积核和标量偏置。
3、特征图与感受野
二维卷积层输出的二维数组可以看作是输入在空间维度(宽和高)上某一级的表征,也叫特征图(feature map)。影响元素x的前向计算的所有可能输入区域(可能大于输入的实际尺寸)叫做x的感受野(receptive field)。
以图1为例,输入中阴影部分的四个元素是输出中阴影部分元素的感受野。我们将图中形状为2×2的输出记为Y,将Y与另一个形状为2×2的核数组做互相关运算,输出单个元素z。那么,z在Y上的感受野包括Y的全部四个元素,在输入上的感受野包括其中全部9个元素。可见,我们可以通过更深的卷积神经网络使特征图中单个元素的感受野变得更加广阔,从而捕捉输入上更大尺寸的特征。
4、填充和步幅
我们介绍卷积层的两个超参数,即填充和步幅,它们可以对给定形状的输入和卷积核改变输出形状。
4.1 填充(padding)
是指在输入高和宽的两侧填充元素(通常是0元素),图2里我们在原输入高和宽的两侧分别添加了值为0的元素。
如果原输入的高和宽是 和 ,卷积核的高和宽是 和 ,在高的两侧一共填充 行,在宽的两侧一共填充 列,则输出形状为:
)
我们在卷积神经网络中使用奇数高宽的核,比如3×3,5×5的卷积核,对于高度(或宽度)为大小为2k+1的核,令步幅为1,在高(或宽)两侧选择大小为k的填充,便可保持输入与输出尺寸相同。
4.2 步幅(stride)
在互相关运算中,卷积核在输入数组上滑动,每次滑动的行数与列数即是步幅(stride)。此前我们使用的步幅都是1,图3展示了在高上步幅为3、在宽上步幅为2的二维互相关运算。
一般来说,当高上步幅为 ,宽上步幅为 时,输出形状为:
如果 ,那么输出形状将简化为:
更进一步,如果输入的高和宽能分别被高和宽上的步幅整除,那么输出形状将是:(nh/sh)×(nw/sw)
当 时,我们称填充为p;当 时,我们称步幅为s。
5、多输入通道和多输出通道
之前的输入和输出都是二维数组,但真实数据的维度经常更高。例如,彩色图像在高和宽2个维度外还有RGB(红、绿、蓝)3个颜色通道。假设彩色图像的高和宽分别是h和w(像素),那么它可以表示为一个3×h×w的多维数组,我们将大小为3的这一维称为通道(channel)维。
5.1 多输入通道
卷积层的输入可以包含多个通道,图4展示了一个含2个输入通道的二维互相关计算的例子。
5.2 多输出通道
卷积层的输出也可以包含多个通道,设卷积核输入通道数和输出通道数分别为ci和co,高和宽分别为kh和kw。如果希望得到含多个通道的输出,我们可以为每个输出通道分别创建形状为ci×kh×kw的核数组,将它们在输出通道维上连结,卷积核的形状即co×ci×kh×kw。
对于输出通道的卷积核,我们提供这样一种理解,一个ci×kh×kw的核数组可以提取某种局部特征,但是输入可能具有相当丰富的特征,我们需要有多个这样的ci×kh×kw的核数组,不同的核数组提取的是不同的特征。
5.3 1x1卷积层
最后讨论形状为1×1的卷积核,我们通常称这样的卷积运算为1×1卷积,称包含这种卷积核的卷积层为1×1卷积层。图5展示了使用输入通道数为3、输出通道数为2的1×1卷积核的互相关计算。
1×1卷积核可在不改变高宽的情况下,调整通道数。1×1卷积核不识别高和宽维度上相邻元素构成的模式,其主要计算发生在通道维上。假设我们将通道维当作特征维,将高和宽维度上的元素当成数据样本,那么1×1卷积层的作用与全连接层等价。
6、卷积层与全连接层的对比
二维卷积层经常用于处理图像,与此前的全连接层相比,它主要有两个优势:
一是全连接层把图像展平成一个向量,在输入图像上相邻的元素可能因为展平操作不再相邻,网络难以捕捉局部信息。而卷积层的设计,天然地具有提取局部信息的能力。
二是卷积层的参数量更少。不考虑偏置的情况下,一个形状为(ci,co,h,w)的卷积核的参数量是ci×co×h×w,与输入图像的宽高无关。假如一个卷积层的输入和输出形状分别是(c1,h1,w1)和(c2,h3,w2),如果要用全连接层进行连接,参数数量就是c1×c2×h1×w1×h3×w2。使用卷积层可以以较少的参数数量来处理更大的图像。
X=torch.rand(4,2,3,5)
print(X.shape)
conv2d=nn.Conv2d(in_channels=2,out_channels=3,kernel_size=(3,5),stride=1,padding=(1,2))
Y=conv2d(X)
print(’Y.shape: ’,Y.shape)
print(’weight.shape: ’,conv2d.weight.shape)
print(’bias.shape: ’,conv2d.bias.shape)
输出:
torch.Size()
Y.shape: torch.Size()
weight.shape: torch.Size()
bias.shape: torch.Size()
7、池化
7.1 二维池化层
池化层主要用于缓解卷积层对位置的过度敏感性。同卷积层一样,池化层每次对输入数据的一个固定形状窗口(又称池化窗口)中的元素计算输出,池化层直接计算池化窗口内元素的最大值或者平均值,该运算也分别叫做最大池化或平均池化。图6展示了池化窗口形状为2×2的最大池化。
二维平均池化的工作原理与二维最大池化类似,但将最大运算符替换成平均运算符。池化窗口形状为p×q的池化层称为p×q池化层,其中的池化运算叫作p×q池化。
池化层也可以在输入的高和宽两侧填充并调整窗口的移动步幅来改变输出形状。池化层填充和步幅与卷积层填充和步幅的工作机制一样。
在处理多通道输入数据时,池化层对每个输入通道分别池化,但不会像卷积层那样将各通道的结果按通道相加。这意味着池化层的输出通道数与输入通道数相等。
CNN网络中另外一个不可导的环节就是Pooling池化操作,因为Pooling操作使得feature map的尺寸变化,假如做2×2的池化,假设那么第l+1层的feature map有16个梯度,那么第l层就会有64个梯度,这使得梯度无法对位的进行传播下去。其实解决这个问题的思想也很简单,就是把1个像素的梯度传递给4个像素,但是需要保证传递的loss(或者梯度)总和不变。根据这条原则,mean pooling和max pooling的反向传播也是不同的。
7.2 mean pooling
mean pooling的前向传播就是把一个patch中的值求取平均来做pooling,那么反向传播的过程也就是把某个元素的梯度等分为n份分配给前一层,这样就保证池化前后的梯度(残差)之和保持不变,还是比较理解的,图示如下:
mean pooling比较容易让人理解错的地方就是会简单的认为直接把梯度复制N遍之后直接反向传播回去,但是这样会造成loss之和变为原来的N倍,网络是会产生梯度爆炸的。
7.3 max pooling
max pooling也要满足梯度之和不变的原则,max pooling的前向传播是把patch中最大的值传递给后一层,而其他像素的值直接被舍弃掉。那么反向传播也就是把梯度直接传给前一层某一个像素,而其他像素不接受梯度,也就是为0。所以max pooling操作和mean pooling操作不同点在于需要记录下池化操作时到底哪个像素的值是最大,也就是max id。
源码中有一个max_idx_的变量,这个变量就是记录最大值所在位置的,因为在反向传播中要用到,那么假设前向传播和反向传播的过程就如下图所示。
7.4 Pytorch 实现池化层
我们使用Pytorch中的nn.MaxPool2d实现最大池化层,关注以下构造函数参数:
kernel_size – the size of the window to take a max over
stride – the stride of the window. Default value is kernel_size
padding – implicit zero padding to be added on both sides
forward函数的参数为一个四维张量,形状为 ,返回值也是一个四维张量,形状为 ,其中N是批量大小,C,H,W分别表示通道数、高度、宽度。
X=torch.arange(32,dtype=torch.float32).view(1,2,4,4)
pool2d=nn.MaxPool2d(kernel_size=3,padding=1,stride=(2,1))
Y=pool2d(X)
print(X)
print(Y)
练习
1、假如你用全连接层处理一张256 \times 256256×256的彩色(RGB)图像,输出包含1000个神经元,在使用偏置的情况下,参数数量是:
答:图像展平后长度为3×256×256,权重参数和偏置参数的数量是3× 256× 256 × 1000 + 1000 =196609000。
2、假如你用全连接层处理一张256×256的彩色(RGB)图像,卷积核的高宽是3×3,输出包含10个通道,在使用偏置的情况下,这个卷积层共有多少个参数:
答:输入通道数是3,输出通道数是10,所以参数数量是10×3×3×3+10=280。
3、conv2d = nn.Conv2d(in_channels=3, out_channels=4, kernel_size=3, padding=2),输入一张形状为3×100×100的图像,输出的形状为:
答:输出通道数是4,上下两侧总共填充4行,卷积核高度是3,所以输出的高度是104 - 3 + 1=102104−3+1=102,宽度同理可得。
4、关于卷积层,以下哪种说法是错误的:
A.1×1卷积可以看作是通道维上的全连接
B.某个二维卷积层用于处理形状为3×100×100的输入,则该卷积层无法处理形状为3×256×256的输入
C.卷积层通过填充、步幅、输入通道数、输出通道数等调节输出的形状
D .两个连续的3×3卷积核的感受野与一个5×5卷积核的感受野相同
答:选B,对于高宽维度,只要输入的高宽(填充后的)大于或等于卷积核的高宽即可进行计算。
the first layer is a 3 × 3 convolution, the second is a fully connected layer on top of the 3 × 3 output grid of the first layer (see Figure 1). Sliding this small network over the input activation grid boils down to replacing the 5 × 5 convolution with two layers of 3 × 3 convolution.
我们假设图片是5*5的
我们使用5*5的卷积核对其卷积,步长为1,得到的结果是:(5-5)/1+1=1
然后我们使用2个卷积核为3*3的,这里的两个是指2层:
第一层3*3:
得到的结果是(5-3)/1+1=3
第二层3*3:
得到的结果是(3-3)/1+1=1
所以我们的最终得到结果感受野大小和用5*5的卷积核得到的结果大小是一样的!!!
5、关于池化层,以下哪种说法是错误的:
A.池化层不参与反向传播
B.池化层没有模型参数
C.池化层通常会减小特征图的高和宽
D.池化层的输入和输出具有相同的通道数
答:A
选项1:错误,池化层有参与模型的正向计算,同样也会参与反向传播
选项2:正确,池化层直接对窗口内的元素求最大值或平均值,并没有模型参数参与计算
选项3:正确
选项4:正确
参考文献:
***隐藏网址***
***隐藏网址***
***隐藏网址***
***隐藏网址***
卷积神经网络(CNN)基础
在七月初七情人节,牛郎织女相见的一天,我终于学习了CNN(来自CS231n),感觉感触良多,所以赶快记下来,别忘了,最后祝大家情人节快乐5555555.正题开始!
CNN一共有卷积层(CONV)、ReLU层(ReLU)、池化层(Pooling)、全连接层(FC(Full Connection))下面是各个层的详细解释。
卷积,尤其是图像的卷积,需要一个滤波器,用滤波器对整个图像进行遍历,我们假设有一个32*32*3的原始图像A,滤波器的尺寸为5*5*3,用w表示,滤波器中的数据就是CNN的参数的一部分,那么在使用滤波器w对A进行滤波的话,可以用下面的式子表示:
其中x为原始图像的5*5*3的一部分,b是偏置项置为1。在对A进行滤波之后,产生的是一个28*28*1的数据。那么假设我们存在6个滤波器,这六个滤波器之间彼此是独立的,也就是他们内部的数据是不同的且没有相关性的。可以理解为一个滤波器查找整幅图像的垂直边缘,一个查找水平边缘,一个查找红色,一个查找黑色这样。那么我就可以产生6个28*28*1的数据,将它们组合到一起就可以产生28*28*6的数据,这就是卷积层主要做的工作。
CNN可以看作一系列的卷积层和ReLU层对原始数据结构进行处理的神经网络,处理的过程可以用下面这幅图表示
特别要注意的是滤波器的深度一定要与上一层传来的数据的深度相同,就像上图的第二个卷积层在处理传来的28*28*6的数据时要使用5*5*6的滤波器.
滤波器在图像上不断移动对图像滤波,自然存在步长的问题,在上面我们举的例子都是步长为1的情况,如果步长为3的话,32*32*3的图像经过5*5*3的滤波器卷积得到的大小是(32-5)/3+1=10, 注:步长不能为2因为(32-5)/2+1=14.5是小数。
所以当图像大小是N,滤波器尺寸为F时,步长S,那么卷积后大小为(N-F)/S+1
我们从上面的图中可以看到图像的长和宽在逐渐的减小,在经过超过5层之后极可能只剩下1*1的空间尺度,这样是十分不好的,而且也不利于我们接下来的计算,所以我们想让卷积层处理完之后图像在空间尺度上大小不变,所以我们引入了pad the border的操作。pad其实就是在图像周围补0,扩大图像的尺寸,使得卷积后图像大小不变。在CNN中,主要存在4个超参数,滤波器个数K,滤波器大小F,pad大小P和步长S,其中P是整数,当P=1时,对原始数据的操作如图所示:
那么在pad操作后卷积后的图像大小为:(N-F+2*P)/S+1
而要想让卷积层处理后图像空间尺度不变,P的值可以设为P=(F-1)/2
卷积层输入W 1 *H 1 *D 1 大小的数据,输出W 2 *H 2 *D 2 的数据,此时的卷积层共有4个超参数:
K:滤波器个数
P:pad属性值
S:滤波器每次移动的步长
F:滤波器尺寸
此时输出的大小可以用输入和超参计算得到:
W 2 =(W 1 -F+2P)/S+1
H 2 =(H 1 -F+2P)/S+1
D 2 =D 1
1*1的滤波器也是有意义的,它在深度方向做卷积,例如1*1*64的滤波器对56*56*64的数据卷积得到56*56的数据
F通常是奇数,这样可以综合考虑上下左右四个方向的数据。
卷积层从神经元的角度看待可以有两个性质: 参数共享和局域连接 。对待一个滤波器,例如5*5*3的一个滤波器,对32*32*3的数据卷积得到28*28的数据,可以看作存在28*28个神经元,每个对原图像5*5*3的区域进行计算,这28*28个神经元由于使用同一个滤波器,所以参数相同,我们称这一特性为 参数共享 。
针对不同的滤波器,我们可以看到他们会看到同一区域的图像,相当于在深度方向存在多个神经元,他们看着相同区域叫做 局域连接
参数共享减少了参数的数量,防止了过拟合
局域连接为查找不同特征更丰富的表现图像提供了可能。
卷积就像是对原图像的另一种表达。
激活函数,对于每一个维度经过ReLU函数输出即可。不改变数据的空间尺度。
通过pad操作,输出图像在控件上并没有变化,但是深度发生了变化,越来越庞大的数据给计算带来了困难,也出现了冗余的特征,所以需要进行池化操作,池化不改变深度,只改变长宽,主要有最大值和均值两种方法,一般的池化滤波器大小F为2步长为2,对于最大值池化可以用下面的图像清晰的表示:
卷积层输入W 1 *H 1 *D 1 大小的数据,输出W 2 *H 2 *D 2 的数据,此时的卷积层共有2个超参数:
S:滤波器每次移动的步长
F:滤波器尺寸
此时输出的大小可以用输入和超参计算得到:
W 2 =(W 1 -F)/S+1
H 2 =(H 1 -F)/S+1
D 2 =D 1
将最后一层(CONV、ReLU或Pool)处理后的数据输入全连接层,对于W 2 *H 2 *D 2 数据,我们将其展成1*1*W 2 *H 2 *D 2 大小的数据,输入层共有W 2 *H 2 *D 2 个神经元,最后根据问题确定输出层的规模,输出层可以用softmax表示。也就是说,全连接层就是一个常见的BP神经网络。而这个网络也是参数最多的部分,是接下来想要去掉的部分。完整的神经网络可以用下面的图表示:
*M-(FC-RELU)*K,SoftMax
1.更小的滤波器与更深的网络
2.只有CONV层而去掉池化与全链接
最早的CNN,用于识别邮编,结构为:
CONV-POOL-CONV-POOL-CONV-FC
滤波器大小5*5,步长为1,池化层2*2,步长为2
2012年由于GPU技术所限,原始AlexNet为两个GPU分开计算,这里介绍合起来的结构。
输入图像为227*227*3
1.首次使用ReLU
2.使用Norm layers,现在已经抛弃,因为效果不大
3.数据经过预处理(例如大小变化,颜色变化等)
4.失活比率0.5
5.batch size 128
6.SGD Momentum 参数0.9(SGD和Momentum见我的其他文章)
7.学习速率 0.01,准确率不在提升时减少10倍,1-2次后达到收敛
8.L2权重减少0.0005
9.错误率15.4%
改进自AlexNet,主要改变:
1.CONV1的滤波器从11*11步长S=4改为7*7步长为2.
2.CONV3,4,5滤波器数量有384,384,256改为512,1024,512(滤波器数量为2的n次幂有利于计算机计算可以提高效率)
错误率:14.8%后继续改进至11.2%
当前最好的最易用的CNN网络,所有卷积层滤波器的大小均为3*3,步长为1,pad=1,池化层为2*2的最大值池化,S=2。
主要参数来自全连接层,这也是想要去掉FC的原因。
具有高度的统一性和线性的组合,易于理解,十分方便有VGG-16,VGG-19等多种结构。
错误率7.3%
完全移除FC层,参数只有500万,使用Inception模块(不太理解,有时间继续看)
准确率6.67%
准确率3.6%
拥有极深的网络结构,且越深准确率越高。是传统CNN不具备的特点,传统CNN并非越深越准确。需要训练时间较长但是快于VGG
1.每个卷积层使用Batch Normalization
2.Xavier/2初始化
3.SGD+Momentum(0.9)
4.Learning rate:0.1,准确率不变减小10倍(因为Batch Normalization所以比AlexNet大)
5.mini-batch size 256
6.Weight decay of 0.00001
7.不适用失活(因为Batch Normalization)
具体的梯度过程学完ResNet再说吧。
卷积神经网络原理
卷积神经网络是一种前馈型神经网络, 受生物自然视觉认知机制启发而来的. 现在, CNN 已经成为众多科学领域的研究热点之一, 特别是在模式分类领域, 由于该网络避免了对图像的复杂前期预处理, 可以直接输入原始图像, 因而得到了更为广泛的应用. 可应用于图像分类, 目标识别, 目标检测, 语义分割等等.可用于图像分类的卷积神经网络的基本结构.
1. 定义
卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一 。卷积神经网络具有表征学习(representation learning)能力,能够按其阶层结构对输入信息进行平移不变分类(shift-invariant classification),因此也被称为“平移不变人工神经网络(Shift-Invariant Artificial Neural Networks, SIANN)” 。
2. 特点
与之前介绍的神经网络相比,传统神经网络只有线性连接,而CNN包括**卷积(convolution)**操作、**汇合(pooling)操作和非线性激活函数映射(即线性连接)**等等。
3. 应用与典型网络
经典的CNN网络:
Alex-Net
VGG-Nets
Resnet
常用应用:
深度学习在计算机图像识别上的应用非常成功。利用深度学习,我们能够对图片进行高精度识别,实现这一功能的,主要依靠神经网络中的一种分支,名为卷积网络
卷积神经网络通俗理解
卷积神经网络通俗理解如下:
卷积神经网络(CNN)-结构
① CNN结构一般包含这几个层:
输入层:用于数据的输入
卷积层:使用卷积核进行特征提取和特征映射
激励层:由于卷积也是一种线性运算,因此需要增加非线性映射
池化层:进行下采样,对特征图稀疏处理,减少数据运算量。
全连接层:通常在CNN的尾部进行重新拟合,减少特征信息的损失
输出层:用于输出结果
归一化层(Batch Normalization):在CNN中对特征的归一化
切分层:对某些(图片)数据的进行分区域的单独学习
融合层:对独立进行特征学习的分支进行融合
请点击输入图片描述
感受视野
local receptive fields(感受视野)
shared weights(共享权值)
② 中间还可以使用一些其他的功能层:
卷积神经网络(CNN)-输入层
① CNN的输入层的输入格式保留了图片本身的结构。
② 对于黑白的 28×28的图片,CNN 的输入是一个 28×28 的二维神经元。
③ 对于 RGB 格式的 28×28 图片,CNN 的输入则是一个3×28×28 的三维神经元(RGB中的每一个颜色通道都有一个 28×28 的矩阵)
2)卷积神经网络(CNN)-卷积层
① 在卷积层中有几个重要的概念:
② 假设输入的是一个 28×28 的的二维神经元,我们定义 5×5 的 一个 local receptive fields(感受视野),即 隐藏层的神经元与输入层的 5×5 个神经元相连,这个 5*5 的区域就称之为 Local Receptive Fields,

更多文章:
笔记本没有外放声音是为什么(win764位旗舰版笔记本电脑只有戴耳机才有声音,拔下耳机外放就没声了是怎么回事具体怎么操作才能解决)
2026年11月3日 06:10
msn香港首页(Win10打开MSN主页后会跳转到其他网页怎么办Win10下MSN域名被绑架的解决方案)
2026年11月3日 05:50
电脑死机关不了机(笔记本电脑死机了,卡着不动了,怎么办关不了机!)
2026年11月3日 05:20
visio2016使用教程(visio2016怎么擦除一部分)
2026年11月3日 04:30
纯净版系统一键重装(电脑系统一键重装怎么弄|电脑系统一键安装步骤)
2026年11月3日 01:10






