我使用的是NVIDIA GPU上的TensorFlow 1.9,内存为3 GB。我的小批量的大小是100MB。因此,我可能会同时在我的GPU上安装多个迷你批次。所以我的问题是,这是否可能,这是否是标准做法。
例如,当我训练我的TensorFlow模型时,我在每个时期运行类似这样的东西:
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_data和label_data的大小只有100MB,所以大部分的GPU都没有被使用。
一种选择是只增加小批量大小,以便小批量更接近3 GB GPU容量。但是,我希望保持相同的小批量大小,以帮助优化。
因此,另一种选择可能是通过GPU并行发送多个小批量,并对每个小批量执行一次权重更新。能够并行发送小批量将显著减少训练时间。
这是可能的和推荐的吗?
发布于 2018-08-06 22:16:59
Mini Batch方法的目标是在处理完每个批次后更新网络的权重,并在下一个小批次中使用更新后的权重。如果你做一些聪明的技巧,批处理几个小批次,他们将有效地使用相同的旧权重。
我能看到的唯一潜在好处是,如果模型与更大的小批量一起工作得更好,例如big_batches * more_epochs比mini_batches * less_epochs更好。我不记得小批量梯度下降背后的理论,但我记得你应该在每次迭代中使用小批量而不是整个训练集的原因。另一方面,最小批处理大小是一个无论如何都必须调优的hyperparameter,因此可能值得稍微修改一下。
发布于 2018-08-07 07:18:50
https://stackoverflow.com/questions/51708210
复制相似问题