2017-10-07 251 views
1

Tensorflow API提供了一些预先训练模式,使我们能够与任何数据集训练他们。如何在会话中运行多个图形 - Tensorflow API

我想知道如何初始化和一个tensorflow会话中使用多个图形。我想在两个图中导入两个训练好的模型,并将它们用于对象检测,但我在尝试在一个会话中运行多个图时丢失了。

是否有任何特定的方法在一个会话中使用多个图表?

的另一个问题是,即使我创造了2个不同的图形两个不同的会话,并尝试与他们一起工作,我最终得到类似的结果,在第二个作为第一被实例化会话。

回答

1

每个Session只能有一个Graph。这就是说,根据你特别想做什么,你有几个选择。

第一个选项是创建两个单独的会话和一个图形加载到每个会话,如在the documentation here说明。你提到你用这种方法从每次会话中获得了意想不到的类似结果,但没有更多细节,很难明确你的案例中的问题是什么。我怀疑要么是同一个图被加载到每个会话中,要么是当你尝试单独运行每个会话时,同一个会话正在运行两次,但没有更多细节很难说。

第二个选择是加载两个图形作为主会话图的子图。您可以在图形中创建两个范围,并为要在该范围内加载的每个图形构建图形。那么你可以把它们当作独立的图表,因为它们之间没有任何关联。在正常运行图形全局函数时,您需要指定这些函数适用于哪个范围。例如,使用其优化器在其中一个子图上执行更新时,只需使用类似this answer中显示的内容即可获取该子图范围的可训练变量。

除非您明确需要这两个图表能够在TensorFlow图形中以某种方式进行交互,否则我会推荐第一种方法,以便您不需要通过子图所需的额外箍环(例如需要过滤在任何特定时刻使用的范围,以及图形全局事物在两者之间共享的可能性)。

+0

感谢您的回复。我没有意识到第二个选项的性能,但创建两个会话可能会对CPU/GPU造成很大的负载,然后我们可能无法实时使用它们。你认为使用第二种方案对CPU有相似或较小的影响吗?我会尽力为您提供有关最早创建不同会话问题的更多详细信息。 – saikishor

+0

@SaiKishorKothakota:除非两个加载的图形共享变量,否则我不认为有两个会话会导致CPU/GPU的使用量比将它们加载到一个会话中更大。与图元素本身(大多数情况下)的内存使用相比,会话的开销应该很小。 – golmschenk

+0

请在这里找到代码:https://pastebin.com/VnN8f8FC。如果可以,请尝试对此发表您的评论。谢谢 – saikishor