tf.get_default_graph()和as_default()

tf.get_default_graph()和as_default()小总结:

tf.get_default_graph() tensorflow中可以通过这个API获取当前代码中的默认会话对象
as_default()这个操作,就是将with语句块中的默认图修改为当前构建的tf.Graph()这个对象;也就是:as_default的操作是将新建的图在当前这个with语句块的范围内设置为默认图

参考别人的博客内容:

tf.Graph()和as_default()

  1. tf.Graph()表示实例化一个用于tensorflow计算和表示用的数据流图,不负责运行计算。在代码中添加的操作和数据都是画在纸上的画,而图就是呈现这些画的纸。我们可以利用很多线程生成很多张图,但是默认图就只有一张。
  2. tf中可以定义多个计算图,不同计算图上的张量和运算是相互独立的,不会共享。计算图可以用来隔离张量和计算,同时提供了管理张量和计算的机制。
  3. 使用g = tf.Graph()函数创建新的计算图
  4. 在with g.as_default():语句下定义属于计算图g的张量和操作
  5. 在with tf.Session()中通过参数graph=xxx指定当前会话所运行的计算图
  6. 如果没有显示指定张量和操作所属的计算图,则这些张量和操作属于默认计算图
  7. 一个图可以在多个sess中运行,一个ses也能运行多个图。建议:如果有多个图多个会话,最好是将一个一个的会话写到对应的图里面。
import tensorflow as tf
tf.Session()
with tf.Graph().as_default():
    # tf.Graph()没有__enter__和__exit__内置方法。所以调用as_default();as_default()的返回值是使此图成为一个默认的图的上下文管理器
    a = tf.constant(1.0)
    b = tf.constant(2.0)

    # 构建Session会话的时候,如果没有给定graph的,使用的是默认的graph
    with tf.Session() as sess:
        print(sess.run(a))
        print(sess.run(b))



'''
a = tf.constant([1.0, 2.0])
b = tf.constant([2.0, 3.0])
result = a + b

# 定义两个计算图
g1 = tf.Graph()
g2 = tf.Graph()

# 在g1中定义张量和操作
with g1.as_default():  # as_default()的返回值是使此图成为一个默认的图的上下文管理器
    a = tf.constant([1.0, 1.0])
    b = tf.constant([1.0, 1.0])
    result1 = a + b

# 在g2中定义张量和操作
with g2.as_default():
    a = tf.constant([2.0, 2.0])
    b = tf.constant([2.0, 2.0])
    result2 = a + b

with tf.Session() as sess:
    out = sess.run(result)
    print(out)
'''

关于Graph的更深理解

import tensorflow as tf

print("外部代码中的默认图:{}".format(tf.get_default_graph()))

# 创建一个新的图对象
new_graph = tf.Graph()
print("新创建的新图:{}".format(new_graph))

# with tf.Graph():
#     # 这段代码报错
#     print("第一个With语句块中的默认图:{}".format(tf.get_default_graph()))

with new_graph.as_default():
    # as_default的操作是将新建的图在当前这个with语句块的范围内设置为默认图
    print("第二个With语句块中的默认图:{}".format(tf.get_default_graph()))
with tf.Session() as sess:
    print("Session中的默认图:{}".format(tf.get_default_graph()))
print("外部代码中的默认图:{}".format(tf.get_default_graph()))

'''
代码执行结果如下:
外部代码中的默认图:<tensorflow.python.framework.ops.Graph object at 0x00000036C816E508>
新创建的新图:<tensorflow.python.framework.ops.Graph object at 0x00000036C8C6B148>
第二个With语句块中的默认图:<tensorflow.python.framework.ops.Graph object at 0x00000036C8C6B148>
Session中的默认图:<tensorflow.python.framework.ops.Graph object at 0x00000036C816E508>
外部代码中的默认图:<tensorflow.python.framework.ops.Graph object at 0x00000036C816E508>
'''
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值