再看Tensorflow 里面的Graph 和Session

前言

今天深度学习课上老师着重讲了tensorflow里面的graph和Session的关系,这勾起了我的很多记忆,以前初学tensorflow的时候 那些概念都没有理解的很透彻,现在再来集中的总结一下。

Graph

在分布式系统中,人们经常使用计算图来表示并行计算模型。计算图是一个有向图,图里面有节点和有向边。在计算图里面,节点表示"计算"单元,有向边表示数据的流动关系或者依赖关系。计算图是语言无关的,用户可以使用python定义好计算图,然后把它使用Saver保存下来,然后再用C++恢复计算图。

在tensorflow里面,节点的范围比较广泛,tensorflow里面的节点不但包括计算节点,同时也包括常亮、变量、占位符等类型的节点。即:tf.Constante,tf.Variable,tf.Operation,tf.Placeholder都是节点。

在tensorflow里面,计算图是通过tf.Graph类来实现的,每个tf.Graph都包含如下两类重要信息:

  1. 计算图结构。定义了图里面涉及的节点和边,从图中可以得到不同节点之间的连接关系。
  2. 图的集合信息。这里的集合信息特指tensorflow会为每一个计算图创建一系列的元数据集合,通过这些元数据可以恢复出对应的计算图结构。

通常,我们所谓的定义网络结构,都是在特定的tf.Graph下构建的。所有的te.Operation函数以及tf.Tensor函数都具有一个带默认值的参数:graph。通过制定这个参数可以指定对应的节点和边究竟是属于那一个graph的。

每个tf.Graph对象都会为它包含的tf.Operation定义一个namespace,tensorflow会自动保证在同一个graph里面,每个节点都拥有不同的名字。

例如,tf.contant(42.0,name="answer"),创建一个名字叫做"answer"的tf.Operation,同时返回一个名字叫做answer:0的tf.tensor。因此,我们可以通过指定sess.run的fetch参数为“answer:0”来获得这个值,这个方法在inference的时候是相关有效的,在预测阶段,只需要提供Saver的保存值,然后通过名字去获取输入/输出值即可。

Session

Tensorflow 使用tf.Session类来表示前端tensorflow程序和后端的C++ 运行时系统之间的连接。一个tf.Session对象提供了对本机或远程cpu/gpu资源的访问方式,同时Session也会把tf.Graph结构给缓存起来便于多次重复对相同的计算图进行训练。

一个tf.Session对象会占用一定的物理资源,因此tf.Session一般会用于with 语句块里面,这样就可以在跳出with语句的时候自动的释放Session对象占用的物理资源。当然,用户也可以不使用with,而是自己显式的调用tf.Session.close()函数来释放。

用户在创建tf.Session的时候,有三个参数可以制定。
一个是target,该参数主要用于指明本Session使用本地还是使用远程主机的资源。

graph参数则是指明tf.Session所要运行的计算图。一般来说,一个tf.Session是运行默认graph的,而且所有的operation必须是在特定的graph内运行的,如果想要在同一个进程中运行多个graph,那么就需要创建多个Session,而且每个Session都与特定的graph绑定起来。否则在载入第二个graph的时候,tensorflow将会报某些tensor类型不一致的错误。

tf.Session.run()是执行tf.Operation和获取tf.Tensor具体值的主要方式,在调用该函数的时候用户需要指定 fetches 参数,这个参数决定此次运行将要从计算图中提取什么样的值以及需要实际计算那些节点构成的计算图子图。这个计算子图包括fetches参数里面列举的所有运算,加上所有这些运算所依赖的其它必需节点。

每调用tf.Session.run一次,session对应的计算图的子图都会计算一次,例如前向传播一次,或反向传播一次,或前向和反向传播一次,这取决于fetches参数和他们所依赖的节点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值