我正在使用带有 Tensorflow 后端的 Keras 在 GPU 上训练图像分类模型。我在某处读到训练使用大约两倍(前向和后向道具)验证的 GPU 内存,因此训练批量大小应该是验证批量大小的一半。
但是,在许多博客和教程中,我看到人们使用相同的批量进行训练和验证。
由于向前和向后传递,训练使用两倍的 GPU 内存是真的,还是这是错误的?
我正在使用带有 Tensorflow 后端的 Keras 在 GPU 上训练图像分类模型。我在某处读到训练使用大约两倍(前向和后向道具)验证的 GPU 内存,因此训练批量大小应该是验证批量大小的一半。
但是,在许多博客和教程中,我看到人们使用相同的批量进行训练和验证。
由于向前和向后传递,训练使用两倍的 GPU 内存是真的,还是这是错误的?
旁白:Tensorflow-GPU 目前在设计上占据了 100% 的 GPU 内存——因此这可能会稍微改变挑战。
要添加到@hssay on point answer - 使用图像,查看整个管道会很有帮助。优化输入管道,那么您将使用更少的内存。可能想从这里开始:TensorFlow
测试,测试测试。您可能会发现,较小的图像文件(较小的分辨率、颜色等)并不会真正改变您的结果。在某些情况下,结果甚至可能会变得更好(过度训练/训练不足的平衡)。
[这确实应该是评论,但我的代表不会在这里转移:(]
另外:Keras/Tensorflow 的术语在谈论验证集时(可能)有点不标准。在传统的 ML 术语中,验证集用于查找超参数,而测试集用于量化所选模型的准确性。所以在下面的解释中,我假设你在谈论训练和测试集。
网络的每个参数(权重)都会影响结果,从而影响成本函数。要调整权重,您需要成本函数对权重的导数。所以在训练期间,你必须同时存储梯度值和权重。在推理阶段,您只需要权重。这就是内存差异的来源。