首页 > 解决方案 > 创建两个 TensorFlow 会话时是否会创建多个图实例化?

问题描述

背景

我正在通过使用 Scikit-Learn 和 TensorFlow 进行动手机器学习的第二部分来学习 TensorFlow ,其中一个练习题是(我自己添加的粗体文本以增加问题的清晰度):

“如果您创建一个g包含变量的图形w,然后启动两个线程并在每个线程中打开一个会话,两者都使用相同的图形g,每个会话将拥有自己的变量副本w还是共享?”

书后提供的答案如下:

“在本地 TensorFlow 中,会话管理变量值,因此如果您创建一个g包含变量的图w,然后启动两个线程并在每个线程中打开一个本地会话,两者都使用相同的图g,那么每个会话将拥有自己的变量副本w。 ..”

我的问题

A)B)是对正在发生的事情的正确解释吗?

一)。两个会话都使用同一个graph实例g,并且两个单独的变量仅是由于两个单独的会话所致。

B)通过两个不同会话的实例化,两个线程使用相同的图架构g,但创建了两个独立的图实例化g,导致两个不同的变量。

标签: pythonmultithreadingtensorflowconceptual

解决方案


我认为这里的问题是“实例化”一词的歧义,以及图形和会话实际上是什么。

如果您有一个图表和两个打开的会话,则只有一个图表实例。这是一个 Python 对象,描述了模型执行的计算,即张量之间的操作,可能包括一些常量值和变量。如果您向该图添加新元素(新操作),则两个会话都可以访问它。重要的是要理解图是静态的,也就是说,它们没有状态,它们不计算任何东西,它们只是描述如何执行计算。它可以被认为是计算机程序源代码的模拟。

会话是一个对象,它存储可以在其上执行计算的图的状态。最重要的是,这个“状态”包含图中变量的值。因此,变量对象本身是图形的一部分(从这个意义上说,跨会话“共享”),但它在任何时候拥有的值都存储在每个打开的会话中。但是,变量值并不是存储在会话中的唯一内容。您还拥有诸如随机数生成器或数据集迭代器的状态之类的信息。请参阅什么是 tensorflow 中的“有状态对象”?. 按照之前的类比,会话类似于执行程序所使用的内存和 CPU,而图形是其源代码。

试图更具体地回答您的问题,我认为,如果我正确理解您的意思,正确的解释是A) 。


推荐阅读