TensorFlow学习记录:计算图

前一段时间在学Keras,对深度学习算是有了点了解。最近在学Tensorflow,感觉有些重要的概念需要记录下来,方便日后复习查看。

首先来看下什么是计算图

Tensorflow 程序中的计算过程可以表示为一个计算图,其作用与外观都可以类比程序流程图来理解,在计算图上我们可以直观地看到数据的计算流程。

计算图中每一个运算都可以视为一个节点(Node),每一个节点都可有任意个输入和输出。

如果一个运算的输入取值自另一个运算的输出,那么称这两个运算存在依赖关系,并且这两个运算的节点之间通过边相互连接。

通常将Tensorflow的计算图称为程序的“计算模型”,编写Tensorflow程序时,系统会自动维护一个默认的计算图,Tensorflow会自动将定义的所有计算添加到默认的计算图中。在Tensorflow程序中,通过函数get_default_graph()可以获取对当前默认计算图的引用。

一般情况下我们使用默认的计算图可以满足绝大部分情况下的需求,当我们需要更多的计算图来完成工作的时候,可以通过函数Graph()来生成新的计算图,而且可以通过函数as_default()将新的计算图设置成默认的计算图。

我们来看一个例子

import tensorflow as tf

g1=tf.Graph()
with g1.as_default():
	a=tf.get_variable("a",[2],initializer=tf.ones_initializer())
	b=tf.get_variable("b",[2],initializer=tf.zeros_initializer())
	
g2=tf.Graph()
with g2.as_default():
	a=tf.get_variable("a",[2],initializer=tf.zeros_initializer())
	b=tf.get_variable("b",[2],initializer=tf.ones_initializer())

with tf.Session(graph=g1) as sees:
	tf.global_variables_initializer().run()
	with tf.variable_scope("",reuse=True):
		print(sees.run(tf.getvariable("a")))
		print(sees.run(tf.getvariable("b")))
	#这里输出[1,1]
	#       [0,0]

with tf.Session(graph=g2) as sees:
	tf.global_variables_initializer().run()
	with tf.variable_scope("",reuse=True):
		print(sees.run(tf.getvariable("a")))
		print(sees.run(tf.getvariable("b")))
	#这里输出[0,0]
	#       [1,1]

可以看到,代码中使用了函数Graph()生成了两个计算图以及使用as_default()函数将生成的计算图设定为默认图,在计算图g1中,a是一个1x2维的矩阵[1,1],b是一个1x2维的矩阵[0,0],而在计算图g2中,a是一个1x2维的矩阵[0,0],b是一个1x2维的矩阵[1,1]。

由此,我们不难得出一个结论,名字相同的张量在不同的计算图中的值是不一样的,而且两个张量之间是互不干扰的。另外,不同的计算图上的张量和运算都不会共享的,也就是说,我们不能在某一计算图中调用其它计算图中的成员。

参考书籍:《TensorFlow深度学习算法原理与编程实战》 蒋子阳 著

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值