Tensorflow是干什么的?基础入门(安装配置、项目和应用开发、组件和工作原理)

导读谷歌大脑自2011年成立起开展了面向科学研究和谷歌产品开发的大规模深度学习应用研究,其早期工作即是TensorFlow的前身DistBelief 。DistBelief的功能是构建各尺度下的神经网络分布式学习和交互系统,也被称为"第一代机器学习系统" 。DistBelief在谷歌和Alphabet旗下其它公司的产品开发中被改进和广泛使用 。


这是小编的其他文章,希望对大家有所帮助,点击即可阅读

人工智能常用的十大算法    人工智能数学基础(二)十大经典算法(图像处理)

我还整理了整整python人工智能学习笔记、课程视频、面试宝典一并可以无套路免费
分享给大家!扫描二维码加V免费咨询学习问题领取资料

 

定义

 TensorFlow™是一个基于数据流编程(dataflow programming)的符号数学系统,被广泛应用于各类机器学习(machine learning)算法的编程实现,其前身是谷歌的神经网络算法库DistBelief 。

Tensorflow拥有多层级结构,可部署于各类服务器、PC终端和网页并支持GPU和TPU高性能数值计算,被广泛应用于谷歌内部的产品开发和各领域的科学研究 。

TensorFlow由谷歌人工智能团队谷歌大脑(Google Brain)开发和维护,拥有包括TensorFlow Hub、TensorFlow Lite、TensorFlow Research Cloud在内的多个项目以及各类应用程序接口(Application Programming Interface, API) 。自2015年11月9日起,TensorFlow依据阿帕奇授权协议(Apache 2.0 open source license)开放源代码。

安装和配置

语言与系统支持

TensorFlow支持多种客户端语言下的安装和运行。截至版本1.12.0,绑定完成并支持版本兼容运行的语言为C和Python,其它(试验性)绑定完成的语言为JavaScript  、C++  、Java  、Go和Swift,依然处于开发阶段的包括C#、Haskell、Julia、Ruby、Rust和Scala。

1、 Python

TensorFlow提供Python语言下的四个不同版本:CPU版本(tensorflow)、包含GPU加速的版本(tensorflow-gpu),以及它们的每日编译版本(tf-nightly、tf-nightly-gpu)。TensorFlow的Python版本支持Ubuntu 16.04、Windows 7、mac OS、10.12.6 Sierra、Raspbian 9.0及对应的更高版本,其中macOS版不包含GPU加速 。安装Python版TensorFlow可以使用模块管理工具pip/pip3 或anaconda 并在终端直接运行。

此外Python版TensorFlow也可以使用Docker安装 :

2、C

TensorFlow提供C语言下的API用于构建其它语言的API,支持x86-64下的Linux类系统和macOS 10.12.6 Sierra或其更高版本,macOS版不包含GPU加速 。安装过程如下 :

下载TensorFlow预编译的C文件到本地系统路径(通常为/usr/local/lib)并解压缩。

使用ldconfig编译链接

此外用户也可在其它路径解压文件并手动编译链接。

编译C接口时需确保本地的C编译器(例如gcc)能够访问TensorFlow库 。

3、配置GPU

TensorFlow支持在Linux和Window系统下使用统一计算架构(Compute Unified Device Architecture,CUDA )高于3.5的NVIDIA GPU 。配置GPU时要求系统有NVIDIA GPU驱动384.x及以上版本、CUDA Toolkit和CUPTI(CUDA Profiling Tools Interface)9.0版本、cuDNN SDK7.2以上版本。可选配置包括NCCL 2.2用于多GPU支持、TensorRT 4.0用于TensorFlow模型优化 。

在Linux下配置GPU时,将CUDA Toolkit和CUPTI的路径加入$LD_LIBRARY_PATH环境变量即可。对于CUDA为3.0或其它版本的NVIDIA程序,需要从源文件编译TensorFlow 。对Windows下的GPU配置,需要将CUDA、CUPTI和cuDNN的安装路径加入%PATH%环境变量,在DOS终端有如下操作 :

Linux系统下使用docker安装的Python版TensorFlow也可配置GPU加速且无需CUDA Toolkit :

版本兼容性

TensorFlow的公共API版本号使用语义化版本2.0标准 ,包括主版本号.次版本号.修订号,其中主版本号的更改不是向下兼容的,已保存的TensorFlow工作可能需迁移到新的版本; 次版本号的更改包含向下兼容的性能提升;修订号的更改是向下兼容的问题修正 。

TensorFlow支持版本兼容的部分包括协议缓冲区文件、所有的C接口、Python接口中的tensorflow模块以及除tf.contrib和其它私有函数外的所有子模块、Python函数和类 。更新不支持版本兼容的部分为:包含"试验性(experimental)"字段的组件、使用除C和Python外其它语言开发的TensorFlow API、以GraphDef形式保存的工作、浮点数值特定位的计算精度、随机数、错误和错误消息 。其中GraphDef拥有与TensorFlow相独立的版本号,当TensorFlow的更新放弃对某一GraphDef版本的支持后,可能有相关工具帮助用户将GraphDef转化为受支持的版本 。需要指出,尽管 GraphDef的版本机制与TensorFlow相独立,但对GraphDef的更改仍受限于语义版本控制,即只能在TensorFlow主版本号之间移除或更改功能。此外,修订版本之间实施GraphDef的向前兼容 。

 组件和工作原理

核心组件

分布式TensorFlow的核心组件(core runtime)包括:分发中心(distributed master)、执行器(dataflow executor/worker service)、内核应用(kernel implementation)和最底端的设备层(device layer)/网络层(networking layer)  

分发中心从输入的数据流图中剪取子图(subgraph),将其划分为操作片段并启动执行器。分发中心处理数据流图时会进行预设定的操作优化,包括公共子表达式消去(common subexpression elimination)、常量折叠(constant folding)等 。

执行器负责图操作(graph operation)在进程和设备中的运行、收发其它执行器的结果。分布式TensorFlow拥有参数器(parameter server)以汇总和更新其它执行器返回的模型参数。执行器在调度本地设备时会选择进行并行计算和GPU加速 。

内核应用负责单一的图操作,包括数学计算、数组操作(array manipulation)、控制流(control flow)和状态管理操作(state management operations)。内核应用使用Eigen执行张量的并行计算、cuDNN库等执行GPU加速、gemmlowp执行低数值精度计算,此外用户可以在内核应用中注册注册额外的内核(fused kernels)以提升基础操作,例如激励函数和其梯度计算的运行效率 。

单进程版本的TensorFlow没有分发中心和执行器,而是使用特殊的会话应用(Session implementation)联系本地设备。TensorFlow的C语言API是核心组件和用户代码的分界,其它组件/API均通过C语言API与核心组件进行交互 。

 低阶API

张量是TensorFlow的核心数据单位,在本质上是一个任意维的数组。可用的张量类型包括常数、变量、张量占位符和稀疏张量 。

变量是可以通过操作改变取值的特殊张量 。变量必须先初始化后才可使用,低阶API中定义的变量必须明确初始化,高阶API例如Keras会自动对变量进行初始化。TensorFlow可以在tf.Session开始时一次性初始化所有变量,对自行初始化变量,在tf.Variable上运行的tf.get_variable可以在定义变量的同时指定初始化器 

数据流图(tf.Graph)和会话(tf.Session):TensorFlow在数据流编程下运行,具体地,使用数据流图(tf.Graph)表示计算指令间的依赖关系,随后依据图创建会话(tf.Session)并运行图的各个部分 。tf.Graph包含了图结构与图集合两类相关信息,其中图结构包含图的节点(tf.Operation)和边缘(张量)对象,表示各个操作组合在一起的方式,但不规定它们的使用方式,类似于汇编代码;图集合是在tf.Graph中存储元数据集合的通用机制,即对象列表与键(tf.GraphKeys)的关联 。

 构建tf.Graph时将节点和边缘对象加入图中不会触发计算,图构建完成后将计算部分分流给tf.Session实现计算。tf.Session拥有物理资源,通常与Python的with代码块中使用,在离开代码块后释放资源 。在不使用with代码块的情况下创建tf.Session,应在完成会话时明确调用tf.Session.close结束进程。调用Session.run创建的中间张量会在调用结束时或结束之前释放。tf.Session.run是运行节点对象和评估张量的主要方式,tf.Session.run需要指定fetch并提供供给数据(feed)字典,用户也可以指定其它选项以监督会话的运行 。这里使用低阶API以批量梯度下降的线性回归为例展示tf.Graph的构建和tf.Session的运行

保存和恢复:TensorFlow的低阶API可以保存模型和学习得到的变量,对其进行恢复后可以无需初始化直接使用。对张量的保存和恢复使用tf.train.Saver

 高阶API

Estimators:工作流程

  • 建立数据集导入函数:可以使用TensorFlow的数据导入工具tf.data.Dataset或从Nnmpy数组创建数据集导入函数。
  • 定义特征列:特征列(tf.feature_column)包含了训练数据的特征名称、特征类型和输入预处理操作。
  • 调出预创建的Estimator模型:可用的模型包括基础统计学(baseline)、梯度提升决策树(boosting desicion tree)和深度神经网络的回归、分类器。调出模型后需提供输入特征列、检查点路径和有关模型参数(例如神经网络的隐含层结构)。
  • 训练和评估模型:所有预创建模型都包含train和evaluate接口用于学习和评估。

 Keras:Keras以TensorFlow的Python API为基础提供了神经网络、尤其是深度网络的构筑模块,并将神经网络开发、训练、测试的各项操作进行封装以提升可扩展性和简化使用难度 。在TensorFlow下可以直接导出Keras模块使用 

Eager Execution:Eager Execution是基于TensorFlow Python API的命令式编程环境,帮助用户跳过数据流编程的图操作,直接获取结果,便于TensorFlow的入门学习和模型调试,在机器学习应用中可以用于快速迭代小模型和小型数据集 。Eager Execution环境只能在程序的开始,即导入tensorflow模块时启用 

Data:图像处理问题中,tf.data可以对输入图像进行组合或叠加随机扰动,增大神经网络的训练收益;在文字处理问题中,tf.data负责字符提取和嵌入(embedding),后者将文字转化为高维向量,是进行机器学习的重要步骤 。tf.data包含两个类:tf.data.Dataset和tf.data.Iterator,Dataset自身是一系列由张量构成的组元,并包含缓存(cache)、交错读取(interleave)、预读取(prefetch)、洗牌(shuffle)、投影(map)、重复(repeat)等数据预处理方法、Iterator类似于Python的循环器,是从Dataset中提取组元的有效方式

 项目和应用开发 

项目 

TensorFlow Hub

TensorFlow Hub是一个允许用户发布、共享和使用TensorFlow模块的库开发项目。用户可以将TensorFlow数据流图或其部分使用Hub进行封装并移植到其它问题中再次利用 。TensorFlow Hub页面列出了由谷歌和DeepMind提供的封装模型,其主题包括字符嵌入、视频分类和图像处理 。

TensorFlow Extended (TFX)

TFX是谷歌基于TensorFlow开发的产品级机器学习平台,其目标是是对产品开发中的模型实现、分析验证和业务化操作进行整合,在实时数据下完成机器学习产品的标准化生产 。TFX包含三个算法库:TensorFlow Data Validation对机器学习数据进行统计描述和验证、TensorFlow Transform对模型数据进行预处理、TensorFlow Model Analysis对机器学习模型进行分析,提供表现评分。另有TensorFlow Serving作为模型业务化的高性能系统,提供模型接口和管理 。

TensorFlow Probability (TFP)

TFP是在TensorFlow Python API基础上开发的统计学算法库,其目标是方便用户将概率模型和深度学习模型相结合使用 。TFP包含大量概率分布的生成器、支持构建深度网络的概率层(probabilistic layers)、提供变分贝叶斯推断(Variational inference)和马尔可夫链蒙特卡罗方法(Markov chain Monte Carlo)和一些特殊的优化器,包括Nelder-Mead方案、BFGS算法(Broyden-Fletcher-Goldfarb-Shanno algorithm)和SGLD(Stochastic Gradient Langevin Dynamics) 。

 应用开发

TensorFlow.js

TensorFlow.js是TensorFlow的JavaScript API,主要用于网页端的机器学习应用开发。TensorFlow.js可以在浏览器和Node.js下转化和运行TensorFlow构建的机器学习模型,并使用网页端数据对模型进行训练 。截至2018年9月18日,TensorFlow.js的版本号为0.13 。

TensorFlow Lite

TensorFlow Lite是为移动和嵌入式设备运行机器学习代码的问题提供解决方案。TensorFlow Lite包含优化算法以提升Android、iOS等系统下机器学习模型的响应时间并降低文件大小。谷歌内部的许多移动端产品,包括谷歌相册、谷歌邮箱客户端、谷歌键盘等都使用TensorFlow Lite部署了人工智能算法 。

Swift for TensorFlow

Swift for TensorFlow是开源版Swift的TensorFlow API开发项目。Swift for TensorFlow类似于Eager Execution可以直接执行数据流图且性能更高 。截至10月13日,Swift for TensorFlow处于早期开发状态。


 小编整理了有关Python人工智能的资料,有图像处理opencv\自然语言处理、机器学习、数学基础等资源库,想学习人工智能或者转行到高薪资行业的,大学生也非常实用,无任何套路免费提供,    扫码+vx(更方便)领取,

欢迎大家扫码找我免费咨询学习问题呀~

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值