【发布时间】:2019-01-13 17:09:01
【问题描述】:
我正在实施一个 CNN。假设有 1000000 个训练示例,我的其中一个层的尺寸为 20x30x30。
现在假设我必须计算这些示例的训练准确度。然后,在前向传播中,我需要为该层存储 1000000x20x30x30 = 180 亿个值,这会占用太多内存。另一方面,如果我分别对每个训练示例进行前向传播,则会花费太长时间。
我只是想知道如何解决这个问题?
非常感谢您所做的一切!
【问题讨论】:
-
欢迎来到计算的核心困境:时间-内存权衡。在这种情况下,改善一个通常意味着牺牲另一个;改进它的最佳方法是找到一种完全独立的方法,该方法具有更好的平衡,或者提高其中一个组件的效率。不知道这里是否可能,不过,我只是想我会插话。
-
需要更多关于您的框架、代码、设置等的详细信息,但通常您应该将训练示例拆分为 batches - 您绝对不想初始化 1000000x20x30x30 张量在您使用的任何框架中。更改批量大小通常会在时间和内存之间进行权衡 - 一次输入更多图像可以让您的神经网络框架进行更多不间断的计算,但代价是需要在内存中存储更多图像和中间层。
-
我尝试将训练示例分成多个批次,效果更好,感谢您的帮助!不过我想知道,为什么一次输入更多图像比在每个训练示例上运行前向传播效率要高得多?为什么不间断的计算会产生如此巨大的差异?因为最后,计算是一样的。再次感谢您!
标签: python machine-learning deep-learning computer-vision conv-neural-network