【问题标题】:OOM when allocating tensor with shape[3075200,512] and type float on : why?使用 shape[3075200,512] 分配张量并输入 float on 时出现 OOM:为什么?
【发布时间】:2020-10-04 04:42:29
【问题描述】:

我正在尝试通过创建灰度图像来使用 CNN 模型(使用 keras)。 我必须尝试使用​​ 512*512 的图像大小,但出现内存溢出错误。 不能再缩小图片大小了,再看gpustat,是32GB,但是不知道为什么会弹出内存错误。我不确定在哪里以及如何找到和增加可分配的 gpu 内存。

这是我迄今为止所做的尝试。

1.减少一层神经元的数量 2.使用更小的batch size(当前batch size 5) 3. 增加 Maxpooling 大小以使用 4.增加步幅 5.辍学 6. 配置 = tf.ConfigProto() config.gpu_options.allow_growth = True 7. 配置 = tf.ConfigProto() config.gpu_options.per_process_gpu_memory_fraction 8. 策略 = tf.distribute.MirroredStrategy() 9. mirrored_strategy = tf.distribute.MirroredStrategy(devices=["/GPU:0", "/XLA_GPU:1"])

以上方法我都试过了,还是不行。如果您知道如何解决,请回答。 您无法缩小图像尺寸。 (这是我实验的目的) 它说GPU内存是32GB,但如果你让我知道为什么它不是32GB时会出现错误,我真的很感激。

【问题讨论】:

  • 标题是错字吗? 3075200从何而来?
  • @FrankYellin 这只是输入错误消息。 3075200是我的模型:) 因为它是在单独的服务器上运行的,所以我不能复制和粘贴它,所以我将它作为图片上传。

标签: python tensorflow gpu


【解决方案1】:

简短的回答。停止使用Flatten 并将其更改为GlobalAveragePooling2DGlobalMaxPooling2D

长答案。您正在尝试使用64*64*800 作为完全连接层的输入大小,它太大了。现代 CNN 模型都不再使用Flatten 而是用GlobalAveragePooling2D 代替它,因为它还保留了 CNN 的可变大小能力。

【讨论】:

  • 我通常使用标准尺寸,比如 ResNet 使用 224*224 或 inception 使用 299*299
  • 如果您的数据是普通图像并且您只是想对其进行分类,那么我建议使用像 ResNet 这样的预制模型
  • 800*800 没有输入大小那么大,通常我在目标检测任务中使用大于输入大小。您的架构需要改变
  • 另外batch size,如果你输入 1-2 个图像,800*800 并不大,但 GPU 在训练中可以容纳的最大可能是 4 个
  • 第一层的512内核也太多了。通常在那个阶段它会是 64 或 32。并且在每次下采样后变得更宽(更多内核)。
猜你喜欢
  • 1970-01-01
  • 2018-01-24
  • 2020-12-06
  • 2019-01-27
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
相关资源
最近更新 更多