TensorFlow

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

在不使用with代码块的情况下创建tf.Session,应在完成会话时明确调用tf.Session.close结束进程。调用Session.run创建的中间张量会在调用结束时或结束之前释放。tf.Session.run是运行节点对象和评估张量的主要方式,tf.Session.run需要指定fetch并提供供给数据(feed)字典,用户也可以指定其它选项以监督会话的运行 。
tf.saved_model API可以直接与SavedModel进行交互,tf.saved_model.simple_save用于保存模型,tf.saved_model.loader.load用于导入模型 [28] 。

TensorFlow高阶APIEstimatorsEstimators是TensorFlow自带的高阶神经网络API 。Estimators封装了神经网络的训练、评估、预测、导出等操作。Estimators的特点是具有完整的可移植性,即同一个模型可以在各类终端、服务中运行并使用GPU或TPU加速而无需重新编码 。
Estimators模型提供分布式训练循环,包括构建图、初始化变量、加载数据、处理异常、创建检查点(checkpoint)并从故障中恢复、保存TensorBoard的摘要等。

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

由于自定义完整模型过程繁琐,因此可首先使用预构建模型并完成一次训练循环,在分析结果之后尝试自定义模型 [31] Estimators也支持用户自定义检查点规则。KerasKeras是一个支持TensorFlow、Thenao和Microsoft-CNTK的第三方高阶神经网络API 。
Keras以TensorFlow的Python API为基础提供了神经网络、尤其是深度网络的构筑模块,并将神经网络开发、训练、测试的各项操作进行封装以提升可扩展性和简化使用难度 。在TensorFlow下可以直接导出Keras模块使用 。Eager ExecutionEager Execution是基于TensorFlow Python API的命令式编程环境,帮助用户跳过数据流编程的图操作,直接获取结果,便于TensorFlow的入门学习和模型调试,在机器学习应用中可以用于快速迭代小模型和小型数据集 。
Eager Execution支持大多数TensorFlow操作和GPU加速,但可能会使某些操作的开销增加 。Data TensorFlow输入管道的设备占用策略 tf.data是TensorFlow中进行数据管理的高阶API [37] 。在图像处理问题中,tf.data可以对输入图像进行组合或叠加随机扰动,增大神经网络的训练收益;在文字处理问题中,tf.data负责字符提取和嵌入(embedding),后者将文字转化为高维向量,是进行机器学习的重要步骤。

tf.data包含两个类:
tf.data.Dataset和tf.data.Iterator,Dataset自身是一系列由张量构成的组元,并包含缓存(cache)、交错读取(interleave)、预读取(prefetch)、洗牌(shuffle)、投影(map)、重复(repeat)等数据预处理方法、Iterator类似于Python的循环器,是从Dataset中提取组元的有效方式。

tf.data支持从NumPy数组和TFRecord中导入数据,在字符数据处理时时,tf.data.TextLineDataset可以直接输入ASCII编码文件 。
tf.data可用于构建和优化大规机器学习的输入管道(input pipline),提升TensorFlow性能。

一个典型的输入管道包含三个部分 :
提取(Extract):从本地或云端的数据存储点读取原始数据转化(Transform):使用计算设备(通常为CPU)对数据进行解析和后处理,例如解压缩、洗牌(shuffling)、
打包(batching)等加载(Load):在运行机器学习算法的高性能计算设备(GPU和TPU)加载经过后处理的数据在本地的同步操作下,当GPU/TPU进行算法迭代时,CPU处于闲置状态,而当CPU分发数据时,GPU/TPU处于闲置状态。

tf.data.Dataset.prefetch在转化和加载数据时提供了预读取技术,可以实现输入管道下算法迭代和数据分发同时进行,在当前学习迭代完成时能更快地提供下一个迭代的输入数据。
tf.data支持输入管道的并行,tf.contrib.data.parallel_interleave可以并行提取数据 ;映射函数tf.data.Dataset.map能够并行处理用户的指定操作 。对于跨CPU并行,用户可以通过num_parallel_calls接口指定并行操作的等级。

一般而言,并行等级与设备的CPU核心数相同,即在四核处理器上可定义num_parallel_calls=4 。在大数据问题中,可使用tf.contrib.data.map_and_batch并行处理用户操作和分批操作 。TensorFlow加速器CPU和GPU设备TensorFlow支持CPU和GPU运行,在程序中设备使用字符串进行表示。

PU表示为"/cpu:0";
第一个GPU表示为"/device:GPU:0";
第二个GPU表示为"/device:GPU:1",以此类推 。
如果TensorFlow指令中兼有CPU和GPU实现,当该指令分配到设备时,GPU设备有优先权。TensorFlow仅使用计算能力高于3.5的GPU设备 。

内存动态分配选项allow_growth可以根据需要分配GPU内存,该选项在开启时会少量分配内存,并随着会话的运行对占用内存区域进行扩展。TensorFlow会话默认不释放内存,以避免内存碎片问题。per_process_gpu_memory_fraction 选项决定每个进程所允许的GPU内存最大比例。TPUEstimator可以在本地进行学习/调试,并上传谷歌云计算平台进行计算。

使用云计算TPU设备需要快速向TPU供给数据,为此可使用tf.data.Dataset API从谷歌云存储分区中构建输入管道。小数据集可使用tf.data.Dataset.cache完全加载到内存中,大数据可转化为TFRecord格式并使用tf.data.TFRecordDataset进行读取

模型优化工具可以减少模型参数的使用量(pruning)、对模型精度进行量化(quantization)和改进模型的拓扑结构,适用于将模型部署到终端设备,或在有硬件局限时运行模型,因此有很多优化方案是TensorFlow Lite项目的一部分。

其中量化能够在最小化精度损失的情况下显著减小模型尺度和缩短响应时间,并是优化深度学习模型的重要手段。XLA工作的前端输入为“高层优化器(High Level Optimizer, HLO)”定义的数据流图,随后XLA使用多种独立于计算设备的算法优化方案对图进行分析,并将HLO计算送入后端。后端会进一步进行基于特定设备,例如GPU的优化 。

截至TensorFlow的1.12版本,XLA依然处于早期开发状态,暂不能提供显著的性能优化,其硬件支持包括JIT和AOT编译的x86-64 CPU、NVIDIA GPU 。

TensorFlow可视化工具TensorFlow拥有自带的可视化工具TensorBoard,TensorBoard具有展示数据流图、绘制分析图、显示附加数据等功能 。

开源安装的TensorFlow会自行配置TensorBoard。启动TensorBoard前需要建立模型档案,低阶API使用tf.summary构建档案,Keras包含callback方法、Estimator会自行建立档案。TFDBG在运行时期间会拦截指令生成的错误,并向用户显示错误信息和调试说明。TFDBG使用文本交互系统curses,在不支持curses的Windows操作系统,可以下载非官方的Windows curses软件包或使用readline作为代替。

封装容器在会话开始时调出命令行界面(Command Line Interface, CLI),CLI包含超过60条指令,用户可以在使用指令控制会话、检查数据流图、打印及保存张量 。TFDBG可以调试神经网络API Estimator和Keras,对Estimator,TFDBG创建调试挂钩(LocalCLIDebugHook)作为Estimator中的fit和evaluate方法下monitor的参数。除CLI外,TFDBG在TensorBoard拥有拥有图形界面的调试程序插件,该插件提供了计算图检查、张量实时可视化、张量连续性和条件性断点以及将张量关联到图源代码等功能 。TensorFlow部署编辑TensorFlow支持在一个或多个系统下使用多个设备并部署分布式服务器(distributed server)和服务器集群(cluster)。tf.train.Server.create_local_server可在本地构建简单的分布式服务器 。

服务器集群可以被分割为“工作(job)”,每个工作包含一或多个任务 。部署服务器集群时,通常每个任务分配一台机器,但也可在一台机器的不同设备运行多个任务。每个任务都包含tf.train.ClusterSpec方法以描述该服务器集群的全部任务(每个任务的ClusterSpec是相同的)和tf.train.Server方法按工作名提取本地任务。
tf.train.ClusterSpec要求输入一个包含所有工作名和地址的字典;而tf.train.Server对象包含一系列本地设备、与tf.train.ClusterSpec中其它任务的链接和一个使用链接进行分布式计算的会话 。每个任务都是一个特定工作名的成员,并有一个任务编号(task index)。
任务可以通过编号与其它任务相联系。在运行由未知第三方提供的TensorFlow模型、 计算流图(GraphDef和SavedModel)和检查点文件时,一个推荐的做法是使用沙盒(sand box)以监测其行为 。
安全的TensorFlow模型在引入未知输入数据时,也可能触发TensorFlow内部或系统的错误。TensorFlow的分布式计算平台和服务器接口(tf.train.Server)不包含授权协议和信息加密选项,任何具有网络权限的访问者都可以运行tf.train.Server上的任何代码,因此TensorFlow不适用于不信任的网络。

TFX包含三个算法库:TensorFlow Data Validation对机器学习数据进行统计描述和验证、TensorFlow Transform对模型数据进行预处理、TensorFlow Model Analysis对机器学习模型进行分析,提供表现评分。另有TensorFlow Serving作为模型业务化的高性能系统,提供模型接口和管理 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值