Answers:
@ik_vision的答案描述了如何估计存储权重所需的存储空间,但是您还需要存储中间激活,尤其是对于使用3D数据的卷积网络,这是所需存储的主要部分。
要分析您的示例:
对于1个样本,总共需要1410个元素进行正向传递。除了输入之外,您还需要有关每个梯度的信息以进行反向传递,即多输入410,每个样本总共1820个元素。乘以批处理大小即可得到465920。
我说“元素”是因为每个元素所需的大小取决于所使用的数据类型。单精度float32
为4B,存储数据blob所需的总内存约为1.8MB。
我看到两个选择:
在这两种情况下,GPU的内存大小都需要乘以批处理大小,因为每个示例都将复制大部分网络。
从磁盘加载的经验法则:如果DNN在磁盘上占用X MB,则批处理大小为1的网络在GPU内存中将是2倍。
动态创建批次大小为1的网络:计算参数并乘以4字节(float32位):手动计算参数的数量:fc1:1000x100(权重)+ 100(偏差)fc2:100x100(权重)+ 100(偏差)fc3:100x100(权重)+ 100(偏差)fc4:100x100(权重)+ 100(偏差)输出:100x10(权重)+ 10(偏差)
使用Keras计算参数数量:model.count_params()