计算图是Tensorflow 的最基本的概念。Tensorflow中所有的计算都会被转化成计算图上的结点。
Tensorflow 程序一般可以分为两个不同的阶段,第一个阶段定义计算图中所有的计算,在这个过程中,Tensorflow会自动将定义的计算转化为计算图上的结点。
Tensorflow有通过tf.get_default_graph获取当前默认的计算图 ,也支持通过tf.Graph函数来生成新的计算图。不同的计算图中的张量(tensor)和运算不会被共享。
以下为一个示例
import tensorflow as tf
g1 = tf.Graph()
with g1.as_default():
#在计算图g1中定义变量“v”,并设置初始值为0
v = tf.get_variable(
"v",shape=[1],initializer=tf.zeros_initializer)
g2 = tf.Graph()
with g2.as_default():
#在计算图g2中定义变量“v”,并设置初始值为1
v = tf.get_variable(
"v",shape=[1],initializer=tf.ones_initializer)
#在计算图g1中获取“v”的取值
with tf.Session(graph=g1) as sess:
tf.global_variables_initializer().run()
with tf.variable_scope("",reuse = True):
#在计算图g1中,变量“v”的取值应该是0,所以下面这行会输出[0.]
print(sess.run(tf.get_variable("v")))
#在计算图g2中获取“v”的取值
with tf.Session(graph=g2) as sess:
tf.global_variables_initializer().run()
with tf.variable_scope("",reuse = True):
#在计算图g2中,变量“v”的取值应该是1,所以下面这行会输出[1.]
print(sess.run(tf.get_variable("v")))
这个示例生成了两个计算图g1和g2,两个计算图中都有一个变量v ,分别表示[0.]和[1.],所以将其分别进行Session输出时,同时v但是输出的结果不同
PS:在程序中,前面两个with会报错,不知道是怎么一回事,但是不影响最后输出
报错的内容是:
Context manager 'generator' doesn't implement __enter__ and __exit__.pylint(not-context-manager)
这个问题目前还没影响学习,所以在接下来的学习中再研究