拥有多个tf.Graph
有什么意义?
我正在考虑机器学习模型的超参数调整,其中模型本身就是一个图形,或者在同一个图形中将几个模型定义为断开连接的组件。
我理解有多个tf.Session
是不好的,因为任务调度不能正确完成,所以我假设在一个会话中可能有多个tf.Graph
个对象(尽管tf.Session(graph=...)
请求区别但是这样做的重点是什么,而不是像tf.variable_scope
那样有几个组件呢?主要是用tf.train.Saver
保存的内容,在TensorBoard中可视化,等等?哪种方法更可取?模型是否应该共享一个图表,或者每个模型都有自己的超参数调整?
在代码库的其余部分使用tf.reset_default_graph(); sess = tf.InteractiveSession()
并忘记tf.Graph
和tf.Session
似乎更简单。我错过了什么?
答案 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_ExtendGraph
中session.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图形描述。