Answers:
现在的问题是如何在没有降采样特权的情况下处理如此大的图像尺寸
我认为通过缩减采样,您的意思是缩小输入,然后再将其传递到CNN。卷积层允许通过选择较大的步幅来对网络内的图像进行下采样,这将节省下一层的资源。实际上,这就是必须要做的,否则您的模型将不适合GPU。
1)是否有任何技术可以处理要训练的大图像?
常见的研究是将图像缩放到合理的尺寸。但是,如果这不是您的选择,则需要限制CNN。除了在早期层中进行下采样之外,我还建议您摆脱FC层(通常使用大多数参数),转而使用卷积层。另外,您将不得不在每个时期流式传输数据,因为它不适合您的GPU。
请注意,这完全不能阻止早期层中的繁重计算负荷,这完全是因为输入量如此之大:卷积是一项昂贵的操作,并且第一层在每次前向和后向传递中都会执行很多操作。简而言之,培训会很慢。
2)合理使用多少批量?
这是另一个问题。单张图像2400x2400x3x4
大约需要70Mb(3通道,每个像素4字节),因此即使批量大小为10,也几乎买不起。更实际的是5。请注意,大部分内存将由CNN参数占用。我认为在这种情况下,可以使用16位值而不是32位来减小大小-这样一来,您就可以将批处理数量加倍。
3)是否可以采取任何预防措施或可以增加或减少硬件资源?
您的瓶颈是GPU内存。如果您负担得起另一个GPU,请购买它并在它们之间划分网络。与GPU内存相比,其他所有内容都微不足道。
通常对于图像,特征集是像素密度值,在这种情况下,它将导致很大的特征集。另外,也不建议对图像进行下采样,因为这样可能会丢失(实际上会)丢失重要数据。
[1]但是有一些技术可以帮助您减少特征集的大小,例如PCA(原理组件分析)之类的方法可以帮助您选择重要的特征子集。
有关详细信息,请参见链接http://spark.apache.org/docs/latest/ml-features.html#pca。
[2]除了减少训练神经网络时的计算费用外,您可以使用随机梯度下降法,而不是常规使用梯度下降法,这样可以减少每次迭代训练所需的数据集大小。因此,将在一次迭代中使用的数据集大小将减少,从而将减少训练网络所需的时间。
使用的确切批次大小取决于训练数据集和测试数据集的分布,更一般的用法是70-30。您还可以在上面使用上述随机方法来减少所需的时间。
随机梯度下降的详细信息http://scikit-learn.org/stable/modules/sgd.html
[3]硬件似乎很适合升级,但如果需要,仍然可以看一下像AWS这样的云解决方案,在该解决方案中,您可以获得免费帐户订阅,但使用率最高。
如此大的数据无法加载到您的内存中。让我们将您可以做什么分为两部分:
将所有图像重新缩放为较小的尺寸。您可以将它们重新缩放为112x112像素。在您的情况下,由于图像为正方形,因此无需裁剪。您仍然无法将所有这些图像都加载到RAM中。
最好的选择是使用生成器功能,该功能将分批提供数据。请参考Keras中使用的fit_generator。如果您的模型参数太大而无法放入GPU内存,请考虑使用批量归一化或使用残差模型来减少参数数量。