【问题标题】:Memory Issues Using Keras Convolutional Network使用 Keras 卷积网络的内存问题
【发布时间】:2017-06-15 14:18:26
【问题描述】:

我对使用大数据的 ML 非常陌生,之前我曾使用 Keras 通用卷积示例进行狗/猫分类,但是在对我的一组图像应用类似方法时,我遇到了内存问题。

我的数据集包含尺寸为 10048 x1687 像素的超长图像。为了避免内存问题,我使用 1 的批量大小,一次将一张图像输入模型。

该模型有两个卷积层,每个卷积层后面都有最大池化,它们一起使展平层在全连接层之前大约有 290,000 个输入。

但是,在运行后,内存使用量立即达到极限 (8Gb)。

所以我的问题如下:

1) 在 Python 中本地处理如此规模的计算的最佳方法是什么(不使用云)?我需要使用其他 python 库吗?

【问题讨论】:

  • 如果您使用 TensorFlow 作为后端,您将能够在多个 GPU 上拆分网络。

标签: python memory computer-vision keras convolution


【解决方案1】:

查看yield 在 python 中的作用以及生成器的概念。您不需要在开始时加载所有数据。您应该使您的batch_size 足够小,以免出现内存错误。 您的生成器可能如下所示:

def generator(fileobj, labels, memory_one_pic=1024, batch_size): 
  start = 0
  end = start + batch_size
  while True:
     X_batch = fileobj.read(memory_one_pic*batch_size)
     y_batch = labels[start:end]
     start += batch_size
     end += batch_size
     if not X_batch:
        break
     if start >= amount_of_datasets:
       start = 0
       end = batch_size
     yield (X_batch, y_batch)

...稍后当您已经准备好架构时...

train_generator = generator(open('traindata.csv','rb'), labels, batch_size)
train_steps = amount_of_datasets//batch_size + 1

model.fit_generator(generator=train_generator,
                     steps_per_epoch=train_steps,
                     epochs=epochs)

您还应该阅读有关 batch_normalization 的信息,它基本上有助于更快地学习和提高准确性。

【讨论】:

    【解决方案2】:

    在使用train_generator() 时,您还应该设置max_q_size 参数。默认设置为 10,这意味着您在仅使用 1 的情况下分 10 批加载(因为 train_generator() 旨在流式传输来自外部源的数据,这些数据可以像网络一样延迟,而不是为了节省内存)。我建议为您的目的设置max_q_size=1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-13
      • 1970-01-01
      • 2019-08-18
      • 2019-03-16
      • 2018-07-19
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多