Python+Tensorflow机器学习实战(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-26 14:10:35

点击下载

作者:李鸥

出版社:清华大学出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Python+Tensorflow机器学习实战

Python+Tensorflow机器学习实战试读:

前言

中的二维码下载。作者简介

李鸥,计算机科学硕士,曾就职支付宝,现任职某央企研究院,致力于人工智能的研究,对机器学习的原理、开发框架及其在不同场景中的应用有浓烈兴趣,在图形识别、文本识别、语音识别、数据挖掘方面有丰富实践经验,参与基于机器学习的用户行为分析以及某省部级项目研究。前言

2016年3月,谷歌公司的AlphaGo与职业九段棋手李世石进行了围棋人机大战,最终AlphaGo以4比1的总比分获胜,这引起了全球对人工智能的热议。同时,百度推出的无人驾驶,科大讯飞推出的“语音识别”,以及高铁进站的人脸识别的广泛应用,将机器学习转变为信息科技企业的研究与应用的常见内容,这也让我们的日常生活更为便捷。

其实,机器学习已经走过符号主义时代、概率论时代、联结主义时代,从最初的仅是专家研究的数学理论、经典算法,逐步发展并蜕变为可以为大部分项目直接使用的平台框架。

2015年11月9日,谷歌在GitHub上开源了TensorFlow框架,该框架是谷歌的机器学习框架,具有高度的灵活性和可移植性。在TensorFlow中,将各种经典算法特别是神经网络模型组织成一个平台,能够让我们更便捷地在目标领域实践机器学习算法。

TensorFlow作为最流行的机器学习框架之一,具有对Python语言的良好支持,这有效降低了进行机器学习开发的门槛,让更多的工程师能够以低成本投身到人工智能的浪潮中。TensorFlow框架能够支持CPU、GPU或Google TPU等硬件环境,让机器学习能够便捷地移植到各种环境中。

本书将全面阐述TensorFlow机器学习框架的原理、概念,详细讲解线性回归、支持向量机、神经网络算法和无监督学习等常见的机器学习算法模型,并通过TensorFlow在自然语言文本处理、语音识别、图形识别和人脸识别等方面的成功应用来讲解TensorFlow的实际开发过程。本书在语言上力求幽默直白、轻松活泼,避免云山雾罩、晦涩难懂。在讲解形式上图文并茂,由浅入深,抽丝剥茧。通过阅读本书,读者可以少走很多弯路,快速上手TensorFlow开发。本书特色1.内容丰富、全面

全书内容共分11章,从机器学习概述到TensorFlow基础,再到实际应用,内容几乎涵盖TensorFlow开发的所有方面。2.实例丰富、案例典型、实用性强

本书对每一个知识点都以实际应用的形式进行讲解,帮助读者理解和掌握相关的开发技术。本书还在最后提供了TensorFlow在图形识别、文本识别和语音识别等方面成功应用的实例,帮助读者提高实战水平。3.紧跟技术趋势

本书针对目前发布的TensorFlow的常用版本1.3进行讲解,并涉及1.6版本的变化,摒弃了以前版本中不再使用的功能,以适应技术的发展趋势。4.举一反三

本书写作由浅入深、从易到难,并注意知识点之间的联系,让读者掌握一个知识点后,能够触类旁通、举一反三,编写相应的代码。本书内容及体系结构

第1章简单讲述机器学习的发展、分类以及经典算法,介绍TensorFlow的发展和优势,并详细介绍不同操作系统环境下TensorFlow开发环境的准备过程。

第2章讲解TensorFlow的基础知识,包括基础框架、源代码结构、基础概念,并通过运行一个官方示例展示了可视化的调试。

第3章讲解TensorFlow在实际进行机器学习时的加载训练数据、构建训练模型、进行数据训练、评估和预测四大步骤中常用的方法和技巧。

第4章详细讲解机器学习算法中最基础的线性模型:回归模型和逻辑回归模型。

第5章讲解TensorFlow中支持向量机算法的基本原理及核函数,并使用SVM完成线性回归拟合、逻辑回归分类以及非线性数据分类等。

第6章对神经网络模型进行详细介绍,讲解神经元模型、神经网络层等基本原理,并讲解全连接神经网络、卷积神经网络和循环神经网络等主要神经网络的原理与计算过程,并在TensorFlow中使用具体案例讲解通用神经网络层的构建、卷积层的使用、池化层的使用、循环神经元的构建以及损失函数的选择等。

第7章主要介绍无监督学习的概念和经典算法。

第8章讲解TensorFlow在自然语言文本处理中的应用,如学写唐诗、影评分类以及智能聊天机器人等。

第9章讲解TensorFlow在语音处理方面的应用,如听懂数字、听懂中文以及语音合成等。

第10章讲解TensorFlow在图像处理方面的应用,如图像处理中的物体识别与检测、图像描述。

第11章讲解TensorFlow在人脸识别方面的应用,介绍人脸识别的原理和分类、人脸比对以及从人脸判别性别和年龄。本书读者对象

□ 初中级程序员。

□ 高等院校师生。

□ 培训机构学员。

□ 希望使用机器学习的工程师。致谢

在本书的成稿过程中,熊诺亚对书稿的完整性和系统性提出了宝贵的意见,在此,特别表示感谢。

本书对应的电子课件和实例源代码可以到http://www.tupwk.com.cn/downpage下载,也可通过扫描下方的二维码下载。编著者第1章 机器学习概述

本章介绍人工智能和机器学习的发展,讲解机器学习的主要框架,解释TensorFlow的作用、特性以及开发环境的准备过程。1.1 人工智能

毫无疑问,目前人工智能在全球的火热与AlphaGo(阿尔法狗)的战绩密不可分。2016年3月,谷歌公司的AlphaGo与职业九段棋手李世石进行围棋人机大战,最终以4比1的总比分获胜,这引起了全球热议。2017年年初,AlphaGo化身为Master,在棋类平台上横扫中日韩围棋高手,取得60连胜,再度引发全民对人工智能的讨论。

虽然人工智能是在AlphaGo战胜李世石之后才成了坊间谈资,引起所有人的关注,但人工智能的提出已经有近百年的历史。

早在20世纪50年代,计算机科学家就提出了“人工智能”的概念,想制造出和人类外形相同、能够与人类正常对话、能够自我学习的机器。阿兰·图灵还提出了著名的“图灵测试”来判定计算机是否智能:如果一台机器能够与人类展开对话而不被辨别出其机器身份,那么称这台机器具有智能。从此以后,人工智能就一直是人们在科研、工业以及电影中努力实现的目标,也确实在不断地发展。

现在,人工智能已经发展为一门广泛的交叉和前沿科学,涉及计算机科学、心理学、哲学和语言学等学科,也被广泛地应用到语音识别、图像识别、自然语言处理等领域。

在国际上,谷歌、微软、IBM等都有自己的人工智能项目,如谷歌的DeepMind、IBM的Watson、微软的Torque等项目。

国内的各大公司也积极投身于人工智能领域。百度成立了Apollo基金和DuerOS基金,推动中国AI的发展;腾讯创建了人工智能实验室AI Lab,专注于人工智能的基础研究;阿里巴巴成立的人工智能实验室,主要面向消费级的AI产品研发;搜狗向清华大学捐赠1.8亿元,一起成立了“天工智能计算研究院”等。目前这些公司也陆续推出了各自的产品:腾讯开发的机器人“Dreamwriter”,百度的无人驾驶,搜狗、科大讯飞等公司的“语音识别”,旷视科技的“Face++”人脸识别等。1.2 机器学习1.2.1 机器学习的发展

为了让计算机能够实现类似人类的智能,在计算机的实际实现上出现了两种完全不同的方向:一种是采用传统的编程技术,使系统呈现智能的效果;另一种是采用计算机训练学习的方式来实现智能的效果。一般来说,现在我们使用的机器学习都是通过算法来解析数据、学习数据的,然后据此对真实世界中的事件做出决策和预测。“机器学习”这一术语由IBM的科学家亚瑟·塞缪尔提出。他在1952年开发了一个跳棋程序,该程序能够观察当前位置,并学习一个隐含的模型,从而为后续动作提供更好的指导,并且随着该程序运行时间的增加,可以实现越来越可靠的后续指导。他针对这种计算机的实现能力提出了“机器学习”。

在机器学习领域,计算机科学家不断探索,基于不同的理论创建出不同的机器学习模型。从发展历程来说,大致经历了三个阶段:符号主义时代、概率论时代以及联结主义时代。

□ 符号主义时代(1980年左右)。以知识工程为主要理论依据,使用服务器或大型机进行架构运算,通过符号、规则和逻辑来表征知识和进行逻辑推理,常用的算法有规则和决策树,实用性有限。

□ 概率论时代(1990—2000年)。以概率论为主要理论依据,使用小型服务器集群进行架构运算,通过获取发生的可能性来进行概率推理,常用的算法有朴素贝叶斯或马尔可夫算法,具有可扩展的比较或对比功能,对许多任务都表现得足够好。

□ 联结主义时代(2010年左右)。以神经科学和概率为主要理论依据,使用云计算架构,通过使用概率矩阵和加权神经元来动态地识别和归纳模式,常用的算法有神经网络,能够让计算机“看懂图像”“听懂语言”,甚至能够分析人类在语言背后表达的情绪。

不同算法在不同应用场景下有着不同的表现,每一个阶段仅仅取得了某些领域的突破性进展,并没有完全颠覆前一阶段的成果。相信在后续的发展中,将会把符号规则理论、概率论、神经科学和进化论等理论相融合,并演变出不同的算法,通过多种学习方式获得知识或经验,推动机器学习继续发展。1.2.2 机器学习的分类

机器学习是计算机进行数据处理,找到数据间映射关系的过程。在进行数据处理分析时,对于输入的数据,有的是经过人工来定义数据标签的,方法是先找到数据的特征与其标签的映射关系,再凭借这种映射关系,对未进行标签定义的数据进行标签定义。输入的初始数据也有一些是没有经过人工定义数据标签的,只是单纯依靠数据处理分析来找到数据之间的标签映射关系。

可以按照输入的数据本身是否已被标定特定的标签将机器学习区分为有监督学习、无监督学习以及半监督学习三类。1.有监督学习

有监督学习(Supervised Learning)就是样本数据集中的数据,包括样本数据以及样本数据的标签。

进行学习的目的就是找到样本数据与样本数据标签的映射关系。通过对样本数据的不断学习、不断修正学习中的偏差,使得找到的映射关系更准确,从而不断提高学习的准确率。当学习完成后,再给予新的未知数据,能够依据学习的映射关系计算出相对正确的结果。由于样本数据中既包括数据也包括标签,因此训练的效果往往都不错。

有监督学习主要用于解决两大类问题:回归问题(Regression Problem)和分类问题(Classification Problem)。

回归问题就是通过对现有数据的分析,找到映射关系,对以后的事情进行预测的情况。比如,我们想预测未来房价会是多少。我们获取以前的房价与时间的数据,可以将这些数据看作多维度坐标系中的坐标点,通过回归分析,建立数据的关系模型,求出一个最符合这些已知数据集的解析函数,然后通过这个解析函数来预估未来的房价。对于解决回归问题,主要有线性回归(Linear Regression)、决策树(Decision Tree)、随机森林(Random Forest)、梯度提升决策树(Gradient Boosting Tree)、神经网络(Neural Network)等算法可供使用。

分类问题就是通过对现有数据的分析,找到数据间的联系与区别,对数据进行分类。比如,判断某地房价的“涨”与“跌”的问题。我们获取以前的房价、地区、户型和时间等数据,通过这些数据建立数据与“涨”和“跌”的关系模型。当输入新的值时,能够根据关系模型判断房价是“涨”还是“跌”了。对于解决分类问题,主要有逻辑回归(Logistics Regression)、决策树(Decision Tree)、随机森林(Random Forest)、梯度提升决策树(Gradient Boosting Tree)、核函数支持向量机(Kernel SVM)、朴素贝叶斯(Naive Bayes)、SVM线性分类(Linear SVM)、神经网络(Neural Network)等算法可供使用。2.无监督学习

无监督学习(Unsupervised Learning)就是在样本数据中只有数据,而没有对数据进行标记。无监督学习的目的就是让计算机对这些原始数据进行分析,让计算机自己去学习、找到数据之间的某种关系。

无监督学习与有监督学习的明显区别就是在样本数据中只有数据,没有标记。由于没有对数据进行标记,因此学习的结果也难以验证是否正确,也难以对学习的模型进行正确率的判断。对于无监督学习的这种特点,学习的思路和目的主要有两类:聚类(Clustering)和强化学习(Reinforcement Learning,RL)。

聚类就是对于未标记的数据,在训练时根据数据本身的数据特征进行训练,呈现出数据集聚的形式,每一个集聚群中的数据,彼此都有相似的性质,从而形成分组。比如我们使用的今日头条,它每天会收集大量的新闻,然后把它们全部聚类,就会自动分成娱乐、科技和政治等几十个不同的组,每个组内的新闻都具有相似的内容结构。

强化学习是游戏中常用的一种学习方式,是指在学习中增加一种延迟奖赏机制。通过学习过程中的延迟奖赏激励函数,可以让机器学习到当前状态下,执行哪一种操作使得最终的奖赏最多,从而让机器学习获得一种类似于决策的能力,比如AlphaGo也使用了这种强化学习方式。

用于无监督学习的经典算法有聚类算法、EM算法和深度学习算法等。3.半监督学习

半监督学习(Semi-Supervised Learning)是介于有监督学习和无监督学习之间的学习。一般来说,在半监督学习输入的数据样本中,存在一部分进行了标记的数据,但是大量存在的是没有进行标记的数据。

为了利用未标记的样本,必须先对未标记样本揭示的数据分布信息与类别进行假设,最常见的两种假设方式是聚类假设(Cluster Assumption)和流形假设(Maniford Assumption)。

对于聚类假设,是假设数据存在簇结构,同一个簇的样本属于同一个类别。对标记数据和未标记数据进行聚类,如果待预测样本与标记样本聚在一起,则认为待预测样本属于标记样本类。

对于流行假设,是假设数据分布在一种流行结构上,邻近的样本拥有相似的输出值。邻近的程度常用相似程度进行刻画。流行假设对输出值没有限制,相对于聚类假设而言,它的适用范围更广,可用于更多类型的学习任务。1.2.3 机器学习的经典算法

随着机器学习的不断发展,出现了许多经典算法,这些算法为我们解决实际问题提供了强大的支持。1.线性模型

线性模型就是使用简单的公式通过一组数据点来查找最优拟合线。然后,通过已知的变量方程,求出需要预测的变量。对于不同形式的线性模型算法,主要包括线性回归(Linear Regression)和逻辑回归(Logistic Regression)。

线性回归从二维几何平面的角度可以理解为,在平面中存在已知的数据点,通过学习处理,找到一条线能够建立这些点之间的关系的模型。线性回归用于解决回归问题,是最简单的线性模型,易于理解。同时,由于模型太简单而不能反映变量之间复杂的关系,因此容易出现过拟合的情形。

逻辑回归是给定样本属于类别“1”和类别“-1”的概率,用于解决分类问题,与线性回归的特点一样,易于理解但无法反映变量间的复杂关系,易出现过拟合的情形。2.树型模型

树型模型用于探索数据集中数据的特性,并且能够对数据按照数据特征进行分类处理,可以用于解决分类和回归问题。树型模型高度精确、稳定且易于解释,可以映射非线性关系以求解问题,主要包括决策树(Decision Tree)、随机森林(Random Forest)和梯度提升决策树(Gradient Boosting Tree)。

决策树是使用分支方法来显示决策的每个可能结果的图,它对所有的可能性进行梳理。这种算法易于理解和实现,但是由于决策树有时太简单,无法处理复杂的数据,因此一般不会单独使用。

随机森林是许多决策树的平均,每个决策树都用数据的随机样本训练。森林中每个独立的树都比完整的决策树弱,但是通过将它们结合在一起,可以通过多样性获得更高的整体表现。该算法非常容易构建并且表现往往良好,但是相比于其他算法输出预测可能较慢。

梯度提升决策树和随机森林类似,都是由弱决策树构成的,但最大的区别在于:梯度提升决策树中,树是一个接一个被相继训练的,每个随后的树主要用被先前树错误识别的数据进行训练。这使得梯度提升更少地集中于容易预测的情况并更多地集中于困难的情况。该算法训练速度快且表现非常好,但是训练数据即使出现小的变化,也会在模型中产生彻底的改变,因此可能会产生不可解释的结果。3.支持向量机

支持向量机(SVM)基于统计学理论而提出,是机器学习中一种大放光彩的经典算法。

支持向量机算法通过给予严格的优化条件获得分类界线,并且通过与高斯核等核函数的结合,通过非线性映射,把样本空间映射到高维乃至无穷维的特征空间,使得原来样本空间中非线性可分的问题转变为特征空间中线性可分的问题。它几乎不增加计算的复杂性,而且在某种程度上避免了“维数灾难”,训练较为简单,是一种广泛应用的机器学习方式。4.人工+神经网络

人工+神经网络算法起步较早,但是发展坎坷。

在20世纪20年代就已经提出了人工神经网络模型以及关键的反向传播算法。但是由于受当时计算机运算能力的限制,难以在多层神经网络中进行训练,通常都是只有一层隐层节点的浅层模型。这种模型的神经网络算法比较容易出现过训练现象,而且训练速度比较慢。在层次比较少的情况下,训练效果往往不如其他算法。

在2006年,Hinton提出了深度学习算法,增加了神经网络的层数和一些处理技巧。在丰富的训练数据以及强劲的计算机运行能力的帮助下,神经网络的能力大大提高。

目前,深度学习模型在目标识别、语音识别、自然语言处理等领域取得了突飞猛进的成果,是目前最热门的机器学习方法,也是本书讲解的主要内容。但是也有使用前提,一是深度学习模型需要大量的训练数据,才能展现出神奇的效果;二是深度学习对计算能力要求更高。在有些领域采用传统的、简单的机器学习方法可以很好地解决问题,就没必要非得使用复杂的深度学习方法。1.2.4 机器学习入门

对某个领域进行学习的第一步就是要尽快了解全貌以搭建出整体的知识体系,然后在实践中不断提升对该领域的认识。对于机器学习领域,整体的知识体系如下。1.数学知识

机器学习的目标是通过现有数据构建和训练模型,用于数据的分析与预测。计算机能够做的只有计算,而如何将训练过程抽象为数学函数就是需要我们掌握的能力。在现有的经典算法中涉及概率统计、矩阵运算、微积分导数等数学知识。对于这些知识学过最好,没有学过也没关系,本书会讲解在实际应用中所需要的原理和结论,其中会涉及必要的公式推导证明。2.编程语言

Python是一种面向对象的解释型高级编程语言,众多的机器学习框架都支持Python,因此它成了机器学习的首选语言。本书也将使用Python作为实现语言进行讲解,希望读者已经掌握了Python语言。3.经典机器学习理论和基本算法

经典的机器学习算法包括线性回归、逻辑回归、SVM支持向量机、神经网络算法等,以及通过各种基本算法处理数据时存在的正则化需求、过拟合现象等基本的算法特性和适用环境。本书将对这些基本算法进行详解并通过实例来说明这些算法的使用。4.动手实践机器学习

掌握了机器学习的基础知识后,就可以动手实践机器学习模型。首先需要选择一个开源的机器学习框架。在选择机器学习框架方面的主要考虑因素就是哪个框架的使用范围广、使用人数多。目前,TensorFlow由于由谷歌进行开源推广且有着大量的开发者群体,更新和发布速度非常快,是非常不错的选择。1.3 TensorFlow简介

TensorFlow是谷歌公司推出的机器学习开源神器,是谷歌基于DistBelief进行研发的第二代人工智能学习系统。DistBelief是谷歌内部开发和使用的机器学习框架,但是它严重依赖于Google内部硬件,仅适用于开发神经网络算法等,因此难以广泛使用。谷歌在DistBelief的基础上,提高了运算效率、框架的灵活性和可移植性,形成了TensorFlow框架。目前,TensorFlow已被广泛用于文本处理、语音识别和图像识别等多项机器学习和深度学习领域。1.3.1 主流框架的对比

在机器学习的开源框架中,Google(谷歌)、Microsoft(微软)、Facebook(脸书)和Amazon(亚马逊)等巨头都有着自己的机器学习框架并进行了一定程度的开源。此外,还有伯克利大学的贾扬清主导开发的Caffe、蒙特利尔大学Lisa Lab团队开发的Theano以及其他个人或商业组织贡献的框架。可以说,各种开源的深度学习框架层出不穷。1.基本情况

TensorFlow是Google的可移植机器学习和神经网络库,可扩展性强。TensorFlow对Python有着良好的编程语言支持,支持CPU、GPU和Google TPU等硬件,并且已经拥有各种各样的模型和算法,在深度学习上有非常出色的表现。另外,TensorFlow由谷歌进行主导,在文档和实例方面也有着良好的支持。

MXNet是亚马逊的机器学习框架,具有较强的可移植性和可扩展性,对Python、R、Scala、Julia和C++等编程语言有着不同程度的支持。

Deeplearning4j(DL4J)是一个专注于深度神经网络的Java库,可以与Hadoop和其他基于Java的分布式框架集成。

Microsoft Cognitive Toolkit(CNTK)是微软的开源深度学习框架,支持Python编程语言,拥有各种各样的神经网络模型,并且支持强化学习、生成对抗网络等,是一个功能强大的工具。但是由于交流的社区小,在文档和实例方面的学习资料很少。

Caffe深度学习项目最初是一个用于解决图像分类问题的框架,后来逐步成长为一个强大的机器学习框架。但是由于其创始人现已离开项目,有一段时间已不再进行更新。该项目的下一步进展不明确,建议不再使用。

Torch是Facebook主推的机器学习框架,基于Lua语言进行开发,广泛支持各种机器学习模型和算法。但是由于Lua语言是机器学习中相对冷门的语言,因此增加了学习成本。

Theano由蒙特利尔大学机器学习研究所(MILA)创建。Theano支持Python语言,并且能够支持其他的深度学习框架。但因为它由研究机构开发,在API方面并不完善,若要写出效率高的Theano框架,需要对隐藏在框架背后的算法也相当熟悉,所以它只在研究中极为流行,但在项目开发方面难度相对较大。

Keras由Francis Chollet编写和维护,基于Python进行编写,能够运行在Theano或TensorFlow上,可以将它看成对Theano或TensorFlow的再一次封装。Keras由于水平高,对用户友好,因此能够更加便捷地编写卷积神经网络、递归神经网络等机器学习模型。目前,TensorFlow将Keras添加为TensorFlow核心中的高级框架,成为TensorFlow的默认API。

对于这些主要的机器学习框架,基本情况的对比如表1.1所示。表1.1 各主流框架基本情况的对比2.运行性能

在性能方面,对主流框架在AlexNet上单GPU的情况进行了性能

(1)评测,结果如表1.2所示。表1.2 各主流框架的性能评测

可以看出,TensorFlow的性能已经处于领先水平。3.受欢迎程度

主要的机器学习框架都在GitHub上进行了开源。截至2018年4月,流行的机器学习框架在GitHub上的情况如图1.1所示。图1.1 主流机器学习框架受欢迎程度对比

从中可以看到,TensorFlow在Watch数量、Star数量、Fork数量等方面都完胜其他框架。

综合来说,TensorFlow本身在编程语言上对主流的Python进行支持,并且能够支持各种硬件平台,能够采用集中部署和分布式部署方式,能够部署在移动端、云端、服务器端等不同的应用环境中。最关键的是它由Google主导,Google强大的人工智能研发水平,让大家对Google的深度学习框架充满信心。而且Google丰富的项目经验,使得TensorFlow能够进行快速的迭代更新,Google的工程师和其他广大的开发者也能组织成活跃的社区,进行积极反馈,形成良性循环,可以说TensorFlow框架是我们进行机器学习的首选。1.3.2 TensorFlow的发展

TensorFlow从2015年开源以来,不断地迭代更新,主要的更新版本如下。

2015年11月9日,Google在GitHub上开源了TensorFlow。

2016年4月13日,TensorFlow 0.8版本发布,支持分布式计算。

2016年4月29日,开发AlphaGo的DeepMind团队转向TensorFlow,增强了TensorFlow的力量。

2016年5月12日,开源基于TensorFlow的最准确语法解析器SyntaxNet。

2016年6月27日,TensorFlow 0.9版本发布,增强了移动设备支持。

2016年8月30日,TF-Slim库发布,可以更简单、快速地定义模型。

2017年2月15日,TensorFlow 1.0版本发布,提高了框架的速度和灵活性。

2017年8月17日,TensorFlow 1.3版本发布,将Estimate估算器加入框架。

2017年11月2日,TensorFlow 1.4版本发布,将Keras等高级库加入核心功能。

另外,TensorFlow具有出色的版本管理和细致的官方文档,活跃的社区也在不断促进TensorFlow的发展。1.3.3 使用TensorFlow的公司

谷歌作为TensorFlow的主导公司,在自己的搜索、Gmail、翻译、地图和YouTube等产品中均使用了TensorFlow,这也是谷歌DeepMind人工智能项目的AlphaGo和AlphaGo Zero的底层技术。同时,国外的airbnb、ebay和Dropbox等公司也在尝试使用,国内的京东、小米等公司也在使用。图1.2摘自TensorFlow官网日益强大的公司墙。图1.2 使用TensorFlow的公司1.4 TensorFlow环境准备

TensorFlow站建立在“巨人”的肩膀上,它的正常运行需要依赖较多的底层工具。主要的安装方式有三类:一是通过Python包管理工具安装,二是通过Java安装;三是通过源代码进行编译安装;由于当前Python是进行科学计算的标配,因此我们通过Python包管理工具来进行安装。

TensorFlow在早期只支持Linux和Mac系统,在TensorFlow 0.12及后续版本中才添加对Windows系统的支持。TensorFlow的安装过程大体可分为准备Python环境、安装沙箱环境与安装TensorFlow三步。接下来,我们逐步实现不同环境下TensorFlow环境的搭建。1.4.1 Windows环境

在官网上提供了5种安装TensorFlow的方法。

1)Pip安装:在本地环境中安装TensorFlow,在安装的过程中可能会升级以前安装的Python包,这会影响本机现有的Python程序。

2)Virtualenv安装:设置一个独立的目录,在其中安装TensorFlow,这样不会影响到本机上任何现有的Python程序。

3)Anaconda安装:在本机中安装并运行Anaconda,在Anaconda中创建虚拟环境来安装TensorFlow,这样不会影响本机上现有的Python程序。

4)Docker安装:在本机中建立一个与本机上所有其他程序隔离的Docker容器,在该容器中运行TensorFlow。

5)从源代码安装:通过构建pip下载源码来安装TensorFlow。

由于Anaconda是一个使用Python语言编写的用于科学计算的平台,因此它可以很方便地解决Python版本、第三方包安装等问题。为了后续实际开发的便捷性,推荐大家使用Anaconda方式进行安装。1.Anaconda安装

Anaconda支持Linux、Mac和Windows系统,在Windows系统中的安装步骤如下。(1)下载Anaconda

从Anaconda官网(https://www.anaconda.com/download/)选择对应的版本进行下载,如图1.3所示。软件不算小,大约有500MB。如果遇到某些原因,也可以选择国内的镜像地址进行下载,比如清华大学的镜像地址(https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/)。图1.3 下载Anaconda(2)安装Anaconda

和安装其他软件一样,如果没有什么特别的需求,基本选择默认安装即可,如图1.4所示。唯一需要注意的是,需要将Python 3.6添加到系统环境变量中。 安装Anaconda图1.4(3)验证是否安装成功

安装完毕后,在Windows的“开始”菜单中就能看到已成功安装的Anaconda了,如图1.5所示。 验证Anaconda是否已成功安装图1.5

打开Anaconda Prompt,查看Anaconda的版本以及已安装的第三方依赖包,如图1.6所示。 01 conda –version 02 conda list图1.6 Anaconda的第三方依赖包

在第三方依赖包中,可以看到已经安装NumPy、matpltlib、SymPy、scikit-image等常用的包。(4)配置更新地址

由于Anaconda默认的代码仓库镜像地址是国外的镜像地址,因此下载速度比较慢。建议将镜像地址改为清华大学的开源软件镜像站,对Anaconda Prompt进行配置,如图1.7所示。 01 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ 02 conda config --set show_channel_urls yes 配置Anaconda更新地址图1.7

添加完成后,可以在当前配置信息中查看,输入: conda info

关注channel URLs字段内容是否已成功添加清华大学提供的镜像地址,如图1.8所示。 查看Anaconda更新地址图1.82.创建Anaconda沙箱环境

Anaconda可以创建自己的计算环境,这样可以将TensorFlow的环境与其他环境进行隔离,不必来回修改各种环境变量,也不必担心破坏之前的环境。创建步骤如下所示。(1)创建Conda计算环境

在Anaconda Prompt中创建一个名为tensorflow的沙箱环境,如图1.9所示,输入: conda create -n tensorflow python=3.6

根据不同版本的Python更改对应的版本参数。在创建过程中,如果出现下载速度慢甚至不成功的情况,可查看镜像地址是否配置成功。 创建沙箱环境图1.9

创建成功后,可以打开Windows系统中的Anaconda Navigator,单击左侧的Environments,就可以看到tensorflow沙箱环境,如图1.10所示。 查看沙箱环境图1.10(2)激活tensorflow沙箱环境

如图1.1所示,在命令行中继续输入: activate tensorflow 激活沙箱环境图1.11

可以看到,用户名的前面有标识。这实际上表明我们已经更换到名为tensorflow的沙箱环境中。

当不使用tensorflow时,需要使用deactivate tensorflow进行关闭。3.安装TensorFlow的CPU版本

TensorFlow分为CPU版本和GPU版本。对于使用来说,主要区别在于运算速度,一般来说GPU速度更快。这是由于CPU和GPU针对的用途不一样,在最初的设计上也不一样。在GPU设计上用于图形图像的处理,在矩阵运算、数值计算,特别是浮点和并行计算上能优于CPU设计上数百倍的性能。在机器学习中,经常会用到许多的卷积运算、矩阵运算等,所以一般来说GPU速度更快。但是,当进行计算的数据集较小时,两者的速度差别并不大,甚至由于数据传输的问题,GPU可能更慢。

CPU版本的安装更简单,我们先讲解CPU版本的安装。(1)使用pip进行安装

在TensorFlow的沙箱环境中,使用pip进行安装,输入: pip install --ignore-installed --upgrade tensorflow

下载速度可能会比较慢,如果不在意是否为最新版本,则建议使用国内镜像地址进行安装。在https://mirrors.tuna.tsinghua.edu.cn/tensorflow/网页中找到需要安装的TensorFlow版本地址,例如:

安装成功后,在控制台中会显示安装成功的信息,如图1.12所示。 安装TensorFlow图1.12(2)验证是否成功

在控制台中,输入:

若最后能够成功输入“b' Hello, TensorFlow!'”,则表示安装成功,完成开发环境的准备工作。(3)集成到IDE中

Python的集成开发工具很多,但是对于数据处理来说,可以选用Spyder,因为我们安装的Anaconda对它提供很好的支持。

打开Anaconda Navigator界面,单击左侧的Environments,查看是否已经安装Spyder。若未安装,则选中复选框,并单击右下角的Apply按钮进行安装,如图1.13所示。 安装Spyder图1.13

在Anaconda Prompt界面中启动tensorflow沙箱环境,并运行Spyder(如图1.14所示),输入: activate tensorflow Spyder 运行Spyder图1.14

等待一会儿就会出现Spyder界面,如图1.15所示。 Spyder界面图1.15

其中,也需要验证是否关联了tensorflow沙箱环境。在编辑框中输入如下代码: 01 import tensorflow as tf 02 hello = tf.constant('Hello, TensorFlow!') 03 sess = tf.Session() 04 print(sess.run(hello))

运行后,若能够成功输入“b' Hello, TensorFlow!'”,则表示配置成功,如图1.16所示。 运行Spyder图1.16

需要注意的是,一定要启用创建的tensorflow沙箱环境,并从该环境中打开Spyder,才能够关联到TensorFlow的开发环境,否则会出错。4.安装TensorFlow的GPU版本

由于使用GPU进行机器学习运算时,效率更高,因此接下来我们讲解如何安装tensorflow的GPU版本。

安装时需要使用两个关联程序,分别是CUDA和cuDNN。由于TensorFlow是Google开发的,CUDA和cuDNN是NVIDIA开发的,因此在安装的版本选择和顺序上非常重要,否则会出现安装失败的情况。本书使用的是Python 3.6、TensorFlow 1.3、CUDA 8.0、cuDNN 6.0。下面详细介绍安装过程。(1)安装CUDA

由于TensorFlow的GPU版本依赖于CUDA,因此我们首先查看使用的GPU是否支持CUDA加速,一般来说NVIDIA都是支持的。我们可以通过官网进行查询,也可以通过在NVIDIA的控制面板中,单击“系统信息”进行查询。在“系统信息”对话框的“组件”选项卡中找到NVCUDA.DLL,只要能够找到NVCUDA.DLL组件,就代表支持CUDA,如图1.17所示。 CUDA系统信息图1.17

从NVIDIA官网可以下载CUDA,在https://developer.nvidia.com/cuda-toolkit-archive上有所有的历史版本。由于TensorFlow的更新不一定对应到CUDA的最新版本,因此建议下载已通过验证的版本组合。在其中选择对应的操作系统、硬件支持类型、操作系统版本和安装类型后,再下载安装文件,如图1.18所示。 CUDA版本选择图1.18

下载完毕后,和安装其他软件一样,如果没有什么特别的需求,基本选择默认安装即可。(2)下载cuDNN

cuDNN是连接TensorFlow和CUDA的纽带,我们可以从NVIDIA官网下载cuDNN,网址为https://developer.nvidia.com/rdp/form/cudnn-download-survey。要先进行用户注册并填写调查问卷,再选择与上一步安装的CUDA版本相匹配的cuDNN版本,如图1.19所示。 下载cuDNN图1.19(3)配置cuDNN

下载cuDNN后解压,其文件夹下有3个子文件夹,分别是bin、lib和include。找到CUDA的安装路径,若未做修改,则一般的路径是C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0。将这3个子文件夹复制到该目录中,与CUDA已有的bin、lib和include子文件夹进行合并。

查看Windows的环境变量是否已成功添加相关程序路径。在“系统变量”中,找到“Path”变量,查看其值是否包含CUDA文件的路径,例如: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\libnvvp

如果未包含,请将相关路径添加到“Path”变量中。(4)安装GPU版本

为了保证使用的环境与CPU版本的环境相隔离,我们重新创建一个沙箱环境,进行GPU版本的安装。在Anaconda Prompt中依次输入: 01 conda create -n tensorflowGPU python=3.6 02 activate tensorflowGPU 03 pip install tensorflow-gpu==1.3.0

下载速度可能会比较慢。如果不在意是否为最新版本,可以使用国内镜像地址进行安装。在https://mirrors.tuna.tsinghua.edu.cn/TensorFlow/网页上找到需要安装的TensorFlow对应版本的地址,安装成功后,在控制台中会显示有关安装成功的信息。(5)验证是否成功

在控制台中,输入:

如果能够成功输入“b' Hello, TensorFlow!'”,则表示安装成功,完成了开发环境的准备工作。

最后,参照安装Spyder开发环境的过程,对Spyder开发环境进行安装。1.4.2 Linux环境

前面详细讲解了Windows环境下TensorFlow的安装过程。在Linux环境下,TensorFlow的安装过程与Windows环境下类似,分为三步:(1)安装Anaconda;(2)建立Anaconda沙箱环境;(3)安装TensorFlow。(1)安装Anaconda

首先从Anaconda官网(https://www.anaconda.com/download/)选择对应的版本进行下载。

然后打开终端,输入相应的命令进行安装,例如: bash /home/TensorFlow/Downloads/Anaconda2-5.1.0-Linux-x86_64.sh(2)建立Anaconda沙箱环境

重新打开终端后,输入conda创建命令,例如: conda create -n tensorflow python=3.6(3)安装TensorFlow

首先激化创建的沙箱环境,输入命令: source activate tensorflow

然后在tensorflow沙箱环境中,使用pip进行安装,输入: pip install --ignore-installed --upgrade tensorflow

完成安装后,同样在控制台中输入如下代码:

如果最后能够成功输入“b' Hello, TensorFlow!'”,则表示安装成功,完成了开发环境的准备工作。

需要注意的是,每次需要激活tensorflow沙箱环境后才能正常运行tensorflow程序。1.4.3 Mac OS环境

使用Mac OS进行环境配置时,可以对照Linux下的安装过程,首先安装Anaconda,然后建立Anaconda沙箱环境,最后完成TensorFlow的安装。 shell $ conda create -n tensorflow shell $ source activate tensorflow shell (tensorflow)$ pip install l --ignore-installed --upgrade tensorflow1.5 常用的第三方模块

TensorFlow的一大特性就是支持大量的第三方模块。例如,在运行中由于经常会处理各种科学计算,因此会使用NumPy;为了处理图像、音频、自然语言等,会使用matplotlib scikit-image、librosa NLTK Keras等优秀的第三方模块。在实际开发环境中也会安装常用的第三方模块。1.NumPy

NumPy系统是Python的一种开源的数值计算扩展,用来存储和处理大型矩阵运算,比Python自身的嵌套列表结构要高效得多,主要包括N维数组对象Array、实用的线性代数、傅里叶变换和随机数生成函数等。2.matplotlib

matplotlib是Python中最常用的可视化工具之一,利用它可以非常方便地创建各种类型的2D图表和一些基本的3D图表。仅使用几行代码,便可生成绘图、直方图、功率谱、条形图、错误图和散点图等。3.scikit-image

scikit-image是图像处理和计算机视觉的算法集合。相比OpenCV库而言,scikit-image是一个精简轻便的框架且易于安装,非常适合用于TensorFlow中图像的预处理。4.librosa

librosa是Python的一个工具包,在音频信号分析中经常用到,是进行音频特征提取的第三方库。5.NLTK

NLTK是一个高效的Python工具,用来处理人类自然语言数据。它包括50多个语料库和词汇资源,并能够很方便地完成对词语的分类、标记化、词干标记、解析和语义推理等自然语言处理任务。6.Keras

Keras原本是基于TensorFlow和Theano进行的模块化封装,提供较为上层的API,允许可配置的模块,可以非常容易地实现深度学习的原型。后来,TensorFlow将其添加到TensorFlow核心的高级别框架中,成为TensorFlow的默认API。1.6 本章小结

本章主要讲解了人工智能、机器学习的发展过程和入门方法。对比了目前主流的机器学习框架,介绍了TensorFlow的优势和发展过程。最后,详细讲解了TensorFlow开发环境的准备过程,以及在实际开发过程中常用的第三方模块。(1)参考https://github.com/soumith/convnet-benchmarks。第2章 TensorFlow基础

第1章介绍了机器学习的基础知识,准备了TensorFlow的开发环境。接下来,将具体讲解机器学习算法中最普遍使用的学习框架TensorFlow,并通过一个TensorFlow程序讲解基本概念以及可视化方面的基础知识。2.1 TensorFlow基础框架2.1.1 系统框架

虽然TensorFlow框架的版本在不断更新,但是其系统架构并没有发生根本性的改变。它以不同功能需求进行分层处理,以统一接口屏蔽具体实现,从而集中各自的关注层次,更好地提升TensorFlow的适用性,系统架构如图2.1所示。(1) 系统框架图2.1

从中可以很明显地看出,TensorFlow系统框架分为三层,由上而下依次是应用层、接口层和核心层。1.应用层

应用层是TensorFlow框架的最上层,主要提供了机器学习相关的训练库、预测库以及针对Python、C++和Java等编程语言的编程环境,便于不同编程语言在应用层通过接口层调用TensorFlow核心功能以实现相关实验和应用。可以将应用层理解为系统的前端,这样便于使用Python等语言进行编程,主要实现对计算图的构造。2.接口层

接口层是对TensorFlow功能模块的封装,便于其他语言平台调用。3.核心层

核心层是TensorFlow进行运算学习的最重要部分,包括设备层、网络层、数据操作层和图计算层。可以将核心层理解为系统的后端,它对前端提出的计算命令进行具体的计算。(1)设备层

设备层主要包括TensorFlow在不同硬件设备上的实现,主要支持CPU、GPU和Mobile等不同设备。通过在不同的硬件设备上实现计算命令转换,给上层提供统一的接口,实现程序的跨平台功能。(2)网络层

网络层主要包括RPC(Remote Procedure Call,远程过程调用)和RDMA(Remote Direct Memory Access,远程直接内存访问)通信协议,主要实现不同设备间的数据传输和更新,这些协议都会在分布式计算中用到。(3)数据操作层

数据操作层以Tensor为处理对象,实现Tensor的各种操作或计算。这些操作包括MatMul等计算操作,也包含Queue等非计算操作。(4)图计算层

图计算层中主要包括分布式计算图和本地计算图的实现,主要实现了图的创建、编译、优化和执行等部分。2.1.2 系统的特性

TensorFlow的系统架构具备许多特性,在官网中着重介绍了它的高度灵活性(Deep Flexibility)、真正的可移植性(True Portability)、连接研究与产品(Connect Research and Production)、自动微分(Auto-Differentiation)、多语言选择(Language Options)以及最大化性能(Maximize Performance)六大特性。1.高度灵活性

TensorFlow不是一个死板的神经网络库,只要能够将计算表示成数据流图,驱动计算的内部循环就可以使用TensorFlow来实现。除了系统提供的神经网络中的常见子图外,还要能编写TensorFlow之上的库,这样可以极大地减少重复代码量。2.真正的可移植性

TensorFlow可以运行在CPU和GPU上,也可以在桌面端、服务器、移动端、云端服务器和Docker等各类终端上运行。只要有实现机器学习的想法,无需任何特定的硬件就能完成基础的尝试。3.连接研究与产品

可以让产品研究人员更快地将想法变为产品,可以让学术研究人员更直接地共享代码,具有更大的科学产出率。过去将机器学习想法

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载