cnn训练网络时内存不足该如何更改pytorch batch cnn

超简单!pytorch入门教程(三):构造一个小型CNN - 简书
超简单!pytorch入门教程(三):构造一个小型CNN
学过深度卷积网络的应该都非常熟悉这张demo图(LeNet):
此图是LeNet的结构图,把32*32的手写英文字符图片作为输入,训练出一个对于手写字符的分类器
若想深入了解该网络请参考 和 若想好好学学深度学习理论可以看看我们训练这个网络必须经过4步:第一步:将输入input向前传播,进行运算后得到输出output第二步:将output再输入loss函数,计算loss值(是个标量)第三步:将梯度反向传播到每个参数第四步:利用下面公式进行权重更新新权重w =
x 梯度向量g先不管怎么训练,我们必须先构建出一个CNN网络,很快我们写了一段关于这个LeNet的代码,并进行注释:
1至37行定义了一个卷积神经网络,40行以下是为了观察该网络需要训练的参数数量。
运行完该代码我们得到下图
该网络有5层神经元,第一层是1到6的卷积层,第二层是6到16的卷积层,第三层到第5层均为全连接层。第一层的参数计算是6x1x5x5=150,当然别忘了还有bias=6,所以第一层的参数总量是150+6=156。以此类推,总参数和为61706个。
注意:torch.nn只接受mini-batch的输入,也就是说我们输入的时候是必须是好几张图片同时输入。
例如:nn. Conv2d 允许输入4维的Tensor:n个样本 x n个色彩频道 x 高度 x 宽度
简书初学者
系统架构。自底向上,设备层、网络层、数据操作层、图计算层、API层、应用层。核心层,设备层、网络层、数据操作层、图计算层。最下层是网络通信层和设备管理层。网络通信层包括gRPC(google Remote Procedure Call Protocol)和远程直接数据存取(...
我们按照超简单!pytorch入门教程(四):准备图片数据集准备好了图片数据以后,就来训练一下识别这10类图片的cnn神经网络吧。 按照超简单!pytorch入门教程(三):构造一个小型CNN构建好一个神经网络,唯一不同的地方就是我们这次训练的是彩色图片,所以第一层卷积层的...
A 准确率(accuracy) 分类模型预测准确的比例。在多类别分类中,准确率定义如下: 在二分类中,准确率定义为: 激活函数(Activation function) 一种函数(例如 ReLU 或 Sigmoid),将前一层所有神经元激活值的加权和输入到一个非线性函数中,...
CNN on TensorFlow 本文大部分内容均参考于: An Intuitive Explanation of Convolutional Neural Networks知乎:「为什么 ReLU 要好过于 tanh 和 sigmoid function?」Deep M...
文章作者:Tyan博客:noahsnail.com | CSDN | 简书 声明:作者翻译论文仅为学习,如有侵权请联系作者删除博文,谢谢! 翻译论文汇总:https://github.com/SnailTyan/deep-learning-papers-translatio...
大学生对于找实习的目的变得越来越迷茫,在经历上颇有的人谈资的人显然会让面试官眼前一亮。实习,似乎已经是大学生不得不去选择的一条道路,没有实习经验的人,面试的时候,拿什么去敲开自己心仪的企业的大门。所以,大学生在面对着和学历有同等重要作用的实习,很着急,也是无可厚非的。 现在...
家乡的“老许”瓜 夏天,各种瓜类集中上市的季节,特别是生吃类的瓜(冬瓜、南瓜、丝瓜等不能生吃,属于熟食类的瓜),格外地多。外地的就不说了,就说咱家乡的什么白瓜、甜宝、香瓜、黄瓜、“烧”瓜(可能也叫做“骚”瓜吧,家乡俗语,不知是哪一个字)等等,多得不得了。所有这些品种的瓜中,...
昵称:春华正立日期:公元日缘起:学习、分享、成长,相辅相成方式:记录想法、学习笔记、分享成果 坚持!
01 冯唐先生的一篇文章《如何避免成为一个油腻的中年猥琐男》刷爆朋友圈,于是,“油腻的中年妇女”瞬间成了各类网文标题中的关键词。 闲暇时刷朋友圈,看到小安转发了一篇题为《如何避免成为一个肥腻的中年妇女》的文章,并配上无比忧桑的文字:一不小心,人到中年,愿不肥不腻…… 我一脸...
亲爱的妈妈:
最近几天,你比较辛苦,爸爸出去了。只有你一个人来帮我们俩烧饭、拖地、洗衣服……有的时候,我们俩帮你叠一叠衣服,你就已经很开心了。因为你自己就是一个抓紧时间的人,所以一有空闲的时间,你就会读流利说、写毛笔字、阅读书籍……学习知识,最近我知道你比较辛苦。只有...一点心得,一点纪录
CNN基础和进展(上)
https://zhuanlan.zhihu.com/p/
DL基础理论
本页PPT给出了本节内容概要,我们从MCP神经元模型开始,首先回顾全连接层、卷积层等基础结构单元,Sigmoid等激活函数,Softmax等损失函数,以及感知机、MLP等经典网络结构。接下来,将介绍网络训练方法,包括BP、Mini-batch SGD和LR Policy。最后我们会介绍深度网络训练中的两个理论问题:梯度消失和梯度溢出。
MCP神经元模型提出于1943年,可以看作是人工神经网络研究的起点。MCP是作者名字的缩写。MCP模型中包括多个输入参数和权重、内积运算和二值激活函数等人工神经网络的基础要素。MCP模型的提出甚至早于1946年第一台计算机的发明。
在MCP神经元模型的基础上,我们可以得到全连接结构。输入层神经元和输入层神经两两相连,故名全连接。全连接层实际上是内积运算,我们也给出了全连接层前向和后向计算的公式。
下面我们介绍卷积层,卷积是深度网络的重要结构单元之一。我们给出了2D卷积的连续和离散形式,注意卷积核需要做中心翻转。在Caffe实现中,卷积核假设已经翻转,所以卷积运算可以看作当前窗口和卷积核的一个内积(不考虑bias项),上图我们给出了一个卷积运算的示意。
与全连接层相比,卷积层的输出神经元只和部分输入层神经元连接,同时相同响应图内,不同空间位置共享卷积核参数,因此卷积层大大降低了要学习的参数数量。
Caffe当中,为了避免卷积运算中频繁的内存访问和过深的循序嵌套,对卷积运算进行了以下加速:通过Im2Col操作一次取出所有的patch并组成矩阵,与kernel矩阵做乘法运算直接得到卷积结果。
有卷积就有反卷积,反卷积是卷积的逆运算,实现了信号的复原。在全卷积网络中,反卷积层实现了图像的上采样,从而得到如输入图像大小相同的输出。
Pooling层一般配合卷积层使用,可以获得特征的不变性。常见的Pooling操作有max
pooling、mean pooling和随机pooling。其中max pooling取最大值,mean pooling取均值,随机pooling按响应值的大小依概率选择。
激活函数一般用于卷积层和全连接层之后,激活函数是深度网络非线性的主要来源。常见的激活函数Sigmoid,
双曲正切,ReLU(生物启发,克服了梯度消失问题), PReLU(alpha可学习), ELU和maxout。 其中PReLU和ELU都是ReLU的改进。
Dropout由Hinton组提出于2012年,Dropout随机将比例为p的神经元输出设置为0,是一种避免深度网络过拟合的随机正则化策略,同时Dropout也可以看作是一种隐式的模型集成。
Normalization提出于2015年,通过逐层尺度归一(零均值方差归一,scale和shift),BN避免了梯度消失和梯度溢出。BN可以加速收敛5x~20x, 作为一种正则化技术也提高了泛化能力。
下面我们介绍损失函数:用于单标签分类问题的Softmax损失函数,用于实值回归问题的欧式损失函数,用于多标签分类的Sigmoid交叉熵损失和用于深度测度学习的Contrastive损失。
下面我们介绍经典网络结构。1957年,Rosenblatt提出了感知机模型。最早感知机模型用于解决二分类问题,在MCP模型的基础上增加了一个损失函数。随后,感知机也被扩展到多分类问题和回归问题,成为解决机器学习问题的一个通用学习器。1969年,Minsky在一本名为感知机的专著中指出,感知机不能解决XOR问题,从而宣告了感知机甚至人工神经网络研究的死刑,造成了NN长达十几年的寒冬,这也是NN研究的第一次寒冬。遗憾的是,Rosenblatt
1971年死于意外,没有等到春天的到来(下图是Rosenblatt的墓碑)。1986年之后,随着误差反向传导算法的再次发明并在Nature上发表,多层感知机和卷积神经网络成为NN研究新亮点。然而由于多层网络训练困难:梯度消失问题,训练数据和计算资源不足,NN研究在20世纪末再次进入寒冬,这段时间更为流行的方法包括决策树,SVM等,八卦一下,NN研究曾长期是一门“显学”,SVM引用次数最多的那篇文章的题目叫Support
Vector Network。
2006年,NN的研究迎来转机,Hinton、Bengio等人经过跨世纪的努力,提出了通过分层无监督预训练的策略来解决多层网络收敛困难的问题,深度学习也因此得名。
下面我们介绍优化方法。首先误差反向传导,实际上在1974年,Webos在其博士论文中就提出来BP的思想,今天我们广为使用的BP算法则由Hinton等人“重新”发明于1986年。
有了BP算法传递的梯度,基于梯度下降方法,就可以对网络参数进行更新。梯度下降方法的缺点是速度慢且数据量大的时候内存不足,随机梯度下降方法的缺点是方差大导致损失函数震荡严重。两者折中的Mini-batch
SGD,我们也给出了基于Mini-batch SGD的NN训练流程。
进一步的,在Mini-batch
SGD中,有两个关键技术细节:weight decay和momentum. Weight decay是一种避免过拟合的正则化手段,而Momentum通过对历史梯度的moving average来避免陷入局部最优。
rate的控制是网络收敛的关键,Caffe中支持四种策略,其中使用较多的是step和polynomial。
下面我介绍网络训练中的两个理论问题。首先是梯度消失,梯度消失的主要原因是sigmoid激活函数“糟糕”的解析性质,一阶梯度的取值范围是[0,1/4],梯度向下传导一次最少会减小1/4,随着深度的增加,梯度传导的过程中不断减小从而引发所谓的“梯度消失”问题。
为了解决梯度消失问题,学术界提出了多种策略,例如,LSTM中的选择性记忆和遗忘机制,Hinton等提出的无监督pre-train方法,新的激活函数ReLU,
辅助损失函数和Batch Normalization.
除了梯度消失之外,梯度溢出也是深度网络训练中的一个常见问题,例如Softmax损失变成86.33并且保持不变,这是因为梯度溢出导致网络参数NAN。梯度溢出的根本原因是网络参数初始化的尺度不平衡问题。PPT中展示了一个例子,W2的初始值是0.01,梯度却达到10^4。
为了解决这个问题,Bengio等人提出了Xavier初始化策略,其基本思想是保持网络的尺度不变。2. CNN结构演化
下面我们介绍CNN的结构演化。
历史奔流向前,往事并不如烟。上图所示是我总结的CNN结构演化的历史,起点是神经认知机模型,已经出现了卷积结构,但是第一个CNN模型诞生于1989年,1998年诞生了LeNet。随着ReLU和dropout的提出,以及GPU和大数据带来的历史机遇,CNN在12年迎来了历史突破。12年之后,CNN的演化路径可以总结为四条:1)更深的网络,2)增强卷积模的功能以及上诉两种思路的融合,3)从分类到检测,4)增加新的功能模块。
首先,我们介绍CNN的早期探索,1962年,Hubel和Wiesel提出了视觉皮层的功能模型,从简单细胞到复杂细胞再到超复杂细胞。受此启发,1980年,神经认知及提出,简单细胞被实现为卷积,复杂细胞被实现为pooling。
神经认知机采用自组织的方式进行无监督的卷积核训练,因此并不是CNN(通过BP端到端训练)。
第一个CNN模型诞生于1989年,发明人LeCun。需要指出的是,从诞生的第一天起,CNN自带deep属性。
LeCun同时研究了四个问题,这也是文章中留下的四枚彩蛋,其中问题3)和Xavier初始化之间有神秘的联系。
1998年,LeCun提出LeNet,并成功应用于美国手写数字识别。但很快,CNN的锋芒被SVM和手工设计的局部特征盖过。
历史的转折在2012年到来,AlexNet,
在当年的ImageNet图像分类竞赛中,top-5错误率比上一年的冠军下降了十个百分点。AlexNet的成功既得益研究者的自我奋斗:Relu和Dropout的提出, 也是大历史进程的结果:大数据训练和GPU并行计算。2012年之后,CNN朝着不同方向演化。
第一条演化路径:网络变深。
第二条演化路径,增强卷积模块的功能。
13年底,颜水成老师组提出了NIN结构,并于2014年取得了ILSVRC物体检测竞赛的冠军。
在NIN的基础上,Google于2014年提出了GoogLeNet(Inception
V1),并随后改进出Inception V3和V4。
Net可以看作是前两条演化路径的集成。何凯明等人发现,单纯增加深度会导致网络退化,例如CIFAR-10数据集,网络从20层到56层性能反而会下降。为此ResNet中引入了一个shortcut结构,将输入跳层传递与卷积的结果相加。ReNet可以训练深达152层的网络,是15年ILSVRC不依赖外部数据的物体检测与物体识别竞赛的双料冠军。
进一步的,Google将Inception结构与Residual
Net结合,提出了Inception-Residual Net结构,实验表明,虽然采用Inception V4结构能够得到与ResNet可比的性能,但是残差结构能够加速收敛1倍以上。
2016年初,何凯明等提出了恒等映射深度残差网络,通过去掉Addition操作后的ReLU操作,残差项跨层可加,损失层的梯度可以直接传到任意一层,使得1001层网络的训练成为可能,并在CIFAR-10上取得了4.92%的错误率,刷新了state-of-the-art。
第三条演化路径:从物体识别到物体检测。
R-CNN的缺点是速度慢,Fast
R-CNN是R-CNN和SPP Pooling的融合,这样每张图像只需要通过卷积网络一次同时支持端到端训练而不需要保存中间结果。
R-CNN支持多类物体的同时检测而只需要一个网络,目前基于Faster R-CNN的行人与车辆检测技术是汽车高级辅助驾驶系统的关键技术之一。
第四条演化路径:增加新的功能模块。
本节介绍三个工作:反卷积层、ST-Net和CNN与RNN/LSTM的混合架构。
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!人生就像一个缓慢的爬行坡,有多少惊喜就有多少不为人知的付出!
【深度学习:CNN】过拟合、梯度弥散、batchsize的影响的问题
 上一篇主要是对卷积神经网络的整个训练过程中公式以及误差的推导给出详细的分析。
  博客地址:
  这一篇主要对卷积神经网络中出现的一些问题进行一个详细的阐述。
第一个问题:模型过拟合
1.1 什么是过拟合
  所谓过拟合(Overfit),是这样一种现象:一个假设在训练数据上能够获得比其他假设更好的拟合,但是在训练数据外的数据集 上却不能很好的拟合数据。此时我们就叫这个假设出现了overfit的现象。
  如上图所示:过拟合,就是拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。
1.2 造成过拟合的原因
  过拟合其中一个可能的成因就是模型的vc维过高,使用了过强的模型复杂度(model complexity)的能力。(参数多并且过训练)
  还有一个原因是数据中的噪声,造成了如果完全拟合的话,也许与真实情景的偏差更大。
  最后还有一个原因是数据量有限,这使得模型无法真正了解整个数据的真实分布。
  权值学习迭代次数足够多(Overtraining),拟合了训练数据中的噪声和训练样例中没有代表性的特征。
1.3 过拟合解决方法
1.权值衰减
  在每次迭代过程中以某个小因子降低每个权值,这等效于修改E的定义,加入一个与网络权值的总量相应的惩罚项,此方法的动机是保持权值较小,避免weight decay,从而使学习过程向着复杂决策面的反方向偏。(L2正则化)
2.适当的stopping criterion(验证集)
3.Cross-validation with some patterns
  交叉验证方法在可获得额外的数据提供验证集合时工作得很好,但是小训练集合的过度拟合问题更为严重
  k-fold交叉方法:
  把训练样例分成k份,然后进行k次交叉验证过程,每次使用不同的一份作为验证集合,其余k-1份合并作为训练集合.每个样例会在一次实验中被用作验证样例,在k-1次实验中被用作训练样例;每次实验中,使用上面讨论的交叉验证过程来决定在验证集合上取得最佳性能的迭代次数n*,然后计算这些迭代次数的均值,作为最终需要的迭代次数。
  这里有点疑问,正则化是为了防止过拟合还是为了解决过拟合。对部分无用的feature,定义其parameter(p3,p4)非常大,这样会导致训练结果w3,w4非常小,几乎为0,降低模型复杂度。
  关于正则化具体的解释请移步到博主另一篇博文中:
第二个问题:数据集不平衡
  不平衡训练集会对结果造成很大的负面影响,而训练集在平衡的情况下,能够达到最好的performance。
1. 训练数据分布情况对CNN结果产生很大影响;
2. 平衡的训练集是最优的,数据越不平衡,准确率越差;
3. 如何提升准确率(使用Oversampling)
  相关论文是: 《The Impact of Imbalanced Training Data for Convolutional Neural Networks》
第三个问题:Batchsize的影响
3.1Batch_Size三种情况
  Batch_Size(批尺寸)是中一个重要参数。
  ①如果数据集比较小,完全可以采用全数据集 ( Full Batch Learning )的形式,这样做至少有 2 个好处:其一,由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。其二,由于不同权重的梯度值差别巨大,因此选取一个全局的学习率很困难。
   ②Batch_Size = 1。这就是在线学习(Online Learning)。使用在线学习,每次修正方向以各自样本的梯度方向修正,横冲直撞各自为政,难以达到收敛。
  ③如果网络中采用minibatch SGD来优化,所以是一个batch一个batch地将数据输入CNN模型中,然后计算这个batch的所有样本的平均损失,即代价函数是所有样本的平均。而batch_size就是一个batch的所包含的样本数,显然batch_size将影响到模型的优化程度和速度。mini
batch只是为了充分利用GPU memory而做出的妥协
3.2改变Batch_Size的影响
  在合理范围内,增大 Batch_Size 的好处:内存利用率提高了,大矩阵乘法的并行化效率提高。跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。
  下面是参考文献中博主给出的实验结果:
  Batch_Size 太小,算法在 200 epoches 内不收敛。
  随着 Batch_Size 增大,处理相同数据量的速度越快。
  随着 Batch_Size 增大,达到相同精度所需要的 epoch 数量越来越多。
  由于上述两种因素的矛盾, Batch_Size 增大到某个时候,达到时间上的最优。
  由于最终收敛精度会陷入不同的局部极值,因此 Batch_Size 增大到某些时候,达到最终收敛精度上的最优。
3.3 Minibatch简谈
  首先说一下采用mini-batch时的权重更新规则。比如mini-batch size设为100,则权重更新的规则为:
           
  也就是将100个样本的梯度求均值,替代online learning方法中单个样本的梯度值:
             
  当采用mini-batch时,我们可以将一个batch里的所有样本放在一个矩阵里,利用线性代数库来加速梯度的计算,这是工程实现中的一个优化方法。
  一个大的batch,可以充分利用矩阵、线性代数库来进行计算的加速,batch越小,则加速效果可能越不明显。当然batch也不是越大越好,太大了,权重的更新就会不那么频繁,导致优化过程太漫长。
第四个问题:梯度弥散
4.1 梯度弥散的解释
  梯度弥散的问题很大程度上是来源于激活函数的“饱和”。因为在后向传播的过程中仍然需要计算激活函数的导数,所以一旦卷积核的输出落入函数的饱和区,它的梯度将变得非常小。
梯度弥散。使用反向传播算法传播梯度的时候,随着传播深度的增加,梯度的幅度会急剧减小,会导致浅层神经元的权重更新非常缓慢,不能有效学习。这样一来,深层模型也就变成了前几层相对固定,只能改变最后几层的浅层模型。
4.2 如何解决梯度弥散
  一种新的方法batch normalization,相关论文:
  《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》
  顾名思义,batch normalization嘛,就是“批规范化”咯。Google在ICML文中描述的非常清晰,即在每次SGD时,通过mini-batch来对相应的activation做规范化操作,使得结果(输出信号各个维度)的均值为0,方差为1. 而最后的“scale and shift”操作则是为了让因训练所需而“刻意”加入的BN能够有可能还原最初的输入,从而保证整个network的capacity。
  BN可以应用于网络中任意的activation set。文中还特别指出在CNN中,BN应作用在非线性映射前,即对x=Wu+b做规范化。另外对CNN的“权值共享”策略,BN还有其对应的做法(详见文中3.2节)。
  那BN到底是什么原理呢?说到底还是为了防止“梯度弥散”。关于梯度弥散,大家都知道一个简单的栗子:。在BN中,是通过将activation规范为均值和方差一致的手段使得原本会减小的activation的scale变大。可以说是一种更有效的local response normalization方法。
1.谈谈中的 Batch_Size
2.正则化方法:L1和L2 regularization、数据集扩增、dropout
3.深度学习中 Batch Normalization为什么效果好?
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!CNN中batch normalization应该放在什么位置_百度知道
CNN中batch normalization应该放在什么位置
我有更好的答案
深度网络层次太多后,信号和梯度越来越小,深层难以训练。被称作梯度弥散。也有可能越来越大,又被称作梯度爆炸。
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。机器之心编译
参与:蒋思源、黄小天、吴攀
图像分类是人工智能领域的基本研究主题之一,研究者也已经开发了大量用于图像分类的算法。近日,Shiyu Mou 在 Medium 上发表了一篇文章,对五种用于图像分类的方法(KNN、SVM、BP 神经网络、CNN 和迁移学习)进行了实验比较,该研究的相关数据集和代码也已经被发布在了 GitHub 上。
项目地址:https://github.com/Fdevmsy/Image_Classification_with_5_methods
图像分类,顾名思义,就是为输入图像打上固定类别的标签。这是计算机视觉领域的核心问题之一。尽管听起来很简单,但图像分类有大量不同的实际应用。
传统方式:特征描述和检测
也许对一些样本任务有好处,但实际情况要复杂得多。
因此,我们并没有通过代码的形式直接指出每一类型的外观(visual appearance),而是使用机器学习——为计算机提供每一类的诸多实例,接着开发学习算法观察这些实例,并学习每一类的外观。
然而,图像分类如此复杂,以至于其处理经常用到深度学习模型,比如 CNN(卷积神经网络)。我们已经知道,我们在课堂上学习的不少算法(如 KNN、SVM)通常很擅长数据挖掘;但是对于图像分类,它们却不是最佳选择。
因此,我们将对课堂中学到的以及 CNN 和迁移学习等算法做一个对比。
我们的目标是:
1. 把 KNN、SVM、BP 神经网络与业界处理图像识别问题的算法——CNN 和迁移学习——进行对比。
2. 获得深度学习经验。
3. 通过 TensorFlow 探索机器学习框架。
系统设计 & 实现细节
算法与工具
本项目使用的 5 个方法是 KNN、SVM、BP 神经网络、CNN 和迁移学习。
全项目可分为 3 类方法:
第一类方法:使用 KNN、SVM、BP 神经网络这些课堂算法。这些算法强大易实现。我们主要使用 sklearn 实现这些算法。
第二类方法:尽管传统的多层感知器模型已成功应用于图像识别,但由于其节点之间的全连接性,它们遭遇了维度的难题,从而不能很好地扩展到更高分辨率的图像。因此我们使用深度学习框架 TensorFlow 打造了一个 CNN。
第三个方法:重新训练一个被称作 Inception V3 的预训练深度神经网络的最后一层,同样由 TensorFlow 提供。Inception V3 是为 ImageNet 大型视觉识别挑战赛训练的,使用了 2012 年的数据。这是计算机视觉的常规任务,其中模型试图把全部图像分为 1000 个类别,比如斑马、达尔阿提亚人和洗碗机。为了再训练这一预训练网络,我们要保证自己的数据集没有被预训练。
第一类方法:预处理数据集,并使用 sklearn 实现 KNN、SVM、BP 神经网络。
首先,我们使用 OpenCV 包定义了 2 个不同的预处理函数:第一个是图像到特征向量,它可以重调图像大小,并把图像转化为行像素列表;第二个是提取颜色直方图,即使用 cv2.normalize 从 HSV 颜色空间提取 3D 颜色直方图,并平化(flatten)结果。
接着,建构若干个我们需要解析的参数。由于想要同时测试整个数据集和带不同数量标签的子数据集的精确度,我们构建了一个作为参数的数据集并解析进我们的程序。我们同样构建了用于 k-NN 方法的邻元素数作为解析参数。
之后,我们开始提取数据集中的每一图像特征,并将其放入数组。我们使用 cv2.imread 读取每一图像,通过从图像名称中提取字符串来拆分标签。在我们的数据集中,我们使用相同格式——类别标签. 图像序号.jpg——设置名称,因此我们可以轻易提取每张图像的分类标签。接着我们使用这两个函数提取 2 种特征并附加到数组 rawImages,而之前提取的标签附加到数组标签。
下一步是使用从 sklearn 包导入的函数 train_test_split 拆分数据集。这个集具有后缀 RI,RL 是 rawImages 和标签对的拆分结果,另一个是特征和标签对的拆分结果。我们使用 85% 的数据集作为训练集,余下的 15% 作为测试集。
最后,我们应用 KNN、SVM、BP 神经网络函数评估数据。对于 KNN 我们使用 KNeighborsClassifier,对于 SVM 我们使用 SVC,对于 BP 神经网络我们使用 MLPClassifier。
第二类方法:使用 TensorFlow 构建 CNN。TensorFlow 的全部目的在于使你打造一张计算图(使用 Python 等语言),接着在 C++ 中执行该图(在相同计算量的情况下,C++比 Python 更高效)。
TensorFlow 也可自动计算优化图变量所需的梯度,从而使模型表现更好。这是由于该图由简单的数学表达式组合而成,因此可通过导数链式法则计算全图的梯度。
一张 TensorFlow 图包含以下几个部分,每一部分将在下文详述:
占位符变量,用于输入数据到图。
优化向量以使卷积网络表现更好。
卷积网络的数学公式。
可用于指导变量优化的成本衡量标准。
更新变量的优化方法。
CNN 架构由一堆不同的层组成,这些层通过可微分函数可把输入量转化为输出量。
因此,在我们的实现中,第一层是保存图像,接着我们使用 2 x 2 最大池化和修正线性单元(ReLU)的构建 3 个卷积层。输入是 4 维张量:
图像序号。
每一图像的 Y 轴。
每一图像的 X 轴。
每一图像的通道(channel)。
输出是另一个 4 维张量:
图像序号,与输入相同。
每一图像的 Y 轴。如果使用 2x2 池化,接着输入图像的高和宽除以 2。
每一图像的 X 轴。同上。
由卷积滤波器生成的通道。
接着,我们我们在网络末端构建了 2 个全连接层。输入是一个 2 维的形状张量 [num_images、num_inputs]。输出也是一个 2 维的形状张量 [num_images、num_outputs]
然而,为了连接卷积层和全连接层,我们需要一个平层(Flatten Layer)以把 4 维向量减少至可输入到全连接层的 2 维。
CNN 末端通常是一个 softmax 层,它可归一化来自全连接层的输出,因此每一元素被限制在 0 与 1 之间,并且所有元素总和为 1。
第三种方法:再训练 Inception V3。现代目标识别模型有数以百万计的参数,并可能需要花费数周的时间才能完全训练一个模型。迁移学习是一种采用在分类数据集(如 ImageNet)中已训练的模型而快速完成这一工作的方法,因为其只需要重新训练新类别的权重就行。虽然这样的模型并没有完全训练的模型表现好,但对于许多应用来说,这是非常高效的,因为其不需要 GPU 并可以在笔记本上花半个小时就完成训练。
读者可以点击一下链接进一步了解迁移学习的训练过程:https://www.tensorflow.org/tutorials/image_retraining
首先我们需要获取预训练模型,并移除旧的顶层神经网络,然后再基于我们的数据集重新训练一个输出层。虽然猫的所有品种并没有在原始 ImageNet 数据集和全训练的模型中体现,但迁移学习的神奇之处就在于其可以利用已训练模型用来识别某些目标的底层特征,因为底层特征可以在很多不更改的情况下应用于很多识别任务。然后我们分析本地的所有图片并计算每张的瓶颈值(bottleneck values)。因为每张图片在训练过程中重复使用了多次,所以计算每个瓶颈值需要花费大量时间,但我们可以加快缓存这些瓶颈值,也就可以省去重复的计算。
该脚本将运行 4000 次训练步。每一步从训练集中随机选择 10 张图片,并从缓存中搜索其瓶颈值,然后再将它们训练最后一层以得到预测。这些预测会通过对比真实标注值而通过反向传播过程更新最后一层的权重。
Oxford-IIIT Pet 数据集:http://www.robots.ox.ac.uk/~vgg/data/pets/
该数据集有 25 种狗和 12 种猫。每一种类别有 200 张相片。我们在该项目中只会使用 10 种猫。
在该项目中我们用的类别为 [斯芬克斯猫、暹罗猫、布偶猫、波斯猫、缅因猫、英国短毛猫、孟买猫、伯曼猫、孟加拉豹猫、阿比西尼亚猫]。
因此在数据集中我们总共有 2000 张图片。虽然图片的尺寸是不同的,但我们可以调整为固定的大小如 64x64 或 128x128。
在该项目中,我们主要使用 OpenCV 对图片进行预处理,如读取图片放入阵列或调整为我们需要的大小等。
提升图像训练结果的一个常用方法就是对训练输入随机进行变形、裁剪或亮度调整处理。由于采用了同一图片所有可能的变体,该方法不仅具有扩展有效训练数据大小的优点,同时还倾向帮助网络使用分类器学习处理所有在现实生活中可能出现的畸变。
具体请查看:https://github.com/aleju/imgaug.
第一个方法:第一部分为预处理数据集和使用 sklearn 应用 KNN、SVM 和 BP 神经网络。
在程序中有很多参数可以调整:在 image_to_feature_vector 函数中,我们设置的图片尺寸为 128x128,我们之前也尝试过使用其他尺寸(如 8x8、 64x64、256x256)进行训练。我们发现虽然图片的尺寸越大效果越好,但大尺寸的图片同样也增加了执行时间和内存需求。因此我们最后决定使用 128x128 的图片尺寸,因为其并不太大,同时还保证了准确度。
在 extract_color_histogram 函数中,我们将每个通道的二进制值设置为 32,32,32。在先前的函数中,我们还尝试了 8, 8, 8 和 64, 64, 64。虽然更高的数值能有更优的结果,但同时也要求更长的执行时间,因此我们认为 32,32,32 是比较合适的。
对于数据集,我们训练了 3 种。第一种是有 400 张图片、2 种标注的子数据集。第二种是有 1000 张图片、5 种标注的子数据集。最后一种是有 1997 张图片、10 种标注的全数据集。我们将不同的数据集解析为程序中的参数。
在 KNeighborsClassifier 中,我们只改变近邻的数量并储存每一种数据集最优 K 值的分类结果。其他所有参数都设为默认。
在 MLPClassifier 中,我们设置每一个隐藏层有 50 个神经元。我们确实测试了多个隐藏层,但好像对最后的结果没有明显的变化。最大的迭代次数设置为 1000,并且为了确保模型能够收敛,我们容忍差设置为 1e-4。同时还需要设置 L2 罚项的参数 alpha 为默认值,随机状态为 1,求解器设置为学习速率为 0.1 的「sgd」。
在 SVC 中,最大迭代次数为 1000,类别权重设置为「balanced」。
我们程序的运行时间并不会太久,对于我们的三种数据集大概分别花 3 到 5 分钟左右。
第二种方法:使用 TensorFlow 构建 CNN
使用整个大数据集会需要很长的时间计算模型的梯度,因此我们在优化器每一次迭代中都只使用小批量的图片更新权重,批量大小一般是 32 或 64。该数据集分为包含 1600 张图片的训练集、包含 400 张图片的验证集和包含 300 张图片的测试集。
该模型同样有许多参数需要调整。
首先是学习率。优良的学习率因为其足够小而很容易令模型收敛,同时又足够大令模型的收敛速度不至于太慢。所以我们选择了 1 x 10^-4。
第二个需要调整的参数是投入到网络的图片尺寸。我们训练了 64x64 和 128x128 两种图片尺寸,结果表明尺寸越大模型精度就越高,但代价是运行时间会更长。
然后是神经网络层级数和它的形状。然而实际上由于这一方面有太多的参数可以调整,所以很难在所有的参数间找到一个最优值。
根据网上的很多资源,我们发现对于构建神经网络,参数的选择很大一部分都是根据已有的经验。
最开始,我们希望构建相当复杂的神经网络,其所采用的参数如下:
# Convolutional Layer 1. filter_size1 = 5 num_filters1 = 64
# Convolutional Layer 2. filter_size2 = 5 num_filters2 = 64
# Convolutional Layer 3. filter_size3 = 5 num_filters3 = 128
# Fully-connected layer 1. fc1_size = 256
# Fully-connected layer 2. fc1_size = 256
我们采用 3 个卷积层和 2 个全连接层,它们的结构都比较复杂。
然而,我们的结果是:过拟合。对于这样的复杂网络,训练精度在迭代一千次后就达到了 100%,但测试精度仅仅只有 30%。最开始,我们十分疑惑为什么模型会过拟合,然后开始随机调整参数,但这时候模型的表现却又变好了。幸好几天后我碰巧读到了 Google 在讨论深度学习的一篇文章:https://medium.com/@blaisea/physiognomys-new-clothes-f2d4b59fdd6a 该文章指出他们所主导的项目是有问题的:「一个技术性的问题是如果少于 2000 个样本,那么其是不足以训练和测试如同 AlexNet 那样的卷积神经网络而不出现过拟合情况。」所以我才意识到我们的数据集实在是太小了,而网络构架又太复杂,这才产生了过拟合现象。
我们的数据集正好包含 2000 张图片
因此,我开始减少神经网络的层级数和核函数的大小。我尝试调整了很多参数,以下是我们最后使用的神经网络架构参数:
# Convolutional Layer 1. filter_size1 = 5 num_filters1 = 64
# Convolutional Layer 2. filter_size2 = 3 num_filters2 = 64
# Fully-connected layer 1. fc1_size = 128
# Number of neurons in fully-connected layer.
# Fully-connected layer 2. fc2_size = 128
# Number of neurons in fully-connected layer.
# Number of color channels for the images: 1 channel for gray-scale. num_channels = 3
我们仅仅使用 2 个小型的卷积层和 2 个全连接层。训练结果并不好,在迭代 4000 次后同样出现了过拟合现象,但测试精度还是要比前面的模型高 10%。
我们仍然在寻找解决的办法,然而一个显然易见的原因是我们的数据集实在是太小了,我们也没有足够的时间做更多的改进。
作为最后的结果,我们在 5000 次迭代后大概实现了 43% 的精度,该训练花了一个半小时。实际上,我们对这一结果比较沮丧,因此我们准备使用另一标准数据集 CIFAR-10。
CIFAR-10 数据集由 60000 张 32x32 10 类彩色图片,每一个类别都有 6000 张图片。该数据集包含了 50000 张训练集和 10000 张测试集。
我们使用了和上面相同的神经网络架构,在 10 小时的训练后,我们在测试集上实现了 78% 的准确度。
第三种方法:再训练 Inception V3,我们随机选取一些图片进行训练,而另一批图片用于验证。
该模型同样有许多参数需要调整。
首先是训练步,默认值是 4000 步。我们也可以根据情况增加或减少以尽快获得一个可接受的结果。
随后是学习率,该参数控制了在训练期间更新至最后一层的量级。直观地说,如果学习速率小,那么需要更多的时间进行学习,但最终其可能收敛到更优的全局精度。训练批量大小控制了在一个训练步中检查图片的多少,又因为学习率应用于每一个批量,如果能以更大的批量获得相似的全局效果,我们需要减少它。
因为深度学习任务所需要的运行时间通常很长,所以我们并不希望模型在训练几小时后实际上表现很糟糕。所以我们需要经常获得验证精度的报告。这样我们同样可以避免过拟合。数据集的分割是将 80% 的图片投入到主要的训练中,10% 的图片作为训练期间经常进行的验证集,而剩下 10% 的图片作为最终的测试集以预测分类器在现实世界中的表现。
第一类方法:预处理数据集并使用 sklearn 实现 KNN、SVM 和 BP 神经网络。
结果在下表中。由于 SVM 结果非常差,甚至低于随机猜测,我们不再展示其结果。
从结果中我们看到:
在 k-NN 中,原始像素和直方图精确度是相对等同的。在 5 个标签的子数据集,直方图精确度比原始像素高一点;但是整体来讲,原始像素的结果更好。
在神经网络 MLP 分类器中,原始像素精确度远低于直方图。对于整个数据集(10 个标签),原始像素精确度甚至低于随机猜测。
所有这 2 个 sklearn 方法并没有良好表现,在整个数据集中(10 标签数据集)识别正确分类的精确度仅约有 24%。这些结果说明,通过 sklearn 分类图像效果欠佳,它们在使用多个类别分类复杂图像时表现并不好。但是相比于随机猜测,它们确实有提升,只是还不够。
基于以上结果,我们发现为了提升精确度,使用一些深度学习方法很必要。
第二类方法:使用 TensorFlow 构建 CNN。如上所述,由于过拟合我们不能获取好的结果。
正常情况下训练需要半个小时,然而由于结果过拟合,我们认为这一运行时间并不重要。通过和第一类方法的比较,我们看到:尽管 CNN 过拟合训练数据,我依然得到了更好的结果。
第三类方法:再训练 Inception V3
整个训练过程不超过 10 分钟。我们获得了极好的结果,并真正看到了深度学习和迁移学习的力量。
基于以上比较,我们可以看到:
KNN、SVM 和 BP 神经网络对于某些特定图像分类任务是不够的。
虽然我们会在 CNN 中过拟合,但这仍然比那些课堂方法要好。
迁移学习在图像分类问题上效率很高,功能强大。它准确快速,可以在短时间内完成训练——而且不需要 GPU 的帮助。即使你只有一个很小的数据集,它也可以达到很好的效果,并且减少了过拟合的概率。
我们已经从图像分类任务中学到了很多,这类任务与课堂上的其他分类任务大不相同。数据集相对较大且稠密,需要的网络十分复杂,且大多方法依赖于 GPU 的计算能力。
裁剪或重调图像,使其更小
在训练的每个迭代中随机选择一个小 batch
在验证集进行验证的时候随机选择一个小 batch,在训练过程中频繁记录验证分数
可以使用 Image Augmentation 处理图片,增大数据集体量
对于图像分类任务,我们需要比 200 x 10 的更大的数据集,CIFAR-10 数据集包含 6 万张图像。
越复杂的网络需要越大的数据集进行训练
小心过拟合
创客总部是北大校友、联想之星创业联盟成员企业2013年发起,专注实验室技术投资和孵化,是科技成果变现第一站,专业投资孵化高校和科研院所的前沿技术与技术精英,提供早期投资、产业链业务对接和办公场地等服务,帮助技术项目和大型企业建立业务合作关系,同时为大型企业引入前沿技术,促进大型企业转型升级。是中关村创新型孵化器,国家级众创空间。专注投资孵化领域包括:人工智能、新材料、医疗健康和消费升级等。截至2017年1月,通过评审入孵的项目有275个,有122个项目获得投资,共获得11.3亿元人民币投资,单个项目单次获得最高融资2.3亿元人民币,其中创客总部投资了50个项目。
如果您创业需要帮助
如果您项目需要融资
如果您是大企业想找尖端技术
那就赶快来联系我们吧!
专注实验室技术投资、孵化
科技成果变现第一站
文章转载自网络,作者观点不代表本网站立场,如需处理请联系客服
创客总部其它文章
题图:苹果公司联合创办人史蒂夫·乔布斯坚守第一性原理是一个“失去”的故事。作者 /李善友来源 / 混沌大学通常人性喜欢多,喜欢做加法,喜欢求全,但是基于第一性原理的战略是舍,一定要舍掉,你才能得到。而且舍掉的东西全都是对的、好的,你把那些对的、好的全都舍掉
本文转自:腾讯教育日,航天科技教育企业北京超验极客教育科技有限公司(“极客教育”)宣布完成近千万元天使轮融资,本次融资由新东方教育科技集团领投,商业航天企业天仪研究院与科技成果转化机构创客总部跟投。在提及为何创立三年后才进行天使轮融资时,极
来源:赛迪智库创客总部创客总部是北大校友、联想之星创业联盟成员企业2013年发起,聚焦人工智能和医疗健康,投资孵化高校和科研院所的实验室技术,赋能产业智能化,提供早期投资、业务对接和办公场地等,帮助技术项目销售和应用推广,同时为传统企业引入前沿技术,促进
来源:中国网生活素有科技成果转化“硬功夫”的北京经济技术开发区(北京亦庄,简称开发区),又迎一批高精尖成果的扎堆对接签约。在28日举行的北京市科技成果转化统筹协调与服务平台首批共建单位签约启动会上,北京市科委、北京经济技术开发区管委会与清华大学、北京大学、
本文转自:创新创业中关村 今天,中国科学院科技促进发展局(以下简称中科院科发局)、中国科学院北京分院(以下简称中科院北京分院)、中关村科技园区管理委员会(以下简称中关村管委会)在中关村示范区展示中心召开“中科院—中关村科技成果转化工作推进会”,总结中科
本文转自:经纬创投2008年,刚满30岁的傅盛离职,张颖看到这个消息,要来电话打了过去,俩人下午就碰了头。张颖建议傅盛去虎跳峡散散心,并邀请他到经纬做EIR(入驻企业家)作为创业前的过渡。也是这一年,已无生存之忧,与运营商合作一个项目即有数千万的收入的UC,舍掉
本文转自:新一代人工智能联盟为了进一步落实国务院《新一代人工智能发展规划》的要求,由新一代人工智能产业技术创新战略联盟主办的首届“燎原杯”智能医疗评测大赛启动会于6月21日在安徽合肥召开。包括新一代人工智能产业技术创新战略联盟理事长高文院士、中国食品药品
来源:Way作者:刘禹在浦东张江中芯国际的工厂里,无时无刻不在上演着代表人类最高制造水平的“接力赛”。直径30厘米的圆形硅晶薄片穿梭在各种极端精密的加工设备之间,由它们在硅片表面制作出只有发丝直径千分之一的沟槽或电路。热处理、光刻、刻蚀、清洗、沉积……每块
作者:王耳朵先生来源:王耳朵先生(lD:huangezishiba)有没有那么一刻,你感觉人生格局已定?你感觉再往上走,越来越难了?你曾经雄心壮志,但现在每个月还房贷,都拼尽全力。你苦苦思索,自己到底是怎样输掉了人生。最近,刘强东在牛津大学的一篇演讲,刷爆网络,它也
前言亿欧智库以“人工智能商业落地”作为研究视角,对中国上百家人工智能企业进行了大规模的问卷调研,并与数十家主流投资机构进行了深度访谈,最终以研究报告、企业榜单的形式,将成果进行展示,希望为全行业提供有价值的研究信息与观点。本文转自:亿欧智库创客总部创
本文转自:笔记侠大家好,我非常开心地看到今天人工智能、机器人都变成了非常热门的词汇。我开始思考这个命题的时候是在两年多前,当时猎豹刚刚登陆纽交所不久,猎豹移动在过去7、8年的创业中开启了中国APP全球化的序幕,在全球有6亿的月度活跃用户,其中80%来自于海外,
本文转自:健康界自2015年《中国人民共和国促进科技成果转化法》修订实施以来,国务院及各部委纷纷出台相应文件,通过给科研人员松绑、给予高校自主权激发创新活力。随着政策环境的宽松,高校和科研院所也纷纷开启了科技成果转化的探索之路。在多数高校尚在观望、等待、
来源:混沌大学、全球创新论坛 导语无论你身在何处,真正的大趋势必将把地球上每一个人深卷其中,并重构大至国家、城市,小至企业、消费者之间一系列错综复杂的关系。不管你是处于创业模式,还是在大企业里面工作,都需要了解:未来人们如何消费产品和服务?有哪些需要是
导语6月19日,拉卡拉创始人孙陶然在清华附中国际学校毕业典礼上发表演讲,他不仅详细介绍了企业家的三个特点、三大素质与两大能力,还特别建议同学们现在就要开始深刻思考自己的世界观、价值观和人生观,因为越早想清楚这些事情,人生就将越可能活成自己想活的样子。孙陶
题图:华为技术有限公司主要创始人任正非先生我是在生活所迫、人生路窄的时候创立华为的。那时我已领悟到个人才是历史长河中最渺小的这个人生真谛。作者 /陈培根来源 /周掌柜(zhouzhanggui525)《时代周刊》评价任正非为“一个为了观念而战斗的硬汉”。而任正非曾对自己
来源:中国先进制造技术论坛摘要:“我们不要小富即安,不要以为手头有几个活钱就了不得,如果产业没有增长潜力,没有附加值,没有‘金刚钻’,只做牛仔裤和运动鞋,不管做得多好,做得多大,都不可能赶上美国。”华为公司董事、高级副总裁陈黎芳4月20日在华为新员工座谈
湖南卫视最近计划在《新闻当事人》栏目中,筹拍一个有关人工智能的节目,将邀请AI领域创业者登台分享,做人工智能产品展示。在当今优质渠道和流量都价格不菲的时代,湖南卫视的报道,对于创业者来说是个难得的市场宣传机会。采访介绍:《新闻当事人》会在周六和周天的下
本文转自:北京日报在中关村改革开放40周年暨中关村园区设立30周年之际~北京日报推出《中关村系列报道》~记录中关村的历史~剖析中关村的成就~今天,北京日报头版头条推出《与改革开放同行》及系列报道第一篇《中国硅谷之路》~与改革开放同行京平中关村,北京最有名的“村
导语做工作,先清楚目的是什么,可以让我们少做很多不必要做的事,但是,要让执行过程更有的放矢,光清楚目的还不够,要让目标更具体、可量化、可达到,与其他目标有关联性,且有时间性,否则就是瞎子打鸟,浪费子弹。拉卡拉董事长孙陶然先生在《有效管理5大兵法》一书中
本文转自:京东物流每年618,对物流行业的从业人员都是一场“大考”,尤其是对一线工人。大促期间的订单量激增,尤其是对于饮料、矿泉水、牛奶等低值消费品来说,这种商品的搬运、分拣、打包等工作耗时耗力,给一线物流工人造成了巨大压力。据测算,大促期间,一件饮料酒

我要回帖

更多关于 手机内存不足怎么清理 的文章

 

随机推荐