1. Tensorflow : 计算图

Tensorflow的运行机制包括两部分,一个是tensor, 一个是flow.

  • Tensor表明tensorflow所用的数据类型
  • flow也就是计算图,表明tensor之间的关系

所以在构建tensorflow的运行程序的时候,就包括两个步骤:

  1. 构建tensoflow计算图(Graph)
  2. 执行tensorflow计算图(Session)

1. 计算图的使用与注意事项

1.1 计算图的构建

    在tensorflow中定义tensor, tensorflow会自动将定义的tensor转化为计算图的一个节点,比如:

import tensorflow as tf
a = tf.constant([1, 2], name='a')
b = tf.constant([2, 3], name='b')
result = a + b
print(result)  # Tensor("add:0", shape=(2,), dtype=int32)

    如果直接运行result, 打印出来的是result这个tensor,而不是result中的值,这是因为上面的code只是在计算图中定义了节点,而没有执行
     可以通过tensorboard查看定义的tensor.

1.2 计算图注意事项

     如果没有显式定义计算图,tensorflow会自动维护默认的计算图

print(a.graph is tf.get_default_graph()) # True

     如果不使用tensorflow自动维护的默认计算图,也可以通过tf.Graph()来进行生成graph. 并且每个graph中的变量是不能进行共享的。

  • 从下面的代码可以看出g1和g2上面都有一个tensor为a, 但是两个计算图不共享变量。
import tensorflow as tf

g1 = tf.Graph()
print(g1)         ##
with g1.as_default():
    a = tf.get_variable('v', shape=[1,], initializer=tf.zeros_initializer)
    print(a.graph) #

g2 = tf.Graph()
with g2.as_default():
    a = tf.get_variable('v', shape=[1,], initializer=tf.ones_initializer)
    print(a.graph) # 


with tf.Session(graph=g1) as sess:
    init =tf.global_variables_initializer()
    sess.run(init)
    with tf.variable_scope('', resue=tf.AUTO_REUSE):
        sess.run(tf.get_variable('v', shape=[1,]))  # 0
with tf.Session(graph=g1) as sess:
	init =tf.global_variables_initializer()
	sess.run(init)
	with tf.variable_scope('', resue=tf.AUTO_REUSE):
		sess.run(tf.get_variable('v', shape=[1,]))  # 1

3. 集合

     tensorflow中的变量很多,所以需要将其变量组织起来,可以通过tf.add_to_collection和tf.get_collection添加和获取集合中的所有变量。
     tensorflow还定义了一些常见的集合

		 - tf.GraphKeys.VARIABLES : 所有变量, tf.GraphKeys.Global_VARIABLES.
		 - tf.GraphKeys.TRAINABLE_VARIABLES: 可学习的变量

你可能感兴趣的:(Tensorflow基础)