gpt4 book ai didi

python - 卷积神经网络内存使用情况

转载 作者:行者123 更新时间:2023-11-30 09:28:34 25 4
gpt4 key购买 nike

我正在实现一个 CNN。假设有 1000000 个训练样本,其中一层的尺寸为 20x30x30。

现在假设我必须计算这些示例的训练准确性。然后,在前向传播中,我需要为该层存储 1000000x20x30x30 = 180 亿个值,这占用了太多内存。另一方面,如果我分别对每个训练样本进行前向传播,则会花费太长时间。

我只是想知道如何解决这个问题?

非常感谢您所做的一切!

最佳答案

您在这里遇到的问题通常是通过批处理解决的(如评论中所述)。
您无需遍历所有训练示例,只需对数据点的子集进行采样,然后在仅查看这几个示例后更新权重。
与普通的“梯度下降”(GD) 相比,其名称为“随机梯度下降”(SGD)。随机性来自于使用随机子样本(通常是 2 的某个幂,即 4、8、16、32,...)。现在,我们不再进行简单的迭代,而是区分纪元(遍历所有训练数据)和简单迭代(仅使用 batch_size 元素)

这也回答了您在评论中提出的部分问题(“为什么一次提供更多图像更有效?”):由于您在每个批处理后更新权重(因此必须通过网络计算反向传播),因此到达下一个前向传递将需要更长的时间。

一般来说,SGD 也是首选以获得更好的收敛性。在实践中,采取许多较小的步骤可能会比采取一个大的步骤产生更好的结果。如需更多引用,请参阅 this great lecture 中的最后几张幻灯片。 .

既然你担心它需要很长时间:具有适当批量大小的 SGD(我个人甚至不会超过每批 2^10 个样本;一些论文已经“设定了大约 128 个样本的标准”)可以得到你很快就能得到好的结果/收敛。为了可能更快的收敛,您牺牲了单次迭代的速度。

关于python - 卷积神经网络内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51712732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com