我在具有 3 GB 内存的 NVIDIA GPU 上使用 TensorFlow 1.9。我的 minibatch 的大小是 100 MB。因此,我有可能同时在我的 GPU 上安装多个小批量。所以我的问题是这是否可能以及它是否是标准做法。
例如,当我训练我的 TensorFlow 模型时,我在每个 epoch 上运行这样的事情:
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
Run Code Online (Sandbox Code Playgroud)
这将迭代我的小批量并为每个小批量执行一次权重更新。但规模image_data和label_data只有100 MB,所以多数GPU的不被使用。
一种选择是增加 minibatch 大小,使 minibatch 更接近 3 GB GPU 容量。但是,我想保持相同的小 minibatch 大小以帮助优化。
因此,另一种选择可能是通过 GPU 并行发送多个小批量,并为每个小批量执行一次权重更新。能够并行发送小批量将显着减少训练时间。
这是可能的并推荐吗?
Mini Batch 方法的目标是在处理每个批次后更新网络的权重,并在下一个 mini-batch 中使用更新后的权重。如果你做一些聪明的技巧并批处理几个小批量,他们将有效地使用相同的旧权重。
我能看到的唯一潜在好处是,如果模型在更大的小批量下工作得更好,例如big_batches * more_epochs比mini_batches * less_epochs. 我不记得 Mini Batch Gradient Descent 背后的理论,但我记得有一个原因,你应该在每次迭代中使用 minibatches 而不是整个训练集。另一方面,hyperparameter无论如何都必须调整小批量大小,因此可能值得稍微调整一下。
| 归档时间: |
|
| 查看次数: |
876 次 |
| 最近记录: |