在不同的输入参数上多次运行Tensorflow图:哪种循环有效?

ann*_*wen 5 parallel-processing performance while-loop control-flow tensorflow

对于我的特殊问题,我需要多次重新运行曾经构造过的Tensorflow图,每次将变量重新初始化为新值。图的每次执行都独立于下一个执行。可以将其视为建立模型,然后对每个模拟进行30次独立随机初始化的训练。尽管可以通过将Session.run()语句放在for循环中来实现上述目的,但我认为这不能保证并行性。

所以问题是:运行多个独立Sims的最合适,与Tensorflow兼容的方式是什么?我应该在python while循环内执行session.run()还是应该使用Tensorflow while_loop结构?

Jos*_* R. 1

这是一个有趣的问题,我自己也在研究模型集合。

首先,循环训练模型是串行进行的;Python 既不会循环,也tf.while_loop不会为您提供跨实例的任何并行性。话虽这么说,(tf.while_loop与 结合使用tf.slice可能是处理小批量数据的一种非常有效的方法,尽管是串行的)。

一个起点是查看“分布式 TensorFlow”指南 ( https://www.tensorflow.org/deploy/distributed )。关于如何生成多个并发(异步)会话进行了广泛的讨论。您可以在同一设备上或通过网络创建会话。我认为这能够实现您想要的那种并行性(作者称之为“图复制”与“异步训练”之间)。

第二个想法是通过向所有张量添加额外的“实例”维度,将实例堆叠在单个模型中。您还必须类似地堆叠训练数据输入(通过 feed-dict、队列或数据集)。您需要特别注意不要跨各个实例(即新实例维度)交叉链接节点,但您可以通过计算共享成本函数并使用标准优化器来同时训练它们。优化后,实例维度中权重和值的每个组成部分将代表一个简单模型。您还可以使用一个选项来计算训练时监控的个人成本向量。这可能不会加快您的 CPU 速度(它可能需要实例数 * 单实例时间),但如果您有 GPU,它可能会在相似的周期数中为这些扩展矩阵运算提供大量额外的并行容量作为您的单一训练课程。

期待听到什么对您有用!

更新:

我对并行性的理解显然是错误的,在tf_while_loop. 来自(https://www.tensorflow.org/api_docs/python/tf/while_loop

while_loop 实现非严格语义,允许多个迭代并行运行。并行迭代的最大数量可以通过parallel_iterations 来控制,这使用户可以对内存消耗和执行顺序进行一些控制。对于正确的程序,while_loop 对于任何并行迭代 > 0 都应返回相同的结果。