Keras 使用过多内存

圣甲虫

我有一个 keras(带有 tensorflow 后端)模型,其定义如下:

INPUT_SHAPE = [4740, 3540, 1]

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
                 activation='relu',
                 input_shape=INPUT_SHAPE))
model.add(Conv2D(2, (4, 4), strides=(1, 1), activation='relu'))
model.add(MaxPooling2D(pool_size=(4, 4)))
model.add(Conv2D(4, (4, 4), strides=(1, 1), activation='relu'))
model.add(MaxPooling2D(pool_size=(4, 4)))
model.add(Conv2D(8, (4, 4), strides=(1, 1), activation='relu'))
model.add(MaxPooling2D(pool_size=(4, 4)))
model.add(Conv2D(16, (4, 4), strides=(1, 1), activation='relu'))
model.add(MaxPooling2D(pool_size=(4, 4)))
model.add(Conv2D(32, (4, 4), strides=(1, 1), activation='relu'))
model.add(MaxPooling2D(pool_size=(4, 4)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))

model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.Adadelta(),
              metrics=['accuracy'])

该模型只有 37,506 个可训练参数。然而,如果批量大小大于 1,它会以某种方式耗尽 K80 在 model.fit() 上的 12GB vram 资源。为什么这个模型需要这么多内存?以及如何正确计算内存需求?如何确定 Keras 模型所需的内存中的函数批处理中每 1 个元素给我 2.15 GB。所以至少我应该能够制作一批 5。

编辑:model.summary()

Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (None, 4738, 3538, 32)    320       
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 4735, 3535, 2)     1026      
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 1183, 883, 2)      0         
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 1180, 880, 4)      132       
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 295, 220, 4)       0         
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 292, 217, 8)       520       
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 73, 54, 8)         0         
_________________________________________________________________
conv2d_5 (Conv2D)            (None, 70, 51, 16)        2064      
_________________________________________________________________
max_pooling2d_4 (MaxPooling2 (None, 17, 12, 16)        0         
_________________________________________________________________
conv2d_6 (Conv2D)            (None, 14, 9, 32)         8224      
_________________________________________________________________
max_pooling2d_5 (MaxPooling2 (None, 3, 2, 32)          0         
_________________________________________________________________
dropout_1 (Dropout)          (None, 3, 2, 32)          0         
_________________________________________________________________
flatten_1 (Flatten)          (None, 192)               0         
_________________________________________________________________
dense_1 (Dense)              (None, 128)               24704     
_________________________________________________________________
dropout_2 (Dropout)          (None, 128)               0         
_________________________________________________________________
dense_2 (Dense)              (None, 4)                 516       
=================================================================
Total params: 37,506
Trainable params: 37,506
Non-trainable params: 0
_________________________________________________________________
阿列克谢·乌姆诺夫

第一层的输出形状为 B*4738*3538*32(B 是批量大小),大约需要 1GB * B 内存。梯度和其他激活也可能会占用一些内存。也许增加第一层的步幅会有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android约束布局使用过多的内存(RAM)(内存泄漏)

来自分类Dev

Android约束布局使用过多的内存(RAM)(内存泄漏)

来自分类Dev

Python使用简单的脚本占用过多内存

来自分类Dev

如何确定导致Visual Studio使用过多内存的原因?

来自分类Dev

重新分配时堆内存使用过多

来自分类Dev

在程序使用过多内存之前将其停止

来自分类Dev

如何确定导致Visual Studio使用过多内存的原因?

来自分类Dev

使用过多内存的进化工厂

来自分类Dev

projectRaster占用过多内存

来自分类Dev

gvfsd占用过多内存

来自分类Dev

'mov'的内存引用过多

来自分类Dev

Firefox占用过多内存

来自分类Dev

占用过多内存的对象的Python列表

来自分类Dev

WPF ListboxItems占用过多内存

来自分类Dev

Python / lxml占用过多内存

来自分类Dev

ASM:`mov' 的内存引用过多

来自分类Dev

在循环中使用反射类时,PHP占用过多内存的解决方法

来自分类Dev

为什么带有200.000条记录的SELECT表使用过多的内存(+ 2GB)?

来自分类Dev

FFmpeg重复拆分,选择和覆盖时使用过多的内存

来自分类Dev

Odata Web API中的应用程序池的内存使用过多

来自分类Dev

vba excel宏使用过多的内存(似乎是select.insert的原因)

来自分类Dev

如何在不使用过多内存的情况下链接许多C ++目标文件?

来自分类Dev

在循环中使用反射类时,PHP占用过多内存的解决方法

来自分类Dev

加载背景图片时,Android仍然使用过多的内存

来自分类Dev

从Windows 8.1转移到Windows 10后,Dwm.exe使用过多的内存

来自分类Dev

从 Postgres 数据库获取数据时内存使用过多

来自分类Dev

Selenium 循环脚本使用过多内存,最终导致 Chrome 崩溃

来自分类Dev

使用 keras 序列的 Keras DataGenerator

来自分类Dev

优化查询-过度加载会占用过多内存

Related 相关文章

  1. 1

    Android约束布局使用过多的内存(RAM)(内存泄漏)

  2. 2

    Android约束布局使用过多的内存(RAM)(内存泄漏)

  3. 3

    Python使用简单的脚本占用过多内存

  4. 4

    如何确定导致Visual Studio使用过多内存的原因?

  5. 5

    重新分配时堆内存使用过多

  6. 6

    在程序使用过多内存之前将其停止

  7. 7

    如何确定导致Visual Studio使用过多内存的原因?

  8. 8

    使用过多内存的进化工厂

  9. 9

    projectRaster占用过多内存

  10. 10

    gvfsd占用过多内存

  11. 11

    'mov'的内存引用过多

  12. 12

    Firefox占用过多内存

  13. 13

    占用过多内存的对象的Python列表

  14. 14

    WPF ListboxItems占用过多内存

  15. 15

    Python / lxml占用过多内存

  16. 16

    ASM:`mov' 的内存引用过多

  17. 17

    在循环中使用反射类时,PHP占用过多内存的解决方法

  18. 18

    为什么带有200.000条记录的SELECT表使用过多的内存(+ 2GB)?

  19. 19

    FFmpeg重复拆分,选择和覆盖时使用过多的内存

  20. 20

    Odata Web API中的应用程序池的内存使用过多

  21. 21

    vba excel宏使用过多的内存(似乎是select.insert的原因)

  22. 22

    如何在不使用过多内存的情况下链接许多C ++目标文件?

  23. 23

    在循环中使用反射类时,PHP占用过多内存的解决方法

  24. 24

    加载背景图片时,Android仍然使用过多的内存

  25. 25

    从Windows 8.1转移到Windows 10后,Dwm.exe使用过多的内存

  26. 26

    从 Postgres 数据库获取数据时内存使用过多

  27. 27

    Selenium 循环脚本使用过多内存,最终导致 Chrome 崩溃

  28. 28

    使用 keras 序列的 Keras DataGenerator

  29. 29

    优化查询-过度加载会占用过多内存

热门标签

归档