El *_*one 6 gpu mnist tensorflow batchsize
我正在 MNIST 上训练自动编码器,并注意到在 128 之后增加批量大小,开始在固定数据集大小上花费更多的计算时间。
我正在使用tensorflow-gpu并拥有GeForce GTX 1070。
我尝试在 5000 个样本(784 个暗淡)的固定训练集上运行一些测试,并运行 10 个 epoch。批次是batch-size来自 5000 个训练样本的连续块,因此迭代次数实际上取决于批次大小。
我跟踪了该数据的性能(丢失)、执行时间和 python 进程的 GPU 内存使用情况(来自 nvidia-smi 输出):
5000 datapoints 10 epochs
batch size
512: loss: 53.7472; execution took 00:00:13,787; 4281MiB
256: loss: 48.1941; execution took 00:00:04,973; 695MiB
128: loss: 42.7486; execution took 00:00:03,350; 439MiB
64: loss: 40.0781; execution took 00:00:04,191; 439MiB
32: loss: 37.7348; execution took 00:00:06,487; 441MiB
16: loss: 36.6291; execution took 00:00:12,102; 441MiB
8: loss: nan; execution took 00:00:23,115; 441MiB
Run Code Online (Sandbox Code Playgroud)
当我尝试大于 512 的小批量大小时,出现内存不足错误。
我认为较小的批次需要更长的时间来执行是有意义的,因为同一日期会有更多的更新按顺序进行。但是,我不确定为什么当小批量大于 128 个样本时计算时间会增加,而不是进一步减少。
一种假设是,这与 GPU 已满且无法正确并行有关,但我在网上找不到任何此类评论。
当您使用较小的批量大小训练模型时,您的模型会更新得更频繁,但更随机。这有助于在每个时期更快地收敛。例如,如果您训练batch_size500 次,您将在 1 epoch 内更新模型参数 100 次,但如果您训练batch_size50 次,则 1 epoch 中的更新次数为 1000 次。
当您使用较大的批量大小训练模型时,每次更新都会更加稳定且随机性更少。
当您使用较大的批量大小训练模型时,它会利用 CPU 或 GPU 上的矢量化计算,例如batch_size = 1我们可以获得更多更新,但没有矢量化的优势。但是,当您训练非常大的批量大小(高于内存容量)时,就会出现内存不足的情况。
通常,我们会平衡批量大小的数量和收敛速度。
| 归档时间: |
|
| 查看次数: |
2807 次 |
| 最近记录: |