[英]What's the point of having more than one tf.Graph?
拥有多个tf.Graph
什么tf.Graph
?
我正在专门考虑机器学习模型的超参数调整,其中一个模型要么是一个单独的图,要么几个模型被定义为同一图中的断开连接的组件。
我知道拥有多个tf.Session
是不好的,因为无法正确地进行任务调度,因此我假设一个会话中可能有多个tf.Graph
对象(尽管tf.Session(graph=...)
可能会有所不同),而不是像tf.variable_scope
那样具有多个组件,这样做的目的是什么呢? 这主要与使用tf.train.Saver
保存,在TensorBoard中可视化等等保存什么有关吗? 哪种方法更好? 模型应该共享一个图形还是每个模型都有自己的超参数调整?
使用tf.reset_default_graph(); sess = tf.InteractiveSession()
似乎更简单tf.reset_default_graph(); sess = tf.InteractiveSession()
tf.reset_default_graph(); sess = tf.InteractiveSession()
,并在整个代码库的其余部分都忘记了tf.Graph
和tf.Session
。 我想念什么?
如果您只有一个会话,那么拥有多个图表毫无意义。 会话链接到一个图,因此,如果您尝试从另一个图运行一个元素,则会得到xyz is not an element of this graph
错误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
对象上使用两个会话,但是,对该对象的任何添加都会导致在下一个session.run
上调用TF_ExtendGraph
,即使该会话不是必需的。 换句话说,共享图意味着在修改图时向所有会话发送<= 2GB的图描述。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.