tensorflow是什么(tensorflow手机版) 您所在的位置:网站首页 tensorflow语言模型 tensorflow是什么(tensorflow手机版)

tensorflow是什么(tensorflow手机版)

2023-04-18 19:57| 来源: 网络整理| 查看: 265

本文简要介绍了TensorFlow的基本概念。 如果您想了解更多关于这些概念及其实现的信息,请参考官方白皮书(主要是15年的)和TensorFlow官网上的一些文档。 请注意,这些材料中的一些已经不适用于TensorFlow2.0,读者在阅读时需要注意。

1. TensorFlow常见基本概念 1.1计算图

计算图是有向图,是TensorFlow中计算任务的抽象描述,也称为数据流图。 TensorFlow使用计算图将计算表示为独立指令之间的依赖关系。 在计算图中,节点表示计算单元,即独立的运算操作,图的边表示计算中使用或生成的数据。 在TensorFlow1. x版中,如果使用TensorFlow低级API进行编程,则必须首先定义计算图表,然后创建用于运行计算图表的tensor flow会话(session )

tensor flow1.x版采用静态图像机制,需要事先定义计算图后再重复调用(1. x版提供了Eager Execution界面,以便用户使用视频)。 TensorFlow2.0采用了动态图形机制。 版本1.x的Eager Execution在2.0中为默认的执行方式。 可以像运行普通python程序一样运行TensorFlow的代码。 不需要预先定义静态图形,代码调试也很简单。 TensorFlow1.x的静态图像机制受到用户的诟病,调整为动态图像机制是TensorFlow2.0的最大改进,也提供了保持静态计算图优点的几种方法。

1.2会话

在1.x版中,会话(session )是客户端程序与TensorFlow系统进行交互的接口,定义的计算图必须在会话中执行。 创建会话后,将初始化一个空图,客户端程序使用会话提供的“Extend”方法将新节点添加到该图中,并使用tf.Session类提供的“run”方法运行该图大多数情况下,只需创建一个会话和计算图,然后在会话中重复运行整个计算图或其部分子图。

由于TensorFlow2.0采用了动态图表机制,因此在会话期间无需运行计算图表。 “tf.Session”类位于兼容模块“tensorflow.compat.v1”中,该模块包含完整的TensorFlow1.x应用程序。 为了保持静态图表的优点(如性能优化和可移植性),TensorFlow2.0提供了tf.function方法。 通过使用由tf.function限定的python函数,TensorFlow可以将其作为一个图表来执行。

1.3运算操作和运算核心

计算图表中的每个节点都是“操作”(operation ),通常称为op。 每个运算都有名称,表示一种抽象运算,如“MatMul”,表示矩阵乘法。 每个运算都可以有自己的属性,但所有属性都必须预先设置,或者在创建计算图表时必须能够根据上下文进行估计。 通过设置运算属性,可以使运算操作支持不同的yxdxbw(tensor )元素类型,例如矢量加法运算只接受浮点型的yxdxbw。 运算核心(kernel )是在特定的硬件(CPU和GPU等)上实现运算操作的,在TensorFlow中可以通过注册机制添加新的运算操作,也可以在现有的运算操作中添加新的运算核心。

TensorFlow的部分运算操作

1.4 yxdxbw

yxdxbw(tensor )可以看作多维数组或列表,这是对向量和矩阵的更高维泛化,yxdxbw由“tf.Tensor”类定义。 计算图表中的一个运算操作可以获取零个以上的yxdxbw作为输入,运算后会生成零个以上的yxdxbw输出。 这些yxdxbw从一个节点(运算操作)到另一个节点,在计算图表的边缘流动(flow ),因此被命名为TensorFlow。

yxdxbw有两个属性:

数据类型(同一yxdxbw中的每个元素具有相同的数据类型,如float32、int32和string ),即yxdxbw的维数和

每个维度的大小)

TensorFlow中yxdxbw的形状示例

TensorFlow中有一些特殊的yxdxbw,以下是一些主要的特殊yxdxbw:

tf.Variable(变量,TensorFlow中的yxdxbw一般都不会被持久化保存,参与一次运算操作后就会被丢弃了。变量(variable)是一种特殊的运算操作,它可以将一些需要持久化保存的yxdxbw存储在内存或显存中,并会返回一个可以对该变量所引用的yxdxbw进行一系列特定操作的句柄,例如Assign和AssignAdd(等同于“+=”)等。模型的参数是保存在变量中的,在模型的训练过程中,参数在不断地更新。变量的值可以修改,但是维度不可以变。)tf.constant(常量,常量定义时必须初始化值,且定义后其值和维度不可再改变。)tf.placeholder(占位符,在执行“session.run()”方法时传入具体的值,TensorFlow2.0中不再使用,但依然可以在“tensorflow.compat.v1”模块中找到。)tf.SparseTensor(稀疏yxdxbw)2. 从1.x到2.0的变化

TensorFlow 2.0在1.x的基础上做了重新设计,重点放在了提升开发人员的工作效率上,确保2.0版本更加的简单易用。TensorFlow 2.0为了提升易用性做了很多改进,例如对API做了精简,删除了冗余的API,使得API更加一致(例如统一了TensorFlow和tf.keras的循环神经网络和优化器等),以及由静态计算图转变为了动态计算图等(这使得代码的编写和调试变得更加容易)。接下来我们看看TensorFlow 2.0的一些主要变化。

2.1. API精简

很多TensorFlow 1.x的API在2.0中被去掉或者改变了位置,还有一些则被新的API给替换掉了。官方提供了一个转换工具,可以用来将1.x版本的代码升级到2.0,其主要的工作其实就是修改这些有变更的API。不过使用该工具不一定能够转换成功,转换成功后的代码也并不一定能够正常运行,很多时候还是需要人工修改。

2.2. Eager execution

Eager execution(动态图机制)是TensorFlow 从1.8版本开始正式加入的,但只是作为一种可选操作,在TensorFlow 2.0之前,TensorFlow默认的模式都是Graph execution(静态图机制),TensorFlow 2.0将Eager execution做为了默认模式。在该模式下用户能够更轻松的编写和调试代码,可以使用原生的Python控制语句,大大降低了学习和使用TensorFlow的门槛。在TensorFlow 2.0中,图(graph)和会话(session)都变成了底层实现,而不需要用户关心了。

2.3. 取消全局变量

TensorFlow 1.x非常依赖隐式全局命名空间。当我们调用“tf.Variable”创建变量时,该变量就会被放进默认的图中,即使我们忘记了指向它的python变量,它也会留在那里。当我们想恢复这些变量时,我们必须知道该变量的名称,如果我们没法控制这些变量的创建,也就无法做到这点。TensorFlow 1.x中有各种机制旨在帮助用户再次找到他们所创建的变量,而在2.0中则取消了所有这些机制,支持默认的机制:跟踪变量。当我们不再用到创建的某个变量时,该变量就会被自动回收。

2.4. 使用函数而不是会话

在TensorFlow 1.x中,我们使用“session.run()”方法执行计算图,“session.run()”方法的调用类似于函数调用:指定输入数据和调用的方法,最后返回输出结果。为了保留静态图的一些优势,例如性能优化以及重用模块化的TensorFlow函数等,在TensorFlow2.0中,我们可以使用“tf.function()”来修饰python函数以将其标记为即时(Just-In-Time)编译,从而TensorFlow可以将其作为单个图来执行。

3. TensorFlow2.0的架构

Tensorflow作为全球最受欢迎、使用最为广泛的机器学习平台之一,在其发展的三年时间里,也是机器学习和人工智能发展最为迅猛的三年。TensorFlow2.0是一个重要的里程碑,其重心放在了简单性和易用性上,尽量降低用户使用的门槛。在TensorFlow成长的这几年里,TensorFlow团队为其添加了许多的组件,在TensorFlow2.0里,这些组件被打包成了一个全面的平台,它支持从训练到部署的标准化的机器学习流程。如图2-1所示是TensorFlow2.0架构的简化概念图。

ensorFlow2.0架构的简化概念图

接下来我们结合上图介绍一下TensorFlow2.0的基本工作流程以及对应可以使用的API,在2.3节里我们会根据TensorFlow的官方文档重点介绍一下“tf.data”和“tf.keras”这两个API,让读者快速入门TensorFlow2.0的使用。其它的API,读者可以结合官方的文档在本书后续的项目实战中慢慢熟悉和掌握。

3.1. 使用tf.data加载数据

我们使用tf.data创建的输入管道来读取训练数据,并可以通过tf.feature_column来指定特征列或者交叉特征。

3.2. 使用tf.keras或Premade Estimators构建、训练和验证模型

tf.keras作为TensorFlow的核心高级API,其已经和TensorFlow的其余部分紧密集成,使用tf.keras可以简单、快捷的构建我们的模型。另外tf.estimator中打包了一些标准的模型供我们直接使用,例如逻辑回归、提升树以及随机森林等。当我们不想从头开始训练一个模型时(例如这个模型的训练可能非常耗时),我们可以使用TensorFlow Hub模块来进行迁移学习。

3.3. 使用eager execution运行和调试模型,以及使用tf.function充分利用计算图的优势

前面已经介绍过,在eager execution模式下,我们可以更加方便的编写和调试代码,在TensorFlow2.0中该模式是默认开启的。我们可以使用tf.function来将python程序转换为TensorFlow的静态计算图,这样就可以保留TensorFlow1.x版本中的静态计算图的一些优势。

3.4. 使用Distribution Strategies进行分布式训练

对于大规模的机器学习训练任务,tf.distribute.Strategy API旨在让用户只需要对现有的模型和代码做最少的更改,就可以实现分布式的训练。TensorFlow支持CPU、GPU以及TPU等硬件加速器,我们可以将训练任务分配到单节点/多加速器以及多节点/多加速器。

3.5. 使用SavedModel存储模型

在TensorFlow中有两种模型存储的格式,一个是检查点(checkpoints),另一个是SavedModel,前者依赖于创建模型的源代码,而后者则与创建模型的源代码无关,因此标准化后的SavedModel可以作为TensorFlow Serving、TensorFlow Lite、TensorFlow.js或者其它编程语言的交换格式。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有