【问题标题】:TensorFlow Increase Batch Size mid experimentTensorFlow 增加 Batch Size 中期实验
【发布时间】:2017-11-04 20:54:18
【问题描述】:

我希望复制paper“不要降低学习率,增加批量大小”中的一些行为,我想知道是否有一种简单的方法可以在 GCMLE 实验中增加批量大小.我有一个自定义估计器,我正在尝试考虑任何方法来调整实验中的批量大小。我意识到我可以在一定数量的时期内使用一个批量大小运行,然后加载这个保存的图表并开始后续实验,但我想知道在同一个实验中是否还有其他选项可以更新批量大小?

【问题讨论】:

    标签: tensorflow google-cloud-ml


    【解决方案1】:

    设置图表以支持可变批量大小非常简单,只需使用第一维形状的None。看看这篇文章:

    Build a graph that works with variable batch size using Tensorflow

    然后,您可以在每个 sess.run(train_op, feed_dict=[X:data, Y:labels]) 喂入任意大小的批次,其中 X 的第一个维度,即您的批次,是可变长度的。

    它几乎就像你所期望的那样工作。

    具有可变批量大小的示例图结构:

    X = tf.placeholder("float", [None, num_input])
    Y = tf.placeholder("float", [None, num_classes])
    

    通常,您的张量中允许有 1 个未知维度。 Tensorflow 将根据您在运行时传递的实际数据推断该维度。

    在此示例中,在您的第一次迭代中,您的数据形状可能是 [10, 784](每批 10 个),而在以后的迭代中,您的形状可能会变成 [50, 784](每批 50 个)。您的图表设置的其余部分无需更改即可工作。

    【讨论】:

    • 谢谢!如果我使用的是 sess.run,那么如何做到这一点绝对是有意义的——但是,我正在使用 learn_runner.run() 并使用自定义估计器运行 tensorflow 实验,如下例所示:github.com/GoogleCloudPlatform/cloudml-samples/tree/master/…。该图已经设置为支持可变批量大小,但我在实验开始时传递了一个批量大小(可以是任何东西)。所以,我正在苦苦挣扎的是,我无法找到任何方法来调整实验批次大小,如您所描述的那样在 X 次或 Y 次迭代之后
    • 您可以一个接一个地拥有两个(或多个)learn_runner.run 语句。权重将保留在内存中,您可以增加批量大小参数。
    • @UtkarshSinha learn_runner.run 在提供的端口上启动一个新进程,因此调用它两次将失败并显示“端口已在使用”
    【解决方案2】:

    一种方法是将constructor 中的delay_workers_by_global_step=True 设置为Experiment

    之所以有效,是因为有效批量大小为batch_size * num_workers。所以如果你延迟其他worker的启动,你的batch size会逐渐增加。

    当然,您的吞吐量在早期阶段会相应降低。

    如果你想直接控制batch_size,你必须在你自己的代码中有效地复制learn_runner.run的行为。这不会太糟糕,除了在experiment.py 的深处,它启动了一个无法禁用 AFAICT 的服务器。

    【讨论】:

    • 有趣的方法!在 BASIC_GPU 运行的默认设置下,num_workers 等于多少?文档说默认值为 False 并且似乎延迟将基于时间而不是步骤?那么当 delay_workers_by_global_step 设置为 True 时,num_workers 多久会增加一次?我试图了解批次大小会超过这些步骤。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    相关资源
    最近更新 更多