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

举报
华章计算机 发表于 2019/06/04 19:37:53 2019/06/04
【摘要】 本书摘自《深度学习:主流框架和编程实战》——书中第2章,第2.1.2节,作者是赵涓涓、强彦。

2.1.2 TensorFlow中的模型

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

(1)计算模型

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

image.png

图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中运算结果的引用。在张量中保存的是如何得到数据的计算过程,而不是真正保存这些数据。

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

(3)运行模型

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


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。