我正在具有3 GB内存的NVIDIA GPU上使用TensorFlow 1.9。我的迷你批次的大小为100 MB。因此,我可以同时在我的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
的大小仅为100 MB,因此大部分GPU未被使用。
一种选择是仅增加小批量的大小,以便小批量更接近3 GB的GPU容量。但是,我希望保持相同的小批量生产尺寸,以帮助优化。
因此,另一个选择可能是通过GPU并行发送多个小批处理,并为每个小批处理执行一次权重更新。能够并行发送迷你批处理将大大减少培训时间。
有可能吗?
答案 0 :(得分:2)
“迷你批处理”方法的目标是在处理完每个批处理后更新网络的权重,并在下一个迷你批处理中使用更新后的权重。如果您做一些巧妙的技巧并分批处理多个迷你批次,它们将有效地使用相同的旧砝码。
我唯一看到的潜在好处是,该模型在较大的迷你批次上是否可以更好地工作,例如big_batches * more_epochs
比mini_batches * less_epochs
好。我不记得“小批量梯度下降”背后的理论,但我记得有一个原因,您应该使用小批量而不是每次迭代使用整个训练集。另一方面,最小批量大小是hyperparameter
,无论如何都必须对其进行调整,因此可能值得对其进行调整。
答案 1 :(得分:0)