【深度学习】TensorFlow默认图与自定义图

217 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情

注意:本文使用tensorflow1.x版本进行演示

使用本地Jupyter Notebook搭载TensorFlow相关库进行操作

1. TensorFlow图结构

图包含了一组tf.Operation代表的计算单元对象和tf.Tensor代表的计算单元之间流动的数据

1.1 默认图

当我们开始声明张量和运算的时候,没有开启会话之前,TensorFlow内部会默认帮我们创建一个图。

  • 换句话说,通常TensorFlow会默认帮我们创建一张图

查看默认图的方法有以下两种:

  1. 通过调用tf.get_default_graph()访问,要将操作添加到默认图形中,直接创建OP即可。
  2. 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()

运行结果如下图所示:有输出结果可知,默认图的输出结果都是一串数字,这些数字代表一个保存的内存地址。

image.png

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()

通过运行结果可以看出,此时的自定义图地址与之前默认图地址不一样,说明在不同的内存区域。但是自定义图属性都在同一块区域地质。 image.png