龙空技术网

PyTorch(十)——卷积神经网络基础

爱生活的程序旺 467

前言:

而今朋友们对“卷积神经网络的算法编程”大致比较讲究,同学们都需要了解一些“卷积神经网络的算法编程”的相关内容。那么小编在网络上搜集了一些有关“卷积神经网络的算法编程””的相关知识,希望我们能喜欢,你们一起来了解一下吧!

卷积神经网络基本概念

卷积神经网络(CNN)是一类包含卷积计算且具有深度结构的前馈神经网络,是深度学习的代表算法之一,由一个或多个卷积层和顶端的全连接层(也可以使用1x1的卷积层作为最终的输出)组成。卷积神经网络具有表征学习能力,能按阶层结构对输入信息进行平移不变的分类,故而也称为“平移不变人工神经网络”。

手写识别的数据集MNIST中每个图像都是一个长宽均为28,通道数为1的单色图像,如果我们使用全连接的网络结构,即网络中的神经与相邻层上的每个神经元均连接,那就意味着我们的网络有28x28=784个神经元,隐藏层如果使用15个神经元,那么需要的参数个数(w和b)就有:28x28x15x10+15+10=117625个,这个数量级已经算是一个很恐怖的数量级了,即使只是一次反向传播计算的计算量都是巨大的,这还仅仅只是展示一个单色的28像素大小的图片,如果我们使用更大的像素,使用三通道的彩色图,其计算量之大可想而知。

基于全连接网络结构计算量太大的这种局限,卷积神经网络应运而生。传统网络需要大量的参数,那么这些参数是否会有重复呢?例如,我们在识别一个人时,往往只需要看到那个人的眼,鼻,口以及脸的基本特征。只需用局部特征就能做判断,而不需要全部的特征。 此外,我们还可以有效提取输入图像的平移不变特征,就好像我们看到了这是个眼睛,这个眼镜在左边还是在右边他都是眼睛,这就是平移不变性。我们通过卷积计算操作来提取图像局部特征,每一层都会计算出一些局部特征,这些局部特征再汇总到下一层,这样一层一层的传递下去,特征由小变大,最后在通过这些局部特征对图像进行处理,从而大大提高了计算效率,也提高了准确度。

卷积运算

在进行卷积运算时,我们会定义一个权重矩阵,也就是我们说的W(一般称作卷积核kernel),这个权重矩阵的大小一般为3x3或5x5的,在LeNet里面用到了比较大的7x7,但这种卷积核基本已经很少用了,因为根据经验验证,3x3或5x5是最佳的大小。

卷积运算案例

如上图所示,我们使用了一个3x3的权重矩阵作为卷积核,然后在输入矩阵上使用我们的权重矩阵进行滑动,每滑动一步,将所覆盖的值与矩阵对应的值相乘,并将结果求和并作为输出矩阵的一项,依次类推直到全部计算完成。

卷积核大小

卷积核大小是卷积运算中一个重要的参数,一般为3或5。

边界填充

上述卷积运算的计算结果最终得到的矩阵大小为3x3,而输入矩阵的大小为5x5,输出与输入的矩阵大小发生了改变。如果我们不想改变矩阵大小,那么在计算前可以对输入矩阵做一个填充,对输入矩阵的四周再添加一层,例如上述5x5的输入矩阵,在进行卷积运算前我们可以将其填充成7x7的矩阵,一般我们使用0进行填充。这样卷积运算最终的计算结果就会变成5x5的矩阵,和输入矩阵的大小保持一致。

步长

步长就是卷积运算时每次滑动的大小,上述运算中我们每次滑动1个距离,因此步长为1。当然我们也可以设置其他步长大小,例如设置步长为2,即每次滑动2个距离。

计算公式

假设输入矩阵的大小为n,卷积核大小为f,边界填充大小为p(四周填充一层为1),步长为s,输出矩阵的大小为r,那么r=(n-f+2p)/s+1。

卷积神经网络构成卷积层

卷积神经网络中每层卷积层都会设置多个核,每个核代表不同的特征,这些特征就是需要传递到下一层的输出,而训练的过程就是训练这些不同的核。

激活函数

卷积神经网络与普通神经网络类似,其操作也是线性的,因此需要使用激活函数进行激活。一般我们会使用ReLU作为卷积神经网络的激活函数。

池化层

池化层也叫做pooling层,是卷积神经网络中的重要组成部分。池化层通过减少卷积层之间的连接降低运算的复杂程度。池化层的操作有点类似合并,我们输入一个过滤器的大小,与卷积运算一样,也是一步一步滑动,只不过过滤器将覆盖的区域进行合并,而不是像卷积运算进行简单的相加,合并方式有很多种,常用的是取最大值maxpooling和平均值avgpooling。

池化层输出大小公司与卷积层一样,只需将p=0(没有对输入矩阵进行填充)即可,即计算公式为r=(n-f)/s+1。

dropout层

dropout即随机失活,是一种对具有深度结构的人工神经网络进行优化的方法。学习过程中通过将隐藏层的部分权重或输出进行随机归零,降低节点间的相互依赖,从而实现神经网络的正则化,降低其结构风险。通俗来讲,dropout就是随机将一部分网络传播掐断,相当于从原始网络中找到一个更瘦的网络。这种随机掐断网络传播的说法听起来好像不靠谱,但实际上dropout的作用效果非常好。研究表明,dropout提高了神经网络在视觉、语音识别、文档分类和计算生物学中监督学习任务的性能,在许多基准数据集上获得了最先进的结果。

全连接层

全连接层一般作为卷积神经网络最后的输出层。卷积神经网络通过卷积操作提取特征,最后让全连接层通过这些特征进行计算,并最终输出结果(无论是分类问题还是回归问题)。

由于特征都是使用矩阵来表示的,因此再传入全连接层前需要对其进行压扁,即将这些特征转成一维向量。若是分类问题,使用softmax函数作为输出;若是回归问题,使用linear函数作为输出。

标签: #卷积神经网络的算法编程