【问题标题】:OOM with a "simple" ResNet50 using Tensorflow2.0 on an Nvidia RTX2080 Ti在 Nvidia RTX 2080 Ti 上使用 Tensorflow 2.0 的“简单”ResNet 50 的 OOM
【发布时间】:2019-07-23 12:37:11
【问题描述】:

在 Nvidia RTX2080Ti(11Gb 内存!)上使用 tf.keras.applications.ResNet50 实现时遇到内存不足错误,我感到很惊讶。

问题:

我使用的工作流程有问题吗?

注意事项:

  • 我正在使用tensorflow-gpu==2.0.0b1CUDA v10.1
  • 我从事分割任务,因此大output_shape
  • 我自己构建批次,因此使用train_on_batch()
  • 即使将 memory_growth 设置为 True,内存也会在几分之一秒内从 700Mb 填满到 10850Mb。

代码:

import tensorflow as tf
import tensorflow.keras as ke
import numpy as np

ke.backend.clear_session()

inputs = ke.layers.Input(shape=(512,1024,3), dtype="float32")
outputs = ke.applications.ResNet50(include_top=False, weights="imagenet")(inputs)
outputs = ke.layers.Lambda(lambda x: tf.compat.v1.image.resize_bilinear(x, size=(512,1024)))(outputs)
outputs = ke.layers.Conv2D(2, 1, activation="softmax")(outputs)
model = ke.Model(inputs=inputs, outputs=outputs)

model.compile(optimizer=ke.optimizers.RMSprop(lr=0.001), loss=ke.losses.CategoricalCrossentropy())

images = np.zeros((1,512,1024,3), dtype=np.float32)
targets = np.zeros((1,512,1024,2), dtype=np.float32)

model.train_on_batch(images, targets)

【问题讨论】:

  • 你的批量大小是多少?
  • 是1。(我是“channel_last”数据格式)
  • 这很有趣。您是否尝试过减小图像尺寸?让我们说 64*128 ?只是为了确定不是因为那个?
  • 是的,输入大小限制在 700x512 左右……
  • 很高兴尝试和总结

标签: python-3.x tensorflow tensorflow2.0 tf.keras


【解决方案1】:

Resn​​et 是复杂的复杂模型,输入的维度可能是 OOM 错误的原因。尝试减少尺寸和相应的批量大小(尽可能多的内存可以容纳)并尝试。

如 cmets 中所述,它适用于批量大小 1 和尺寸 700*512。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    • 2022-01-25
    • 2019-06-24
    • 2021-03-26
    • 2021-03-28
    • 2020-02-10
    • 1970-01-01
    相关资源
    最近更新 更多