我最近在考虑 (a) 训练 CNN 和 (b) 使用 CNN 进行推理的内存成本。请注意,我不是在谈论存储(这只是参数的数量)。
给定的 CNN(例如 VGG-16 D)需要多少内存
- (a) 培训(与 ADAM)
- (b) 对单个图像的推断?
我的想法
基本上,我想确保我没有忘记这个问题。如果您有其他资料可以解释这种想法,请与我分享。
(a) 培训
对于使用 ADAM 进行训练,我现在假设我的 Mini-batch 大小为 和 是 CNN 的参数个数。那么单次训练过程的内存占用量(训练时我在任何时候需要的最大内存量)是:
- :将权重和权重更新保存在内存中
- 所有生成的特征图的大小(前向传递)
- :每个权重的梯度(反向传播)
- : 每个权重的学习率 (ADAM)
(b) 推论
在推理中,不需要存储层的特征图 如果图层的特征图 已经计算好了。所以推理时的内存占用是:
- : 该模型
- 两个最昂贵的连续层(已经计算的一个,计算的净一个)