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

Pro*_*mer 10 python with-statement tensorflow

我正在练习名为 concatenate 的 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))
Run Code Online (Sandbox Code Playgroud)

然后我检查文档:tensorflow 并说:

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

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

提前致谢,祝您有美好的一天!

小智 11

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

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


Lea*_*der 5

tensorflow文档对此非常具体。

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

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