tensorflow中Session的种类以及与计算图的对应关系

本文介绍了TensorFlow中三种会话(Session)的使用方法及其特点,包括普通Session、InteractiveSession及Supervisor.managed_session,并通过示例代码讲解如何正确管理计算图。

参考博客:http://blog.csdn.net/lujiandong1/article/details/53448012

http://blog.csdn.net/lyc_yongcai/article/details/73467480


Session的种类:

(1)普通的tf.Session()

(2)tf.InteractivesSession()

为了便于使用诸如 IPython之类的 Python 交互环境, 可以使用InteractiveSession 代替 Session 类, 使用 Tensor.eval()和 Operation.run()方法代替Session.run(). 这样可以避免使用一个变量来持有会话。

(3)tf.train.Supervisor().managed_session() 
         与上面两种启动图相比较来说,Supervisor() 帮助我们处理一些事情:
         (a) 自动去 checkpoint 加载数据或者初始化数据
       (b) 自动有一个 Saver ,可以用来保存 checkpoint( sv.saver.save(sess, save_path))
          (c) 有一个 summary_computed 用来保存 Summary


         因此我们可以省略了以下内容:
          (a)手动初始化或者从 checkpoint  中加载数据
          (b)不需要创建 Saver 类, 使用 sv 内部的就可以
          (c)不需要创建 Summary_Writer()


tensorflow使用图来定义计算,在session中来执行图中定义的计算

tensorflow会为我们指定一张默认的图.然后sesssion会直接和该默认图相关联.

如果新建一个张图,那么就存在2张图,

首先看如下程序:

import tensorflow as tf

with tf.Graph().as_default():
    a = tf.constant([5], name='a')

init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    print(sess.run(a))

程序会报错,因为init = tf.global_variables_initializer()操作并没有被包含在tf.Graph()中,所以这个init操作是对于系统默认的计算图进行的,同时Session也是对应系统默认的计算图。

注:所有没被包含在我们新建图中的操作都默认存在系统创建的计算图中

以下2种修改方法:

1.将init操作和session都放到 with tf.Graph().as_default():中

import tensorflow as tf

with tf.Graph().as_default():
    a = tf.constant([5], name='a')
    init = tf.global_variables_initializer()

    with tf.Session() as sess:
        sess.run(init)
        print(sess.run(a))


2.为新建的Graph()对象创建一个名字,在Session()对象中加入该名字,此时Session不需要放在Graph()域中

import tensorflow as tf

graph = tf.Graph()
with graph.as_default():
    a = tf.constant([5], name='a')
    init = tf.global_variables_initializer()

with tf.Session(graph=graph) as sess:
    sess.run(init)
    print(sess.run(a))

错误:session既然已经成为graph的session,就不能执行除graph计算图之外的操作

import tensorflow as tf

graph = tf.Graph()
with graph.as_default():
    a = tf.constant([5], name='a')
init = tf.global_variables_initializer()

with tf.Session(graph=graph) as sess:
    sess.run(init)
    print(sess.run(a))




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值