【发布时间】:2018-02-23 00:23:49
【问题描述】:
我将一些图像数据复制到 Google Cloud 上的一个实例(8 个 vCPU,64GB 内存,Tesla K80 GPU),在将原始数据转换为特征并更改输出的数据结构时遇到了内存问题。最终我想使用 Keras/Tensorflow 神经网络中的派生特征。
流程
将数据复制到存储桶后,我运行 build_features.py 函数将原始数据转换为神经网络的处理数据。在这个管道中,我首先获取每个原始图像并将其放入列表 x 中(其中存储派生特征)。
由于我正在处理大量图像(数以万计的图像类型为 float32,尺寸为 250x500x3),因此列表 x 变得非常大。 x 的每个元素都是 numpy 数组,以 250x500x3 的形状存储图像。
问题 1 - 随着列表 x 的增长而减少内存
我拍摄了 2 张屏幕截图,显示可用内存随着 x 的增长而减少(下图)。我最终能够完成这一步,但我只剩下几 GB 的内存,所以我肯定想解决这个问题(将来我想使用更大的数据集)。 如何在不受 x 大小限制的情况下构建功能?
问题 2 - 将 x 转换为 numpy 数组时出现内存错误
实例实际失败的步骤如下:
x = np.array(x)
失败信息是:
Traceback (most recent call last):
File "build_features.py", line 149, in <module>
build_features(pipeline='9_11_2017_fan_3_lights')
File "build_features.py", line 122, in build_features
x = np.array(x)
MemoryError
如何调整这一步以免内存不足?
【问题讨论】:
标签: python numpy machine-learning tensorflow feature-extraction