深度学习之caffe框架的认知与理解

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

控制科学前沿技术讲座结课论文1深度学习之caffe框架的认知与理解许楠(电气工程与自动化学院控制科学与工程学号:6120160149)摘要:通过对深度学习框架Caffe基本认识来了解深度学习的基本概念,明白Caffe的工作原理和基本结构以及各结构部分的主要功能,熟悉C++代码。关键词:框架,Caffe,结构,C++DeeplearningofthecaffeframeworkofcognitionandunderstandingXuNan(SchoolofElectricalEngineeringandAutomationControlScienceandEngineeringstudentID:6120160149)Abstract:ThroughthebasicunderstandingofthedepthoflearningframeworkCaffetounderstandthebasicconceptsofdeeplearning,understandCaffe'sworkingprincipleandbasicstructureandthemainpartofthestructureofthemainfunctions,familiarwithC++code.Keywords:frame,Caffe,structure,C++0引言近年来,人工智能从初步探索到逐步应用到我们身边的民用生活领域,可谓是热度不减。而且大有愈演愈烈之势。众多的学术专家投身于人工智能领域的研究工作,随之也产生了一大批的学科泰斗,为我们智能化发展构建了一个清晰的发展脉络与前景。而深度学习是人工智能方面一个新的领域,在智能识别和机器视觉方面具有良好的应用效果,且必定会有广阔的应用前景。深度学习作为机器学习的一个分支,具有传统图像处理而无法达到的分类准确率,在大数据的现实社会背景下,能够将成千上万的检测目标清晰准确的区分开来,这种超强的学习能力将机器学习又推向了一个新的高度。深度学习产生于对于神经网络的分析,通过构建多隐层人工神经网络,达到有监督或者无监督学习的深层学习效果。之所以命名为深度学习,是相对于传统机器学习的浅度学习而言的。因为传统的人工神经网络,大部只包含输入层和输出层两层,至多有一层中间层。而深度神经网络,则通过将中间层构建为多层,包括卷积层、池化层、全连接层等多隐层加强机器的学习是能力,各种实验结果表明,在构建合适的层之后,学习能力将会大幅度的提高。Caffe框架是一个被广泛使用的开源深度学习框架(在TensorFlow出现之前一直是深度学习领域GitHubstar最多的项目)。他由加州大学伯克利分校的贾扬清教授团队创建,专门用来进行深度学习模型训练并测试的一种学习框架,它在当前的主流深度学习框架中具有一些无法比拟的优势。但近年来,随着Google投入开发和其拥有的强大财团和人才团队的支持创建的Tensorflow深度学习框架的强势冲击下,用户数量有下降的趋势。但相对于Tensorflow来说,Caffe还是拥有其独特的优势,比如其容易上手,网络结构都是以配置文件形式定义,不需要用代码设计网络;训练速度快,能够训练state-of-the-art的模型与大规控制科学前沿技术讲座结课论文2模的数据;[1]组件模块化,可以方便地拓展到新的模型和学习任务上等优势。Caffe非常适合深度学习初学者的入门,上手快,容易构建训练网络,这也是其老用户钟爱的不舍放手的重要方面。本篇文章就是对于像我一样的深度学习初学者对于学习工具的简单认识与了解记录并分析。探讨其中的奥妙和神奇之处,寻找其中的不足与解决的难点。为我们今后更加深入的学习提供一个较好的认知基础。1初识Caffe在引言中我们知道了Caffe的主要作用是用来训练和测试深度学习神经网络的一个工具以及它所具有的各种优势,那么我们再来了解它的主要结构。Caffe是用C++边写的深度学习框架,大量使用了类封装、继承、多态,所以也可以用来学习C++语言特性。Caffe类数目众多,但通过面向编程(OOP)方式组织的很好[2]。Caffe可以在我们大众熟悉的windows系统下配置,也可以在编程开发人员常用的linux系统下完成配置,当然我们如果想要深入的学习深度学习,并将其当成自身的事业来讲,建议还是用linux系统配置,因为其开发者就是针对linux系统来开发的,windows系统后来才开放,且某些地方不够完善,如果学者只是用来简单了解或是作为研究内容的一项了解则利用windows也可。本文针对的是ubuntu14.04(linux的一种)系统下的Caffe来讲述。我们先来简单的了解一下ubuntu系统。是一个以桌面应用为主的开源GNU/Linux操作系统,Ubuntu是基于DebianGNU/Linux,支持x86、amd64(即x64)和ppc架构,由全球化的专业开发团队(CanonicalLtd)打造的。Ubuntu基于Debian发行版和GNOME桌面环境,而从11.04版起,Ubuntu发行版放弃了Gnome桌面环境,改为Unity,与Debian的不同在于它每6个月会发布一个新版本。Ubuntu的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。Ubuntu具有庞大的社区力量,用户可以方便地从社区获得帮助[3].。Ubuntu对GNU/Linux的普及特别是桌面普及作出了巨大贡献,由此使更多人共享开源的成果与精彩[3]。读者可自行在ubuntu官网下载所需要的系统版本并自行安装且完全开源免费。如图1-1为ubuntu14.04版系统主见面。[1]1赵永科.深度学习-21天实战caffe[M].北京:电子工业出版社,2016:83-170[2]2三名狂客.主流深度学习框架对比.,2017.06.20[3]3百度百科.Ubuntu百度词条.=sdX12GC1lhrc_M6p6MoxmJ-sz4L_fXgX9jFwzyEWj4H-sXVjPD1j7RlNr9mBGkLIZV3OHfi4k2vqyPXMsOsuDa,2017.06.20控制科学前沿技术讲座结课论文3图1-1ubuntu14.04系统主界面图Ubuntu系统的主要命令通过终端来执行(如图1-2为终端命令窗口图),我们的Caffe框架配置在ubuntu主文件夹下。具体配置方法不做阐述,在网上的论坛博客有无数的资源可供读者参阅。如图1-3为caffe在主文件夹下面的位置(其他还有一些配置caffe所需要的依赖库文件夹,如opencv、glog、boost等)。图1-2终端命令窗口控制科学前沿技术讲座结课论文4图1-3caffe在主文件夹下的位置我们用终端在caffe的根目录下执行tree命令就可以以树状图的方式清晰的看到caffe所包含的各个结构,包括每个文件夹的位置,每个文件夹所包含的文件,如图1-4tree命令示意图。在命令结果中我们可以发现caffe中包括的文件有cmake、data、distribute、build等文件夹。图1-4tree在caffe根目录下的命令2熟悉caffe的主要内容在前面一节中,我们对caffe有了一个很简单的认识,本节则主要讲述的是caffe各个子文件的内容及其作用。下面罗列了caffe框架所包含的主要内容及其作用,如表2-1所示[1](二级子文件的具体内容不做详解,请读者自行查阅资料了解)。表2-1caffe子文件夹及其作用子文件夹作用build编译结果的存放处,子目录结构与主目录类似控制科学前沿技术讲座结课论文5cmake使用CMake编译时使用data用于存放原始数据及数据获取脚本distribute编译后生成发布包的位置,用于迁移docker同样是为了便于迁移,使用了Docker工具docsdoxygen工程文件放在此处,这里可生成Cafferef_man.pdfexamples存放着caffe的简单例程includeCaffe头文件集中存放于这个目录matlab使用于Matlab做Wrappermodels存放示例模型Python用于PythonWrapperscripts存放脚本srcCaffe源码tools常用工具的源码这其中,我们想要了解caffe工作的具体原理,那么最重要的就是要阅读caffe的源码,庆幸的是caffe源码完全开源,读者能够仔细的阅读每一条源码。源码的位置位于caffe文件夹下src文件夹。而阅读源码的路线最好是从src/caffe/proto/caffe.proto文件开始,了解基本数据结构内存对象和磁盘文件的一一映射关系。而第二步就是看头文件,也就是include文件夹下的文件,通过头文件类声明理解整个框架,掌握这些类的使用方法。之后就是有正对性的去阅读cpp和cu文件。因为caffe的开放性,学习者可以根据自己的不同需求根据规则来改动或者创造我们所需要的不同文件来实现目标。例如假如使用了新的卷积算法,需要自己实现相应的ConvolutionLayer,我们可以只需从框架中已有的ConvolutionLayer来派生一个新类MyConvolutionLayer,然后将前向传播计算、反向传播计算按自己的算法实现即可。在模型学习中,学习者可以编写各类工具,集成到caffe内部。在tools文件夹下有很多的实用工具(如训练模型、测试模型、特征提取、转换数据格式等),可以根据需要修改。另外,也可以学习用Python或Mtlab包装caffe的方法,便于调节模型训练效果[4]。3Caffe数据结构在caffe中的每一个网络模型使用Net表示,而Net又是由多个Layer堆叠而成的,如图3-1所示。[4]4FirasAbuzaid,StefanHadjis,etal.CaffeconTroll:ShallowIdeastoSpeedUpDeeplearning[J].Statisti-cs.2015.1控制科学前沿技术讲座结课论文6SoftmaxLossLayerfc1InnerProductLayerWXyDataLayerdatadiffsdiffsdatadatadiffsdatadiffs图3-1Caffe数据结构3.1Blob的了解Caffe中的网络Net是按照我们的设计文件来搭建的,而这些搭建的个体又是Layer,构成Layer的就是Blob。Caffe使用称为Blob的4维数组用于存储和交换数据。Blob提供了统一的存储器接口,持有一批图像或其他数据、权值、权值更新值。Blob在内存中表示四维数组,维度从低到高为(width_,height_,channels_,num_),其中,width_和height_表示图像的宽和高,channels_表示颜色通道RGB,num_biaoshi第几帧,用于存储数据或权值(data)和权值更新值(diff),在进行网络计算时,每层的输入、输出都需要通过Blob对象缓冲,Blob是caffe的基本存储单元,我们可以在caffe.proto文件中查看其数据结构的具体描述,在include/caffe/blob.hpp文件中查看其声明,在src/caffe/blob.cpp文件中查看其具体的实现过程,通过这些一系列的阅读我们可以清晰的发现blob的具体实现过程[5]。3.2Layer的解释Layer是caffe基本的计算单元,至少有一个输入Blob(BottomBlob)和一个输出Blob(TopBlob),部分Layer带有权值(Weight)和偏置项(Bias),有两个运算方向:前向传播(Forward)和反向传播(Backward),其中前向传播计算会对输入的Blob进行某种处理[5]5ChristophWick.DeepLearning[J].Informatik-Spektrum.207,V

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功