在Tensorflow中,我们可以使用Between-graph Replication
为分布式培训构建和创建多个Tensorflow会话。MonitoredTrainingSession()
协调多个Tensorflow会话,并且有一个参数checkpoint_dir
来恢复Tensorflow会话/图。现在我有以下问题:
tf.train.Saver()
对象来恢复张量流图。但是我们如何使用MonitoredTrainingSession()
恢复它们呢?在MonitoredTrainingSession()
如何与测试(或预测)模式一起工作?在我读了Tensorflow博士,但没有找到这两个问题的答案。如果有人能找到解决办法,我真的很感激。谢谢!在
您应该导入元图,然后恢复模型。 从下面的片段中获得灵感,应该对你有用。在
看来恢复是为你处理的。在API文档中,它指出调用MonitoredTrainingSession将返回MonitoredSession的实例,该实例在创建时“…如果存在检查点,则还原变量…”
查看
tf.contrib.learn.Estimator(..).predict(..)
,更具体地说是tf.contrib.learn.Estimator(..)._infer_model(..)
方法here和{a2}。他们还创建了一个MonitoredSession。简短回答:
长话短说:
我会更新我的答案,因为我自己得到了更好的看法,可以做什么列车监控会话(列车监控训练课程只是创建一个列车监控会话,如source code)所示。在
下面是一个示例代码,演示如何每隔5秒将检查点保存到“./ckpt_dir”。中断时,它将在最后保存的检查点重新启动:
为了实现这一目标,在监控培训课程中所发生的事情实际上是三件事:
为了让它发挥作用tf.train.CheckpointSaverHook以及tf.train.ChiefSessionCreator必须传递对检查点目录和scaffold的相同引用。如果列车监控训练课程由于上述示例中的参数将由上述3个组件实现,因此它看起来如下所示:
^{pr2}$为了进行训练+交叉验证会话,可以使用列车监控会话。与partial一起运行\u step_fn(),后者运行会话调用而不调用任何钩子。这看起来是你训练你的模型进行n迭代,然后你运行你的测试集,重新初始化你的迭代器,回到训练你的模型,等等。当然,你必须设置你的变量来重用=自动再利用这样做的时候。代码中的方法如下所示:
部分函数只在mon中使用的步骤_fn上执行currying(函数编程中的经典函数)_sess.run_步骤\fn(). 上面的代码还没有经过测试,在开始测试之前,您可能需要重新初始化train_it,但希望现在可以清楚地知道如何在同一次运行中同时运行训练集和验证集。如果你想在同一个图中同时绘制训练曲线和测试曲线,这还可以与tensorboard的custom_scalar tool一起使用。在
最后,这是这个功能的最好的实现,我个人希望tensorflow将来能使这个功能的实现更容易,因为它非常乏味,而且可能没有那么高效。我知道有一些工具,比如Estimator可以运行train_and_evaluate函数,但是由于这重建了每个列车和交叉验证运行之间的关系图,它非常适合如果只在一台计算机上运行,则效率很高。我在某个地方读到Keras+tf有这个功能,但是由于我不使用Keras+tf,这不是一个选项。不管怎样,我希望这能帮助其他人在同样的事情上挣扎!在
相关问题 更多 >
编程相关推荐