【问题标题】:Google Colab runs out of RAM(12GB) when trying to tf.image.resize dataset尝试 tf.image.resize 数据集时,Google Colab 内存不足(12GB)
【发布时间】:2021-04-26 21:08:17
【问题描述】:
new_img = []
images = list(df['pixels'])
  
 
for image in images:
  image = image.split()
  new_img.append(image)

new_img = np.array(new_img)
new_img = new_img.astype('float32')/255
new_img = new_img.reshape(df.shape[0], 48, 48, 1)
new_img = tf.image.resize(new_img(297,297))

在上面的代码(最后一行)中,我试图调整整个数据集(35000 个元素)的大小。 但是 Google Colab 会耗尽所有 RAM。 请问有没有其他方法可以解决这个问题?

提前谢谢你。

【问题讨论】:

  • 最后一行应该做什么?你为什么打电话给new_img
  • @NicolasGervais 我已经编辑了代码。数据集包括图像。我已经对它们进行了处理,以便将它们包含在模型中进行训练。在最后一步中,我想将所有图像的大小从 48,48 调整为 297,297。但是它用完了内存,因为有很多图像(大约 35000 个)当我调整 1 个图像的大小时,代码是正确的。但是对于整个数据集,计算能力不够,ram用完了

标签: python numpy tensorflow google-colaboratory


【解决方案1】:

尝试使用tf.data.Dataset 反复执行此操作。图片只会在遍历数据集时调整大小,一次一批。所以它不会在内存中创建新的数据集。

new_img = np.array(new_img)

ds = tf.data.Dataset.from_tensor_slices(new_img).\
    map(lambda x: tf.resize(x/255, (297, 297)))

print(next(iter(ds)))

【讨论】:

    【解决方案2】:

    请问有没有其他方法可以解决这个问题?

    使用更少的内存。我并不是想听起来居高临下,但问题是你使用了太多的 RAM,除了少用它之外别无他法。每次在 Python 中为变量赋值时,它都必须专用内存来存储该值。如果您在不释放内存的情况下连续执行此操作,则会遇到此问题。

    关于您应该如何处理这个特定问题,请考虑您需要将哪些数据加载到内存中以使您的代码工作,并避免加载不需要的数据。例如,看起来您有一个 DataFrame df,您在其中存储原始数据,一个列表 images,您在其中存储该数据的子集,还有一个列表 new_img,您存储处理后的数据的位置。您实际上是在一遍又一遍地复制这些数据而没有释放任何数据。相反,您应该避免复制数据(例如,您不需要将 DataFrame 数据复制到 images 列表中;只需在 DataFrame 中直接对其进行迭代)并释放您不再使用的数据(例如,如果创建new_img 列表后,您不需要DataFrame 中预处理的pixels 数据,然后使用del 语句删除DataFrame/Series。

    您还可以完全避免对这些数据进行预处理(即根据需要对其进行处理),或者分批处理,或者缩小数据以使用更少的内存等。有很多方法可以避免这些问题。

    【讨论】:

      猜你喜欢
      • 2021-09-21
      • 1970-01-01
      • 2020-09-02
      • 2020-03-31
      • 2019-09-27
      • 1970-01-01
      • 2020-03-21
      • 2020-05-04
      • 2019-03-11
      相关资源
      最近更新 更多