如何在Tensorflow中使用eval()提取值以及我们需要启动会话多少次

时间:2018-09-24 12:03:51

标签: python tensorflow

在tensorflow中,我们创建图,然后为了将值传递到图,我们必须启动一个会话。在下面的代码中,我一次启动了会话,然后尝试通过两种不同的方法来打印过滤器。但是我无法获得评估结果。我是否需要再次提及tf.Session以通过eval提取值?我还阅读了eval命令使用默认会话。因此,根据我的理解,我需要提及一次。

filter = tf.random_normal(shape=[2,1,1], seed=123)
sess=tf.Session()
print(sess.run(filter))
print(filter.eval())

1 个答案:

答案 0 :(得分:2)

您需要指定您希望sess成为默认会话。您可以通过两种方式来实现。一种是作为上下文管理器:

filter = tf.random_normal(shape=[2,1,1], seed=123)
sess = tf.Session()
with sess.as_default():
    print(sess.run(filter))
    print(filter.eval())

另一种选择是使用tf.InteractiveSession,这是一个常规会话,会在构造时将其注册为默认值:

filter = tf.random_normal(shape=[2,1,1], seed=123)
sess = tf.InteractiveSession()
print(sess.run(filter))
print(filter.eval())

顾名思义,建议tf.InteractiveSession进行交互使用。完整的程序或模块应首选上下文管理器(或仅避免使用.eval()以避免错误。

编辑:如果您使用上下文管理器,还可以使用它来确保会话也已关闭:

filter = tf.random_normal(shape=[2,1,1], seed=123)
with tf.Session() as sess, sess.as_default():
    print(sess.run(filter))
    print(filter.eval())
# sess will be closed after with block