代码之家  ›  专栏  ›  技术社区  ›  Ha Bom

如何计算培训所需的RAM内存?

  •  0
  • Ha Bom  · 技术社区  · 7 年前

    如何计算培训Keras模型所需的RAM内存?我想计算这个,因为在训练模型时有时会遇到超过系统内存的错误。这是我的模型,例如:

    Layer (type)                 Output Shape              Param #
    =================================================================
    conv2d_1 (Conv2D)            (None, 30, 30, 32)        320
    _________________________________________________________________
    conv2d_2 (Conv2D)            (None, 28, 28, 32)        9248
    _________________________________________________________________
    max_pooling2d_1 (MaxPooling2 (None, 14, 14, 32)        0
    _________________________________________________________________
    dropout_1 (Dropout)          (None, 14, 14, 32)        0
    _________________________________________________________________
    conv2d_3 (Conv2D)            (None, 12, 12, 64)        18496
    _________________________________________________________________
    conv2d_4 (Conv2D)            (None, 10, 10, 64)        36928
    _________________________________________________________________
    max_pooling2d_2 (MaxPooling2 (None, 5, 5, 64)          0
    _________________________________________________________________
    dropout_2 (Dropout)          (None, 5, 5, 64)          0
    _________________________________________________________________
    flatten_1 (Flatten)          (None, 1600)              0
    _________________________________________________________________
    dense_1 (Dense)              (None, 128)               204928
    _________________________________________________________________
    dropout_3 (Dropout)          (None, 128)               0
    _________________________________________________________________
    dense_2 (Dense)              (None, 10)                1290
    =================================================================
    Total params: 271,210
    Trainable params: 271,210
    Non-trainable params: 0
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Chudbrochil    7 年前

    假设每个参数都是32位数据类型(单精度浮点,4字节)。您的内存使用量应该在:(个参数)*4b左右。

    在这种情况下:271210*4b=1084840b=~1Mb

    然而,有一个重要的考虑要记住。这假设批处理大小为1,即一次加载一个输入。如果您使用的是微型批处理(典型的批处理大小为32或64),那么必须将该内存计算乘以批处理的大小。如果您正在使用 批量梯度下降 然后,您可以在每个批上使用整个数据集。在这种情况下,您的内存需求可能是巨大的。

    这项分析的灵感来自: https://datascience.stackexchange.com/questions/17286/cnn-memory-consumption

    推荐文章