目的是使用“ with tf.Session()”?

时间:2018-12-21 13:09:37

标签: python tensorflow with-statement

我正在练习称为连接的keras方法。

在此示例中使用with语句会让我思考该语句的目的

示例代码如下:

import numpy as np 
import keras.backend as K
import tensorflow as tf

t1 = K.variable(np.array([ [[1, 2], [2, 3]], [[4, 4], [5, 3]]]))
t2 = K.variable(np.array([[[7, 4], [8, 4]], [[2, 10], [15, 11]]]))

d0 = K.concatenate([t1 , t2] , axis=-2)

init = tf.global_variables_initializer()

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

然后我从以下位置检查文档:tensorflow 并说:

  

会话可能拥有资源,例如tf.Variable,tf.QueueBase和tf.ReaderBase。当不再需要这些资源时,重要的是释放它们。为此,请在会话上调用tf.Session.close方法,或将该会话用作上下文管理器。

我相信已经解释了所有这些内容,但是有人可以给我更直观的解释。

预先感谢,祝您愉快!

2 个答案:

答案 0 :(得分:1)

tf.Session()启动一个TensorFlow Graph对象,在其中通过操作(或ops)处理张量。操作完成后,with块将终止会话。因此,不需要调用Session.close。此外,会话包含变量,全局变量,占位符和操作。这些必须在创建会话后启动。因此,我们称tf.global_variables_initializer().run()

  

图包含张量和运算。要启动图,将创建一个运行该图的会话。换句话说,图提供了一个模式,而会话则处理一个图以计算值(张量)。

答案 1 :(得分:1)

张量流documentation对此非常具体。

  

由于tf.Session拥有物理资源(例如GPU和网络连接),因此通常用作上下文管理器(在with块中),当您退出该块时,它将自动关闭会话

     

也可以在不使用with块的情况下创建会话,但是在完成tf.Session.close释放资源后,您应该显式调用{{3}}。