深度学习:主流框架和编程实战.html.pdf

上传人:紫竹语嫣 文档编号:5518682 上传时间:2020-05-28 格式:PDF 页数:109 大小:18.37MB
返回 下载 相关 举报
深度学习:主流框架和编程实战.html.pdf_第1页
第1页 / 共109页
深度学习:主流框架和编程实战.html.pdf_第2页
第2页 / 共109页
深度学习:主流框架和编程实战.html.pdf_第3页
第3页 / 共109页
深度学习:主流框架和编程实战.html.pdf_第4页
第4页 / 共109页
深度学习:主流框架和编程实战.html.pdf_第5页
第5页 / 共109页
点击查看更多>>
资源描述

《深度学习:主流框架和编程实战.html.pdf》由会员分享,可在线阅读,更多相关《深度学习:主流框架和编程实战.html.pdf(109页珍藏版)》请在三一文库上搜索。

1、前言 自20世纪80年代以来,机器学习已经在算法、理论和应用等方面取得了巨大成功,广泛应用于产业界与学术界。简单来说,机器学习就是通过算法使得机器能从大量历史数据中学习规律,从而对新的 样本完成智能识别或对未来做预测。深度学习是一种机器学习方法,在一些最新的研究领域和新的应用背景下,可用数据量的激增、计算能力的增强以及计算成本的降低为深度学习的快速发展铺平了道 路,同时也为深度学习在各大领域的应用提供了支撑。自AlphaGo被提出并成功击败职业围棋手后,“深度学习”这一概念快速进入人们的视野并在业界引起了轰动,其因强大的特征提取能力以及灵活性 在国内外各大企业中掀起一阵狂潮,在语音识别、图像识

2、别和图像处理领域取得的成果尤为突出。 本书是以实践案例为主的深度学习框架结合编程实战的综合性著作,将带领读者逐步掌握深度学习需要的数据处理、调整参数、运行实例和二次编码,不仅帮助读者理解理论知识,而且能够使读者熟 练掌握各种深度学习框架下的编程控制。本书配有大量的实践案例,既便于课堂教学,又便于学生自学。此外本书还配有同步PPT课件和程序源码,可供教师进行实验课程辅导。 本书介绍了四种深度学习框架(TensorFlow、Caffe、Torch、MXNet)的运行原理,配合实例介绍了框架的详细安装、程序设计、调参和二次接口的详细编程过程,引领读者完整搭建深度学习框 架,相信本书能够从实战的角度帮

3、助读者快速掌握和提高深度学习编程的技能。 全书内容可分为绪论、四大框架、迁移学习和并行计算/交叉验证四大部分,共7章。 第1章讨论深度学习与机器学习的关系、深度学习与统计学的关系、深度学习框架、深度学习中涉及的优化方法以及对深度学习的展望五个方面的内容,从理论上对深度学习进行全面深刻的剖析,旨在 为后续学习提供理论铺垫与指导。 第2章对TensorFlow深度学习框架进行详细介绍,主要包括TensorFlow运作原理、模型构建、框架安装,并进一步介绍了TensorFlow框架下具体网络的图像分类编程实现以及详细代码的解读。 第3章从理论与实战两方面对Caffe深度学习框架的发展、结构以及具体的

4、搭建过程进行详细介绍,并在Caffe深度学习框架下构建全卷积神经网络(Fully Convolutional Network,FCN),用该网络 进行图像语义分割的实战编程,对该案例程序代码进行详细解读。 第4章介绍Torch深度学习框架的基础知识,同时介绍Torch深度学习框架中使用的Lua语言;按照Torch框架的安装过程,以一个具体的目标检测实例为出发点,详细介绍Torch的类和包的用法以及构 建神经网络的全过程,最后介绍Faster R-CNN的方法和实例。 第5章对MXNet框架进行详细介绍,包括MXNet的基本概念和特点、MXNet的安装过程等,利用自然语言处理的实例来进一步展示M

5、XNet在深度学习方面的应用实战。 第6章介绍迁移学习发展、迁移学习的类型与模型,并以实际案例对迁移学习的过程进行详细介绍与分析。 第7章在深度学习的背景下分别对并行计算和交叉验证这两种方法进行详细介绍。 本书既可作为大学本科、研究生相关专业教材,也适用于各种人工智能、机器学习的培训与认证体系,同时可供广大深度学习开发人员参考。 本书由多人合作完成,其中,第1章由太原理工大学强彦编写,第2章由太原理工大学赵涓涓编写,第3章由太原理工大学王华编写,第4章由太原理工大学肖小娇编写,第5章由晋中学院董云云编写, 第6章由太原理工大学马瑞青编写,第7章由大同大学傅文博编写,全书由强彦审阅。 本书在撰写

6、过程中得到了赵鹏飞、罗嘉滢、肖宁、高慧明、吴保荣等项目组成员和业内专家的大力支持和协助,在此一并表示衷心的感谢! 由于作者水平有限,不当之处在所难免,恳请读者及同仁赐教指正。 第1章 绪论 近些年,深度学习因在许多领域都取得了耀眼的成绩和突破性的进展而受到学术界及工业界的广泛关注,本章将分别从深度学习与机器学习的关系、深度学习与统计学的关系、深度学习框架、深度学 习中涉及的优化方法以及深度学习展望五个方面对深度学习进行全面深刻的剖析,旨在为后续学习提供理论铺垫与指导。 1.1 机器学习与深度学习 斯坦福大学终身教授、ImageNet数据库的缔造者、现任Google Cloud首席科学家的华裔科

7、学家李飞飞认为“人工智能将成为新的生产力,成为第四次工业革命的主要推动力之一”。人工智能重在实 现机器智能,实现的方式为机器学习。作为人工智能的重要分支,机器学习主要研究的是如何使机器通过识别和利用现有知识来获取新知识和新技能。自20世纪80年代以来,机器学习已经在算法、理论和 应用等方面都取得巨大成功,而被广泛应用于产业界与学术界。简单来说,机器学习就是通过算法使得机器能从大量历史数据中学习规律,从而对新的样本完成智能识别或对未来做预测。 而深度学习是机器学习的一个分支和新的研究领域,如今在大数据的背景下,可用数据量的激增、计算能力的增强以及计算成本的降低为深度学习的进一步发展提供了平台,同

8、时也为深度学习在各大 领域中的应用提供了支撑。自AlphaGo被提出并成功击败职业围棋手后,“深度学习”这一概念快速进入人们的视野并在业界引起了轰动,其因强大的特征提取能力以及灵活性而在国内外各大企业中掀起 一阵狂潮,在语音识别、图像识别和图像处理领域取得的成果尤为突出。深度学习的本质在于利用海量的训练数据(可为无标签数据),通过构建多隐层的模型,去学习更加有用的特征数据,从而提高数 据分类效果,提升预测结果的准确性。 本节将从时期阶段发展和模型结构发展的角度介绍机器学习与深度学习之间的关系,并在此基础上从六个方面对机器学习和深度学习进行对比,从而进一步阐述二者之间的关系。 1.1.1 机器学

9、习与深度学习的关系 机器学习的发展历程大致可以分为五个时期,而伴随着机器学习的发展,深度学习共出现三次浪潮。接下来,以机器学习的发展作为主线来介绍不同时期机器学习与深度学习之间的关系。 第一个时期从20世纪50年代持续至20世纪70年代,由于在此期间研究人员致力于用数学证明机器学习的合理性,因此称之为“推理期”。在此期间深度学习的雏形出现在控制论中,随着生物学习理论 的发展与第一个模型的实现(感知机,1958年),其能实现单个神经元的训练,这是深度学习的第一次浪潮。 第二个时期从20世纪70年代持续至20世纪80年代,由于在这个阶段费根鲍姆(Edward Albert Feigenbaum)等

10、机器学习专家认为机器学习就是让机器获取知识,因此称之为“知识期”,在此期间深 度学习主要表现在机器学习中基于神经网络的连接主义。 第三个时期从20世纪80年代持续至20世纪90年代,这个时期的机器学习专家主张让机器“主动”学习,即从样例中学习知识,代表性成果包括决策树和BP神经网络,因此称这个时期为“学习期”。 在此期间深度学习仍然表现为基于神经网络的连接主义,而其中BP神经网络的提出为深度学习带来了第二次浪潮。其实在此期间就存在很好的算法,但由于数据量以及计算能力的限制致使这些算法的良好 效果并没有展现出来。 第四个时期从20世纪初持续至21世纪初,这时的研究者们开始尝试用统计的方法分析并预

11、测数据的分布,因此称这个时期为“统计期”,这个阶段提出了代表性的算法支持向量机。而此时的深度 学习仍然停留在第二次浪潮中。 第五个时期从20世纪初持续至今,在这个时期神经网络再一次被机器学习专家重视。2006年Hinton及其学生Salakhutdinov发表的论文Reducing the Dimensionality of Data with Neural Networks标志着深度学习的正式复兴,该时期掀起深度学习的第三次浪潮,同时在机器学习的发展阶段中被称为“深度学习”时期。此时,深度神经网络已经优于与之竞争的基于其他机器学习的技术以 及手工设计功能的AI系统。而在此之后,伴随着数据量的

12、爆炸式增长与计算能力的与日俱增,深度学习得到了进一步的发展。 根据机器学习的模型结构,认为机器学习有两次里程碑式的变革。第一次变革为浅层学习,所谓浅层学习是指网络层数较少(多为一层)的人工神经网络。称其为第一次变革主要是因为在此阶段提出 了反向传播算法,该算法的提出可以使人工神经网络模型从大量的训练样本中“学习”出统计规律,从而对未知事件做出预测。第二次变革为深度学习,区别于浅层神经网络,深度学习强调了模型结构的 深度,同时明确突出了特征学习的重要性,即通过逐层特征变换,将样本在原空间的特征变换到一个新特征空间,从而更加容易地进行分类或预测。 总之,无论从发展历程的角度还是从模型结构的角度出发

13、,深度学习都与机器学习息息相关,并且在机器学习领域中占有重要地位,影响着机器学习的发展趋势。 1.1.2 传统机器学习与深度学习的对比 传统机器学习与深度学习在理论与应用上都存在差异,下面将分别从数据依赖、硬件支持、特征工程、问题解决方案、执行时间以及可解释性这六个方面对传统机器学习与深度学习的差别进行比较。 数据依赖:深度学习和传统机器学习最重要的区别是前者的性能随着数据量的增加而增强。如果数据很少,深度学习算法性能并不好,这是因为深度学习算法需要通过大量数据才能很好地理解其中蕴 含的模式。在这种情况下,使用人工指定规则的传统机器学习占据上风。 硬件支持:深度学习算法严重依赖于高端机,而传统

14、机器学习在低端机上就可以运行。因为深度学习需要进行大量矩阵乘法操作,而GPU可以有效优化这些操作,所以GPU成为其中必不可少的一部 分。 特征工程:特征工程将领域知识输入特征提取器,降低数据复杂度,使数据中的模式对学习算法更加明显,并得到更优秀的结果。从时间和专业性方面讲,这个过程开销很大。在机器学习中,大多数 使用的特征都是由专家指定或根据先验知识来确定每个数据域和数据类型。比如,特征可以是像素值、形状、纹理、位置、方向。大多数传统机器学习方法的性能依赖于识别和抽取这些特征的准确度。 问题解决方案:当使用传统机器学习方法解决问题时,经常采取化整为零,分别解决,再合并结果的求解策略。而深度学习

15、主张端到端的模型,即输入训练数据,直接输出最终结果,让网络自己学习 如何提取关键特征。如图1-1所示为传统机器学习和深度学习对比流程图。 图1-1 传统机器学习和深度学习对比流程图 执行时间:深度学习需要进行很长时间的训练,因为深度学习中很多参数都需要进行远超正常水平的时间训练,如ResNet大概需要两周时间从零开始完成训练,而机器学习只需要从几秒到几小时不等 的训练时间。测试所需要的时间就完全相反,深度学习算法运行只需要很少的时间。 可解释性:假定使用深度学习给文章自动评分,会发现性能很不错,并且接近人类评分水准,但它不能解释为什么给出这样的分数。在运行过程中可以发现深度神经网络的哪些节点被

16、激活,但不知道 这些神经元是对什么进行建模以及每层在干什么,所以无法解释结果。另一方面,机器学习算法如决策树按照规则明确解释每一步做出选择的原因,因此像决策树和线性/逻辑回归这类算法由于可解释性良 好,在工业界应用很广泛。 1.2 统计学与深度学习 统计学是一门古老的学科,其作为机器学习的理论基础这一事实在从20世纪60年代就开始被学术界所认可。直到20世纪90年代,伴随着统计学理论的基本成熟,研究者们开始尝试用统计学的方法分析 并预测数据的分布,由此产生了著名的支持向量机算法,如今这种算法已被广泛应用于数据分析、模式识别、回归分析等各个领域。 1.2.1 统计学与深度学习的关系 深度学习作为

17、机器学习中重要的分支,因此与统计学同样具有密不可分的关系。通常可以将统计学分为两大类,分别为用于组织、累加和描述数据中信息的描述统计学和使用抽样数据来推断总体的推 断统计学。深度学习则是通过大量的样本数据学习总体规则的方法,可见深度学习是统计学对实践技术的延伸。 另外,实际的应用领域中经常需要处理的数据都具有随机性和不确定性,对这些数据最好的描述方式就是通过概率来进行描述。例如,在图像识别中,若要对模糊或残缺的图像进行识别,即在不确定 的条件下实现图像的正确识别,基于统计学的深度学习由于可以处理数据的随机性以及不确定性,因此可以在恶劣的条件下实现图像的精准识别。 深度学习的特点在于先设计能够自

18、我学习的神经网络,然后将大量的数据输入网络中进行训练,通过训练神经网络能够从数据集中学到数据的内在结构和规律,从而对新数据做出预测。 从统计学的角度来看,深度学习用来训练的数据集即为样本,学习的过程即为对总体信息进行估计。对于无监督学习来说,每一个输入样本是一个向量,学习过程相当于要估计出总体的概率分布。而 对于监督学习来说,每个输入样本x还对应一个期望的输出值y,称为label或target,那么学习的过程相当于要估计出总体的条件概率分布。这样,当系统遇到新的样本时,就能给出对应的预测值y。 1.2.2 基于统计的深度学习技术 最典型的基于统计的深度学习技术有受限玻耳兹曼机以及生成对抗式网络

19、。 受限玻耳兹曼机(Restricted Boltzmann Machine,RBM)是一种可用随机神经网络来解释的概率图模型。随机神经网络的核心在于在网络中加入概率因素,而其中的随机是指这种网络中的神经元 是随机神经元,其输出只有两种状态(0或1),而状态的取值根据概率统计的方法确定。RBM属于深度学习中常用的模型或方法,其结构如图1-2所示。 图1-2 RBM结构图 其中,下层为输入层,包括n个输入单元vn,用来表示输入数据;上层为隐藏层,包含m个隐藏层单元hm,RBM具有层内无连接、层间全连接的特征,这一特点可以保证RBM各层之间的条件独立 性。 由于RBM为概率模型,而训练RBM网络的

20、实质就在于能够使RBM所表达出的概率分布尽可能接近真实样本的分布。而实现这个目的RBM经典训练算法就是对比散度(Contrastive Divergence,CD) 算法,即在每次训练过程中,以数据样本为初始值,通过Gibbs采样获取目标分布的近似采样,然后通过近似采样获得目标梯度,取得最终的结果。简单来说,统计学在受限玻耳兹曼机中的应用过程为对 图像进行联合分布概率的描述,通过训练可以使RBM“学”到输入数据的统计规律,从而达到提取特征的目的。 RBM网络是以统计学为基础进行构建和训练的,是最典型的基于统计的深度学习技术。 生成对抗式网络(Generative Adversarial Net

21、works,GAN)是一种新型网络,是由Goodfellow等人在2014年提出来的。其基本思想源自博弈论中的二人零和博弈,网络模型由一个生成网络和一个 判别网络构成,生成网络用来学习样本的真实分布并用服从某一分布(高斯分布或均匀分布)的噪声生成新的数据分布,判别网络用来判别输入是真实样本还是生成网络生成的样本,通过生成网络与判别 网络的对抗学习进行网络的训练。GAN的优化过程是极小极大博弈(Minimax game)问题,具体是指判别网络的极大化(即判别网络要尽可能区分真实样本和生成网络生成的样本)和生成网络的极小 化,即生成网络生成的样本要尽可能“欺骗”判别网络,使其认为是真实的样本,优化

22、目标为达到纳什均衡,使生成网络估测到数据样本的分布。GAN的计算流程与结构如图1-3所示。 图1-3 生成对抗式网络流程与结构 生成对抗式网络作为一种基于统计学的新型深度学习技术,通过模型学习来估测其潜在分布并生成同分布的新样本,被广泛应用于图像和视觉、语音与语言、信息安全等领域,如今许多研究者试图将 其与强化学习结合进行进一步的研究。 作为深度学习的重要理论基础,未来统计学还有非常大的发展空间。因为深度学习模型具有较好的非线性函数表示能力,根据神经网络的通用近似理论(universal approximation theory)可知,对 于任意的非线性函数一定可以找到一个深度学习网络来对其进

23、行表示,但是“可表示”并不代表“可学习”,因此需要进一步了解深度学习的样本复杂度,即需要多少训练样本才能得到一个足够好的深度 学习模型。这些问题都有待于从理论层面进行突破,统计学对深度学习的进一步发展有着十分重要的意义。 1.3 本书涉及的深度学习框架 随着深度学习技术的不断发展,越来越多的深度学习框架得到开发。目前,最受研究人员青睐的深度学习框架有TensorFlow、Caffe、Torch和MXNet。TensorFlow框架作为一个用于机器智能的开源 软件库,以其高度的灵活性、强大的可移植性等特点而成为目前深度学习的主流框架之一;而对于Caffe,研究者可以按照该框架定义各种各样的卷积神

24、经网络框架,该框架以表达方便、速度快、组件模块 化等优势同样成为当今常用的深度学习网络框架;Torch是一个广泛支持机器学习算法的科学计算框架,其使用简单快速的脚本语言LuaJIT以及底层的C/CUDA进行实现,因此以易于使用且高效的特点而成 为当下流行的深度学习框架;MXNet是一个以高效和灵活为目的设计的开源深度学习框架,支持命令式编程和声明式编程。这四种框架以各自的优势特点而受到广大研究者的认可,在本书第25章将会就 这四种框架的理论内容、具体搭建过程(包括涉及的代码描述)以及应用实例进行详细的介绍与分析。 1.4 优化深度学习的方法 目前,深度学习在多种目标分类和识别任务中取得优于传统

25、算法的结果,并产生大量优秀的模型,使用迁移学习方法将优秀的模型应用在其他任务中,可以达到在减少深度学习训练时间的前提下,提 升分类任务性能,同时降低对训练集规模的依赖,关于迁移学习及其实例分析将在第6章进行详细介绍。 除此之外,随着深度学习模型中网络层数的加深、参数的增多、计算量的加大,计算速度慢、资源消耗多的问题逐渐成为不可忽视的挑战,以保证深度学习训练精度的同时加快训练速度为目的的并行 计算与交叉验证运用而生,这两种方法的详细介绍以及实例分析将在第7章进行。 1.5 深度学习展望 随着硬件计算能力的提升以及大规模数据集的出现,深度学习已经成为机器学习中一个重要的领域,下面对深度学习的一些模

26、型进行介绍。 卷积神经网络(Convolutional Neural Network,CNN)是一类适用于处理图像数据的多层神经网络。CNN从生物学上的视觉皮层得到启发:视觉皮层存在微小区域的细胞对于特定区域的视野十分 敏感,这就对应着CNN中的局部感知区域。在CNN中,图像中的局部感知区域被当作层次结构中的底层输入数据,信息通过前向传播经过网络中的各个层,每一层都由过滤器构成,以便能够获得观测数据 的一些显著特征,局部感知区域能够获得一些基础的特征,还能提供一定程度对位移、拉伸和旋转的相对不变性。CNN通过结合局部感知区域、共享权重、空间或者时间上的降采样来充分利用数据本身包 含的局部性等特

27、征,优化网络结构;通过挖掘数据空间上的相关性,来减少网络中可训练参数的数量,以达到改进反向传播算法效率。 长短期记忆(Long Short-Term Memory,LSTM)网络主要适用于处理序列数据。LSTM网络是一种特殊的RNN(循环神经网络),但网络本质与RNN是一样的。在传统的神经网络模型中,网络的 传输是从输入层到隐藏层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。这其中存在一定的问题,即传统的神经网络对于处理时序问题无能为力。LSTM网络可以解决长时期依赖的问 题,主要是因为LSTM网络有一个处理器,其中放置了“三扇门”,分别称为输入门、遗忘门和输出门。一个信息进入L

28、STM网络当中,可以根据规则来判断是否有用,只有符合算法认证的信息才会留下, 不符合的信息则通过遗忘门被“遗忘”。所以可以很好地处理序列数据。 受限玻耳兹曼机(RBM)是一种用随机神经网络来解释的概率图模型。RBM适用于处理语音、文本类数据。当使用RBM建立语音信号模型时,该模型使用对比散度(CD)算法进行有效训练,学习与 识别任务关联性更高的特征来更好地得到信号的值。在文档分类问题中,直接将不规范的文档内容作为输入会产生过高的输入数据维数,而无法对其进行处理,因此有必要对文档进行预处理,选择词组出 现的频率作为特征项以提取能够表示其本质特征的数据,使用RBM可从原始的高维输入特征中提取可高度

29、区分的低维特征,然后将其作为支持向量机的输入进行回归分析,从而实现对文档的分类。 生成对抗式网络(GAN)适用于处理图像数据,估计样本数据的分布,解决图片生成问题。GAN包含一个生成模型(Generative Model)G和一个判别模型(Discriminative Model)D,生成模型G 捕捉样本数据的分布,即生成图片;判别模型D是一个二分类器,判别图片是真实数据还是生成的。在训练过程中,首先固定一方,再更新另一个模型的参数,以此交替迭代,直至生成模型与判别模型无 法提高自己,即判别模型无法判断一张图片是生成的还是真实的。模型的优化过程是一个二元极小极大博弈问题,在G和D的任意函数空间

30、中,存在一个唯一的解,G恢复训练数据分布,D在任何地方都等 于0.5。该网络可以为模拟型强化学习做好理论准备,在缺乏数据的情况下,可以通过生成模型来补足。 深度学习算法在大规模数据集下的应用取得突破性进展,但仍有以下问题值得进一步研究。 1)无标记数据的特征学习。当前,标记数据的特征学习占据主导地位,但是对于标记数据来说,一个相当困难的地方在于将现实世界的海量无标记数据逐一添加人工标签,是很费时费力且不现实的。 所以,随着科学研究的发展,无标记数据的特征学习以及将无标记数据进行自动添加标签的技术会成为研究主流。 2)模型规模与训练速度、训练精度之间的权衡。一般地,在相同数据集下,模型规模越大,

31、则训练精度越高,训练速度越慢。对于模型优化,诸如模型规模调整、超参数设置、训练时调试等,其训练 时间会严重影响其效率。所以,如何在保证一定的训练精度的前提下提高训练速度是很有必要的一个研究课题。 3)大规模数据集的依赖性。深度学习最新的研究成果都依赖于大规模数据集和强大的计算能力,如果没有大量真实的数据集,没有相关的工程专业知识,探索新算法将会变得异常困难。 4)超参数的合理取值。深度神经网络以及相关深度学习模型应用需要足够的能力和经验来合理地选择超参数的取值,如学习速率、正则项的强度以及层数和每层的单元个数等,一个超参数的合理值取 决于其他超参数的取值,并且深度神经网络中超参数的微调代价很大

32、,所以有必要在超参数这个重要领域内做更进一步的研究。 在许多领域深度学习都表现出巨大的潜力,但深度学习作为机器学习的一个新领域现在仍处于发展阶段,仍然有很多工作需要开展,很多问题需要解决,尽管深度学习的研究还存在许多问题,但是现 有的成功和发展表明深度学习是一个值得研究的领域。 第2章 TensorFlow深度学习框架构建方法与图像分类的实现 Google公司不仅是大数据和云计算的领导者,在机器学习和深度学习领域也有很好的实践和积累,其内部使用的深度学习框架TensorFlow使深度学习爱好者的学习门槛越来越低。TensorFlow作为一 个用于机器智能的开源软件库,是目前深度学习的主流框架之

33、一,广泛应用于学术界与工业界。TensorFlow自开源至今,相继推出了分布式版本、服务器框架、可视化Tensorboard以及不胜枚举的模型在 该框架下的实现。 本章将对TensorFlow做详细的介绍,主要包括TensorFlow运作原理、模型构建和框架安装。之后,介绍该框架下具体网络的实现以及详细代码的解读。 2.1 TensorFlow概述 2015年11月9日,Google工程师发布人工智能系统TensorFlow并宣布开源,将此系统的参数公布给业界工程师、学者和具有编程能力的技术人员。Google工程师认为机器学习是未来新产品和新技术 的一个关键部分,这个领域的研究是全球性、高速度

34、的,但缺少一个通用型的工具。因此,TensorFlow应运而生。 2.1.1 TensorFlow的特点 TensorFlow是Google基于DistBelief研发的第二代人工智能学习系统,其命名来源于自身的运行原理。TensorFlow是一个采用数据流图(Data Flow Graph)、用于数值计算的开源软件库。数据流 图用节点(Node)和线(Edge)的有向图来描述数学计算。节点一般用来表示施加的数学操作,但也可以表示数据输入(Feed In)的起点/输出(Push Out)的终点,或者是读取/写入持久变量 (Persistent Variable)的终点。线表示节点之间的输入/输

35、出关系。这些数据线可以传输大小可动态调整的多维数据数组,即张量(Tensor)。张量从图中流过的直观过程是这个工具取名为TensorFlow 的原因。一旦输入端的所有张量准备好,节点将被分配到各种计算设备以完成异步操作,并行地执行运算。它灵活的架构让用户可以在多种平台上展开计算,如台式计算机中的一个或多个CPU(或 GPU)、服务器、移动设备等。TensorFlow最初用于机器学习和深度神经网络方面的研究,由于系统的通用性使其也可广泛用于其他计算领域。 TensorFlow的特点如下: 1)高度的灵活性:TensorFlow不是一个严格的神经网络库。只要用户可以将计算表示为一个数据流图,就可以

36、使用TensorFlow来构建图,描写驱动计算的内部循环。TensorFlow提供了有用的工具 来帮助用户组装子图(常用于神经网络),用户也可以在TensorFlow的基础上编写自定义的上层库。定义顺手好用的新复合操作与写一个Python函数一样容易,而且也不用担心性能损耗。 2)真正的可移植性:TensorFlow既可以在CPU和GPU上运行,又可以运行于台式机、服务器、笔记本电脑等。TensorFlow还可以将训练好的模型作为产品的一部分用于手机App。TensorFlow同样 可以将模型作为云端服务运行在自己的服务器上,或者运行于Docker容器。 3)科研与产品无缝对接:Google科

37、学家利用TensorFlow尝试新的算法,其产品团队则用TensorFlow来训练和使用计算模型,并直接提供给在线用户。应用型研究者使用TensorFlow将想法迅速运用 于产品中,其也可以让学术性研究者更直接地分享代码,从而提高科研产出率。 4)自动求微分:基于梯度的机器学习算法受益于TensorFlow自动求微分的能力。用户只需要定义预测模型的结构,将这个结构和目标函数(Objective Function)结合在一起并添加数 据,TensorFlow将自动为用户计算相关的微分导数。 5)多语言支持:TensorFlow有一个合理的C+使用界面和一个易用的Python使用界面来构建和执行指

38、定的“图”。用户可以直接写Python/C+程序,也可以用交互式的iPython界面来使用 TensorFlow尝试新想法,它可以帮助用户将笔记、代码、可视化等有条理地归置好。此外TensorFlow还支持用户创造自己喜欢的语言界面,比如Go、Java、Lua、JavaScript或者是R语言。 6)性能最优化:由于TensorFlow对线程、队列、异步操作等给予了最佳支持,使其计算潜能得以有效发挥。TensorFlow可以将硬件的计算潜能全部发挥出来,可充分利用多CPU和多GPU。 2.1.2 TensorFlow中的模型 2.1.1节介绍了TensorFlow的诞生及特点,这一小节主要说明

39、TensorFlow的三种主要模型:计算模型、数据模型和运行模型。 (1)计算模型 计算图(Graph)是TensorFlow中一个最基本的概念,是TensorFlow的计算模型。TensorFlow中的所有计算都会被转化为计算图上的节点,可以把计算图看作一种有向图,TensorFlow中的每一个 计算都是计算图上的一个节点,而节点之间的边描述了计算之间的依赖关系。例如,通常在构建阶段创建一个计算图来表示和训练神经网络,然后在执行阶段反复执行图中的训练操作,使得参数不断优 化。在图的构建阶段,本质是各种操作的拼接组合,操作之间流通的张量由源操作产生,只有输出张量,没有输入张量。TensorFl

40、ow支持通过tf.Graph()函数来生成新的计算图。 图2-1中的每一个节点都是一个运算,每一条边都代表了计算之间的依赖,箭头方向代表依赖关系。例如,运算a和运算b不依赖任何关系,而有一条由a指向Add的边和一条由b指向Add的边,表示 Add运算是依赖于运算a和运算b的。 图2-1 可视化向量相加计算图 在TensorFlow程序中,系统会维护一个默认的计算图,通过tf.get_default_graph()函数可以获取当前默认的计算图,不同的计算图上的张量和运算不会共享。有效地整理TensorFlow中的资源同样也 是计算图的重要功能之一。在一个计算图中,可以通过集合(Collectio

41、n)来管理不同类别的计算资源,比如通过tf.add_to_collection函数可以将资源加入集合中,然后通过tf.get_collection获取集合中的 资源。 (2)数据模型 张量(Tensor)是TensorFlow中一个非常重要的概念,是TensorFlow的数据模型。在TensorFlow程序中,所有数据都可以通过张量的形式来表示。张量的最基本属性是维度,其中零维张量表示为标 量(Scalar),一维张量表示为向量(Vector),当维数n超过2时,张量就可以理解为n维数组,但在TensorFlow中张量并不是以数的形式实现的,只是对TensorFlow中运算结果的引用。在张量中

42、保存的 是如何得到数据的计算过程,而不是真正保存这些数据。 一个张量中主要保存的是其名字(Name)、维度(Shape)和类型(Dtype)。例如,张量名字作为张量的唯一标识符,描述了张量是如何计算出来的。张量维度描述的是张量的维度信息,比如维度 为零,则张量就可以表示为标量。每一个张量都有一个唯一的张量类型,在对张量进行运算前,TensorFlow首先会对张量进行类型检查,当发现类型不匹配时就会保存。对于张量的使用,其可以作为中间 计算结果进行引用,当一个计算包含很多中间结果时,使用张量可大大提高代码的可读性;同样,在计算图构造完成之后,也可以用张量来获得结果。 (3)运行模型 会话(Ses

43、sion)是拥有并管理TensorFlow程序运行时所有资源的概念,是TensorFlow的运行模型。当所有计算完成之后,需要关闭会话来帮助系统回收计算资源,否则就可能产生资源泄漏的问题。 TensorFlow中使用会话的模式一般有两种:一种模式需要明确调用会话生成函数和会话关闭函数,当所有计算完成之后,需要明确调用会话关闭函数以释放资源。然而,当程序因为异常退出时,会话关闭 函数可能不会被执行而导致资源的泄漏。另一种模式是利用Python上下文管理器的机制,只要将所有的计算放在with中即可。上下文管理器退出时会自动释放所有资源,这样既解决了因为异常退出时资源 释放的问题,同时也解决了忘记调

44、用会话关闭函数而产生的资源泄漏问题。在交互式环境下,通过设置默认会话的方式获取张量的取值更加方便,所以TensorFlow提供了一种在交互式环境下直接构建默认 会话的函数,使用此函数会自动将生成的会话注册为默认会话。 2.2 TensorFlow框架安装 TensorFlow要求的安装环境为Ubuntu 12+,CPU不低于4代i3处理器,内存不低于4GB,原因在于为虚拟机分配的内存在虚拟机启动之后会以1:1的比例从物理内存中划走。下面的步骤是在Ubuntu 12+上的TensorFlow安装过程,TensorFlow提供了许多安装方法,如使用pip、Docker、Virtualenv、Ana

45、conda或源码编译的方法,下面针对Anaconda作详细介绍。 2.2.1 基于Anaconda的安装 Anaconda是一个集成许多第三方科学计算库的Python科学计算环境,它使用conda作为自己的包管理工具,同时具有自己的计算环境,类似于Virtualenv。与Virtualenv一样,conda将不同Python 工程需要的依赖包存储在不同地方。TensorFlow上安装的Anaconda不会对之前安装的Python包进行覆盖。步骤如下: 1)Anaconda下载地址为https:/www.continuum.io/downloads,本实例选择Python 2.7。如图2-2所示

46、。 2)建立一个名为TensorFlow的conda计算环境,见图2-3(针对Python不同版本,建立不同环境): Python 2.7:conda create-n TensorFlow python=2.7 Python 3.6:conda create-n TensorFlow python=3.6 图2-2 下载Anaconda 图2-3 建立一个名为TensorFlow的conda计算环境 3)激活环境,用conda安装TensorFlow。 4)安装成功后,每次使用TensorFlow的时候需要激活conda环境。 5)激活TensorFlow环境,然后使用其中的pip命令安装T

47、ensorFlow(见图2-4): source activate TensorFlow 图2-4 激活TensorFlow环境 针对不同的Python版本以及用户是否有GPU,下面提供了不同的安装命令: 在Python 2.7、仅有CPU下安装TensorFlow: (TensorFlow) pip install-ignore-installed-upgrade https:/ 在Python 2.7、GPU可用下安装TensorFlow(要求CUDA工具包7.5和CuDNNv4): (TensorFlow) pip install -ignore-installed -upgrade h

48、ttps:/ 在Python 3.0以上、仅有CPU下安装TensorFlow: (TensorFlow) pip install -ignore-installed -upgrade https:/ 在Python 3.0以上、GPU可用下安装TensorFlow(要求CUDA工具包7.5和CuDNNv4): (TensorFlow) pip install -ignore-installed -upgrade https:/ 通过以上步骤,TensorFlow就安装成功了。当不使用TensorFlow的时候关闭环境: (TensorFlow)source deactivate 2.2.2 测试TensorFlow 以下有两个测试命令Test a和Test b,打开一个Python终端,输入命令,可以测试TensorFlow是否安装成功,见图2-5和图2-6。 Test a: import TensorFlow as tf hello = tf.constant(Hello, TensorFlow!) sess = tf.Session() print sess.run(hello) Hello, Tenso

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料


经营许可证编号:宁ICP备18001539号-1