我希望复制此paper中的一些行为“不会降低学习率,增加批量大小”,我想知道是否有一种简单的方法来增加批量大小GCMLE实验。我有一个自定义估算器,我试图想出任何方法来调整实验中的批量大小。我意识到我可以使用一个批量大小运行一定数量的纪元,然后加载这个保存的图表并启动后续实验,但我想知道是否还有其他选项可以在同一个实验中更新批量大小? / p>
答案 0 :(得分:2)
设置图表以支持可变批量大小非常简单,只需使用第一维形状的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)。其余的图表设置无需更改即可使用。
答案 1 :(得分:0)
一种方法是将constructor中的delay_workers_by_global_step=True
设置为Experiment
。
这可行的原因是因为有效批量大小为batch_size
* num_workers
。因此,如果您延迟其他工人的工作,您的批量将逐渐增加。
当然,在早期阶段,您的吞吐量会相应降低。
如果您想直接控制batch_size,则必须在自己的代码中有效地复制learn_runner.run
的行为。这不会太糟糕,除了在experiment.py
内心深处,它启动了一个无法禁用AFAICT的服务器。