拥有多个tf.Graph有什么意义?

时间:2017-01-03 16:57:22

标签: python tensorflow

拥有多个tf.Graph有什么意义?

我正在考虑机器学习模型的超参数调整,其中模型本身就是一个图形,或者在同一个图形中将几个模型定义为断开连接的组件。

我理解有多个tf.Session是不好的,因为任务调度不能正确完成,所以我假设在一个会话中可能有多个tf.Graph个对象(尽管tf.Session(graph=...)请求区别但是这样做的重点是什么,而不是像tf.variable_scope那样有几个组件呢?主要是用tf.train.Saver保存的内容,在TensorBoard中可视化,等等?哪种方法更可取?模型是否应该共享一个图表,或者每个模型都有自己的超参数调整?

在代码库的其余部分使用tf.reset_default_graph(); sess = tf.InteractiveSession()并忘记tf.Graphtf.Session似乎更简单。我错过了什么?

1 个答案:

答案 0 :(得分:3)

如果您只有一个会话,那么拥有多个图表是没有意义的。会话链接到图表,因此如果您尝试从其他图表运行元素,则会出现xyz is not an element of this graph错误。

当您有多个会话时,有多个图表是有意义的。例如,假设您使用的是分布式TensorFlow,但也希望在本地进行一些计算。你可以做这样的事情

local_session = tf.Session("", graph=local_graph)
remote_session = tf.Session("grpc://...", graph=remote_graph)

但是,您可能会使用同一个tf.Graph对象的两个会话,但是TF_ExtendGraphsession.run对此对象will result的任何添加都会调用下一个[ant:scalac] error: error while loading <root>, Error accessing ... activation\1.0.2\48d628027388ba84af265623c1434a70 bffdc175\activation-1.0.2.jar 即使它是{该会议没有必要。换句话说,共享图表意味着在修改图表时向所有会话发送&lt; = 2GB图形描述。