持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情
注意:本文使用tensorflow1.x版本进行演示
使用本地Jupyter Notebook搭载TensorFlow相关库进行操作
1. TensorFlow图结构
图包含了一组tf.Operation代表的计算单元对象和tf.Tensor代表的计算单元之间流动的数据
1.1 默认图
当我们开始声明张量和运算的时候,没有开启会话之前,TensorFlow内部会默认帮我们创建一个图。
- 换句话说,通常TensorFlow会默认帮我们创建一张图
查看默认图的方法有以下两种:
- 通过调用
tf.get_default_graph()访问,要将操作添加到默认图形中,直接创建OP即可。 - op、sess都含有graph属性,默认都在一张图中
1.2 案例演示
- 使用两种方法查看默认图
- 定义函数,并且在函数中使用两种方法查看默认图
定义函数,在函数中打印查看默认图
def graph():
"""
图演示
"""
# TensorFlow实现加法运算
ten_1 = tf.constant(2)
ten_2 = tf.constant(3)
ten_3 = ten_1 + ten_2
print("TensorFlow加法运算的结果:\n", ten_3)
# 查看默认图
# 方法1:调用方法
default_graph = tf.get_default_graph()
print("default_graph:\n", default_graph)
# 方法2:查看属性
print("ten_1的图属性:\n", ten_1.graph)
print("ten_3的图属性:\n", ten_3.graph)
# 开启会话
with tf.Session() as sess:
ten_3_val = sess.run(ten_3)
print("ten_3_val:\n", ten_3_val)
print("session的图属性:\n", sess.graph)
return None
调用定义好的函数:
graph()
运行结果如下图所示:有输出结果可知,默认图的输出结果都是一串数字,这些数字代表一个保存的内存地址。
1.3 创建图
- 我们可以使用tf.Graph()自定义创建图
- 如果要在这张图中创建OP,典型用法就是使用tf.Graph.as_default()构成上下文管理器,然后在这个上下文管理器中定义数据和操作
- 这样通过上下文管理器,我们自己的操作就能绑在这个图中
1.4 案例演示:创建自定义图
- 创建自定义图并开启会话,打印图属性
def graph_zidingyi():
"""
自定义图演示
"""
# 自定义图
new_g = tf.Graph()
# 在自己的图中定义数据和操作
with new_g.as_default():
a_new = tf.constant(20)
b_new = tf.constant(30)
c_new = a_new + b_new
print("c_new:\n", c_new)
print("a_new的图属性:\n", a_new.graph)
print("c_new的图属性:\n", c_new.graph)
# 开启new_g的会话
with tf.Session(graph=new_g) as new_sess:
c_new_val = new_sess.run((c_new))
print("c_new_val:\n", c_new_val)
print("new_sess的图属性:\n", new_sess.graph)
return None
调用函数,运行结果如下所示:
graph_zidingyi()
通过运行结果可以看出,此时的自定义图地址与之前默认图地址不一样,说明在不同的内存区域。但是自定义图属性都在同一块区域地质。