深度学习主流框架和编程实战》——2.1.2 TensorFlow中的模型

网友投稿 463 2022-05-30

2.1.2 TensorFlow中的模型

2.1.1节介绍了TensorFlow的诞生及特点,这一小节主要说明TensorFlow的三种主要模型:计算模型、数据模型和运行模型。

(1)计算模型

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

图2-1中的每一个节点都是一个运算,每一条边都代表了计算之间的依赖,箭头方向代表依赖关系。例如,运算a和运算b不依赖任何关系,而有一条由a指向Add的边和一条由b指向Add的边,表示Add运算是依赖于运算a和运算b的。

在TensorFlow程序中,系统会维护一个默认的计算图,通过tf.get_default_graph()函数可以获取当前默认的计算图,不同的计算图上的张量和运算不会共享。有效地整理TensorFlow中的资源同样也是计算图的重要功能之一。在一个计算图中,可以通过集合(Collection)来管理不同类别的计算资源,比如通过tf.add_to_collection函数可以将资源加入集合中,然后通过tf.get_collection获取集合中的资源。

(2)数据模型

张量(Tensor)是TensorFlow中一个非常重要的概念,是TensorFlow的数据模型。在TensorFlow程序中,所有数据都可以通过张量的形式来表示。张量的最基本属性是维度,其中零维张量表示为标量(Scalar),一维张量表示为向量(Vector),当维数n超过2时,张量就可以理解为n维数组,但在TensorFlow中张量并不是以数的形式实现的,只是对TensorFlow中运算结果的引用。在张量中保存的是如何得到数据的计算过程,而不是真正保存这些数据。

《深度学习:主流框架和编程实战》——2.1.2 TensorFlow中的模型

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

(3)运行模型

会话(Session)是拥有并管理TensorFlow程序运行时所有资源的概念,是TensorFlow的运行模型。当所有计算完成之后,需要关闭会话来帮助系统回收计算资源,否则就可能产生资源泄漏的问题。TensorFlow中使用会话的模式一般有两种:一种模式需要明确调用会话生成函数和会话关闭函数,当所有计算完成之后,需要明确调用会话关闭函数以释放资源。然而,当程序因为异常退出时,会话关闭函数可能不会被执行而导致资源的泄漏。另一种模式是利用Python上下文管理器的机制,只要将所有的计算放在with中即可。上下文管理器退出时会自动释放所有资源,这样既解决了因为异常退出时资源释放的问题,同时也解决了忘记调用会话关闭函数而产生的资源泄漏问题。在交互式环境下,通过设置默认会话的方式获取张量的取值更加方便,所以TensorFlow提供了一种在交互式环境下直接构建默认会话的函数,使用此函数会自动将生成的会话注册为默认会话。

TensorFlow 深度学习

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:《OpenStack高可用集群(上册):原理与架构》—1.4.2 业务系统容灾恢复
下一篇:开启云上多元新架构,华为云全栈混合云解决方案HCS 6.5发布
相关文章