GPU跑卷积神经网络有什么痛点么?

卷积神经网络CNN Convolutional Neural Networks是包含卷积计算且具有深度结构的前馈神经网络,是深度学习的代表算法之一。

卷积神经网络CNN,是深度学习算法应用最成功的领域之一,卷积神经网络包括一维卷积神经网络,二维卷积神经网络以及三维卷积神经网络。一维卷积神经网络主要用于序列类的数据处理,二维卷积神经网络常应用于图像类文本的识别,三维卷积神经网络主要应用于医学图像以及视频类数据识别。

本篇文章就来讲述几种常见的卷积神经网络

LeNet是卷积神经网络的祖师爷LeCun在1998年提出,用于解决手写数字识别的视觉任务。自那时起,CNN的最基本的架构就定下来了:卷积层、池化层、全连接层。

上图为LeNet结构图,是一个6层网络结构:三个卷积层,两个下采样层和一个全连接层(图中C代表卷积层,S代表下采样层,F代表全连接层)。其中,C5层也可以看成是一个全连接层,因为C5层的卷积核大小和输入图像的大小一致,都是5*5。

如今各大深度学习框架中所使用的LeNet都是简化改进过的LeNet-5(-5表示具有5个层),和原始的LeNet有些许不同,比如把激活函数改为了现在很常用的ReLu。

以下图为例,对经典的LeNet-5做深入分析:

首先输入图像是单通道的28*28大小的图像,用矩阵表示就是[1,28,28]
第一个卷积层conv1所用的卷积核尺寸为5*5,滑动步长为1,卷积核数目为20,那么经过该层后图像尺寸变为24,28-5+1=24,输出矩阵为[20,24,24]。
第一个池化层pool核尺寸为2*2,步长2,这是没有重叠的max pooling,池化操作后,图像尺寸减半,变为12×12,输出矩阵为[20,12,12]。
第二个卷积层conv2的卷积核尺寸为5*5,步长1,卷积核数目为50,卷积后图像尺寸变为8,这是因为12-5+1=8,输出矩阵为[50,8,8].
第二个池化层pool2核尺寸为2*2,步长2,这是没有重叠的max pooling,池化操作后,图像尺寸减半,变为4×4,输出矩阵为[50,4,4]。
pool2后面接全连接层fc1,神经元数目为500,再接relu激活函数。
再接fc2,神经元个数为10,得到10维的特征向量,用于10个数字的分类训练,送入softmaxt分类,得到分类结果的概率output。

1.每个卷积层包括三部分:卷积、池化和非线性激活函数(sigmoid激活函数)。

2.使用卷积提取空间特征

3.下采样层采用平均池化。

AlexNet是2012年ImageNet竞赛冠军获得者Hinton和他的学生Alex Krizhevsky设计的。在2012年ImageNet竞赛中以超过第二名10.9个百分点的绝对优势一举夺冠,从此深度学习和卷积神经网络名声鹊起,深度学习的研究如雨后春笋般出现,AlexNet的出现可谓是卷积神经网络的王者归来。

AlexNet的结构及参数如上图所示,是8层网络结构(忽略激活,池化,LRN,和dropout层),有5个卷积层和3个全连接层,第一卷积层使用大的卷积核,大小为11*11,步长为4,第二卷积层使用5*5的卷积核大小,步长为1,剩余卷积层都是3*3的大小,步长为1。激活函数使用ReLu(虽然不是他发明,但是他将其发扬光大),池化层使用重叠的最大池化,大小为3*3,步长为2。在全连接层增加了dropout,第一次将其实用化。

2.使用层叠的卷积层,即卷积层+卷积层+池化层来提取图像的特征。

5.使用Relu替换之前的sigmoid的作为激活函数。

VGGNet是牛津大学计算机视觉组和Google DeepMind公司一起研发的深度卷积神经网络,并取得了2014年Imagenet比赛定位项目第一名和分类项目第二名。该网络主要是泛化性能很好,容易迁移到其他的图像识别项目上,可以下载VGGNet训练好的参数进行很好的初始化权重操作,VGG版本很多,常用的是VGG16,VGG19网络。

下面这个图就是VGG-16的网络结构:

由上图看出,VGG-16的结构非常整洁,深度较AlexNet深得多,里面包含多个conv->conv->max_pool这类的结构,VGG的卷积层都是same的卷积,即卷积过后的输出图像的尺寸与输入是一致的,它的下采样完全是由max pooling来实现。

VGG网络后接3个全连接层,filter的个数(卷积后的输出通道数)从64开始,然后每接一个pooling后其成倍的增加。

1.VGGNet拥有5段卷积,每段卷积内有2-3个卷积层,同时每段尾部都会连接一个最大池化层(用来缩小图片)。

2.每段内的卷积核数量一样,越后边的段内卷积核数量越多,依次为:64-128-256-512-512。

3.越深的网络效果越好。

4.LRN层作用不大(论文作者结论)。

5.1*1的卷积也是很有效的,但是没有3*3的卷积好,大一些的卷积核可以学习更大的空间特征。

GoogLeNet在2014的ImageNet分类任务上击败了VGG-Nets夺得冠军,其实力肯定是非常深厚的,GoogLeNet跟AlexNet,VGG-Nets这种单纯依靠加深网络结构进而改进网络性能的思路不一样,它另辟幽径,在加深网络的同时(22层),也在网络结构上做了创新,引入Inception结构代替了单纯的卷积+激活的传统操作(这思路最早由Network in Network提出)。GoogLeNet进一步把对卷积神经网络的研究推上新的高度。

Inception结构里主要做了两件事:

1. 通过3×3的池化、以及1×1、3×3和5×5这三种不同尺度的卷积核,一共4种方式对输入的特征响应图做了特征提取。

2. 为了降低计算量。同时让信息通过更少的连接传递以达到更加稀疏的特性,采用1×1卷积核来实现降维。

2.中间层的辅助LOSS单元。

3.后面的全连接层全部替换为简单的全局平均pooling。

2015年微软研究院何恺明推出的ResNet在ISLVRC和COCO上横扫所有选手,获得冠军。ResNet在网络结构上做了大创新,而不再是简单的堆积层数,ResNet在卷积神经网络的新思路,绝对是深度学习发展历程上里程碑式的事件。

下图为残差神经网络的基本模块(专业术语叫残差学习单元)

输入为x,输出为F(x)+x,F(x)代表网络中数据的一系列乘、加操作,假设神经网络最优的拟合结果输出为H(x)=F(x)+x,那么神经网络最优的F(x)即为H(x)与x的残差,通过拟合残差来提升网络效果。

为什么转变为拟合残差就比传统卷积网络要好呢?

因为训练的时候至少可以保证残差为0,保证增加残差学习单元不会降低网络性能,假设一个浅层网络达到了饱和的准确率,后面再加上这个残差学习单元,起码误差不会增加。

通过不断堆叠这个基本模块,就可以得到最终的ResNet模型,理论上可以无限堆叠而不改变网络的性能。下图为一个34层的ResNet网络。

残差网络事实上是由多个浅的网络融合而成,它没有在根本上解决消失的梯度问题,只是避免了消失的梯度问题,因为它是由多个浅的网络融合而成,浅的网络在训练时不会出现消失的梯度问题,所以它能够加速网络的收敛。

自上面两表中,我们可看出残差网络能够在深度增加的情况下维持强劲的准确率增长,有效地避免了VGG网络中层数增加到一定程度,模型准确度不升反降的问题。

1.层数非常深,已经超过百层。

2.引入残差单元来解决退化问题。

3.该网络是一个推广性非常好的网络结构,容易和其他网络结合。

以上就是今天推文的全部内容,后台回复大写字母“CNN”即可获得本推文中涉及的全部论文文章。

如有问题或疑问,也可把你的疑问发送至公众号后台,工作人员看到消息后会第一时间为您解决。

近年来深度学习领域的突破与计算能力的大幅进步是分不开的:

  1. 加快了研究的迭代速度,有更多的机会来优化和调整网络,降低了试错的成本。
  2. 可以在更大的数据集上进行训练,提高了最终的精度。

相较于通用处理器,GPU 在单位面积/单位功耗上拥有更高的计算能力和吞吐带宽,对于神经网络的训练和分类都可以提供显著的加速效果。因而越来越多的学者和机构会选择 GPU 来加速他们的研究,如下图是这几年来 GPU 在 中的应用比例:

如何快速的基于 GPU 开发深度学习的应用呢?最直接的方式就是利用 这个计算库。通过将卷积神经网络的计算变换为对更 GPU 友好的矩阵运算,cuDNN 可以有效提高整个网络的训练速度:

即便你对 GPU 一无所知,也可以基于现有的框架来进行开发。如最新版的 已经可以完整支持 cuDNN 并在性能上获得了进一步的提高:

最后科普一下什么是深度学习:

博主使用的显卡配置为:2*RTX 2080Ti,最近在训练的时候,监控显卡的资源使用情况发现,

虽然同是使用了两张显卡,但是每张显卡的使用率很不稳定,貌似是交替使用,这种情况下训练的速度是很慢的,为了解决

下面是解决这个问题的一些过程。

模型执行预测阶段 使用显卡0,但是也只有51%的使用率。

模型在训练阶段,同时使用两张显卡,发现里利用率也不高,我截取的最高的也就60%

3. 在pytorch的文档中找到了解决办法

上面是该类的输入参数,经常使用的用红色标出,与本文相关的设置用紫色标出,下面是该类的描述文件:

发现如下连个参数很关键:
 














我要回帖

更多关于 神经网络算法的缺点 的文章

 

随机推荐