在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())
答案 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