首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用TensorFlow并行训练多个小批量的图形处理器

使用TensorFlow并行训练多个小批量的图形处理器
EN

Stack Overflow用户
提问于 2018-08-06 20:57:05
回答 2查看 922关注 0票数 4

我使用的是NVIDIA GPU上的TensorFlow 1.9,内存为3 GB。我的小批量的大小是100MB。因此,我可能会同时在我的GPU上安装多个迷你批次。所以我的问题是,这是否可能,这是否是标准做法。

例如,当我训练我的TensorFlow模型时,我在每个时期运行类似这样的东西:

代码语言:javascript
复制
loss_sum = 0
for batch_num in range(num_batches):
    batch_inputs = get_batch_inputs()
    batch_labels = get_batch_labels()
    batch_loss, _ = sess.run([loss_op, train_op], feed_dict={inputs: batch_inputs, labels: batch_labels})
    loss_sum += batch_loss
loss = batch_loss / num_batches

这将迭代我的小批处理,并对每个小批处理执行一次权重更新。但是image_datalabel_data的大小只有100MB,所以大部分的GPU都没有被使用。

一种选择是只增加小批量大小,以便小批量更接近3 GB GPU容量。但是,我希望保持相同的小批量大小,以帮助优化。

因此,另一种选择可能是通过GPU并行发送多个小批量,并对每个小批量执行一次权重更新。能够并行发送小批量将显著减少训练时间。

这是可能的和推荐的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-06 22:16:59

Mini Batch方法的目标是在处理完每个批次后更新网络的权重,并在下一个小批次中使用更新后的权重。如果你做一些聪明的技巧,批处理几个小批次,他们将有效地使用相同的旧权重。

我能看到的唯一潜在好处是,如果模型与更大的小批量一起工作得更好,例如big_batches * more_epochsmini_batches * less_epochs更好。我不记得小批量梯度下降背后的理论,但我记得你应该在每次迭代中使用小批量而不是整个训练集的原因。另一方面,最小批处理大小是一个无论如何都必须调优的hyperparameter,因此可能值得稍微修改一下。

票数 5
EN

Stack Overflow用户

发布于 2018-08-07 07:18:50

我想我可能会指出,就模型的泛化而言,随意设置批处理大小(当您有大量内存时)有时是不好的。

参考资料:

Train longer, generalize better

On Large-Batch Training for Deep Learning

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51708210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档