参考tensorflow官方文档的介绍
1.定义
一个TensorFlow的运算,就是一个数据流的图。
一幅图中包含一些操作(Operation)对象,这些对象是计算节点(计算单元)。前面说过的Tensor对象,则是表示在不同的操作(operation)间的数据节点(数据单元)
默认的图一开始就建好了,并可以通过调用 tf.get_default_graph来访问。要向默认图添加操作,只需调用定义了新操作的函数之一:
import tensorflow as tf
c=tf.constant(4.0)
assert c.graph is tf.get_default_graph()
# assert是断言语句,判断c.graph和tf.get_default_graph是不是同一个默认图,如果不是,会抛出错误
print(c.graph)
print(tf.get_default_graph())
# 同样,我们可以输出两个图来进行判断是不是一致,结果显示一致。
结果
很明显是一致的。
另一个典型的用法是tf.Graph.as_default上下文管理器,
它能覆盖上下文的生命周期的当前默认图:
import tensorflow as tf
g = tf.Graph()
with g.as_default():
# Define operations and tensors in `g`。定义一个操作或张量为g
c = tf.constant(30.0)
assert c.graph is g
# 断言c.graph和g是不是同一个图
print(c.graph)
print(g)
结果:
很显然是的,输出都一样,而且断言也没有报错。
2.属性(Properties)
building_function: Returns True iff this graph represents a function.
collections: 返回此图所知道的集合的名称。
finalized: 如果这幅图已经完成返回true
graph_def_versions: 此图的GraphDef版本信息
Returns: A VersionDef
seed: 这张图的图形级随机种子
version 返回一个版本号,该版本号随着操作程序添加到图中而增加,(注意,这与tf.Graph.graph_def_versions无关)。
Returns: 一个整数版本,随着操作程序的增加而增加。
3.方法(函数)
tf的函数很多,可以到用时去查API,先学习几个
1.get_name_scope:返回当前名称范围
举例:
with tf.name_scope('scope1'):
with tf.name_scope('scope2'):
print(tf.get_default_graph().get_name_scope())
最后就会返回scope1/scope2
2.get_tensor_by_name(name):返回给定名称的tensor
参数:name:要返回的tensor的名称
3.name_scope(name):返回一个上下文管理器,它为操作创建分级名称。
名称参数将解释如下:
一个字符串(不以“/”结尾)将创建一个新的名称范围,在这个范围中,名称被附加到在上下文中创建的所有操作的前缀。如果名称以前被使用过,它将通过调用self.unique_name(名称)来实现。
举例:
with tf.Graph().as_default() as g:
c = tf.constant(5.0, name="c")
assert c.op.name == "c"
c_1 = tf.constant(6.0, name="c")
assert c_1.op.name == "c_1"
# Creates a scope called "nested"
with g.name_scope("nested") as scope:
#g.name_scope("nested") as scope为绝对路径,在这范围内的name都是它的下级name
nested_c = tf.constant(10.0, name="c")
assert nested_c.op.name == "nested/c" #只写c会断言错误,要加上g的范围
# Creates a nested scope called "inner".
with g.name_scope("inner"):
nested_inner_c = tf.constant(20.0, name="c")
assert nested_inner_c.op.name == "nested/inner/c"
# Create a nested scope called "inner_1".
with g.name_scope("inner"): #前面已经存在inner,再添加系统会给重命名
nested_inner_1_c = tf.constant(30.0, name="c")
assert nested_inner_1_c.op.name == "nested/inner_1/c"
# Treats `scope` as an absolute name scope, and
# switches to the "nested/" scope.
with g.name_scope(scope):
nested_d = tf.constant(40.0, name="d")
assert nested_d.op.name == "nested/d"
with g.name_scope(""):
e = tf.constant(50.0, name="e")
assert e.op.name == "e" #当括号内为空字符串时,就不在g范围内,而只是单纯的操作名字
以后有用到的在更新