我在深度学习及其框架方面相对较新。目前,我正在尝试使用Caffe框架,并试图微调Vgg16_places_365模型。
我使用的是Amazon EC2实例g2.8xlarge,配备4个GPU(每个GPU有4 GB的RAM)。然而,当我尝试使用单个GPU训练我的模型时,我遇到了以下错误:
检查失败:错误== cudaSuccess (2 vs. 0) 内存不足
经过一些研究后,我发现解决内存不足问题的一种方法是减少train.prototxt中的批量大小。
Caffe | 检查失败:错误== cudaSuccess (2 vs. 0) 内存不足。
最初,我将批量大小设置为50,并逐步将其减少到10(因为当batch_size = 10时它可以工作)。现在,模型正在训练中,我非常确定这将需要很长时间。然而,作为这个领域的新手,我对批量大小与学习率、步长以及我们在solver.prototxt中指定的最大迭代次数等其他参数之间的关系感到好奇。
批量大小对模型质量(如准确性)的影响有多大?如何利用其他参数来提高质量?除了减少批量大小或升级我的机器之外,还有没有其他方法来解决这个问题?
回答:
关于您第一个问题,关于批量大小、学习率和最大迭代次数等参数之间的关系,最好阅读一些数学背景知识。开始的一个好地方可能是这个stats.stackexchange上的问题:对于随机梯度下降,批量大小应该多大?。答案将简要讨论批量大小与学习率(从您的问题来看,我假设学习率=步长)之间的关系,并提供一些进一步阅读的参考文献。
关于您最后一个问题,考虑到您正在微调的数据集和模型(即VGG16)是固定的(即输入数据和模型大小固定),对于大的批量大小,您很难避免内存不足的问题。然而,如果您愿意减少输入大小或模型大小,您可能能够使用更大的批量大小。根据您具体的微调方式和内容,减少模型大小可能可以通过丢弃已学习的层或减少全连接层的数量/大小来实现。
剩下的问题,即批量大小对质量/准确性的影响有多大,以及其他参数如何影响质量/准确性,如果不知道您试图解决的具体问题,是很难回答的。例如,批量大小对所达到的准确性的影响可能取决于数据集中的噪声、数据集的维度、数据集的大小以及其他参数,如学习率(=步长)或动量参数。对于这类问题,我推荐Goodfellow等人的教科书,例如,第11章可能提供了一些关于选择这些超参数(即批量大小、学习率等)的通用指导原则。