我把一些图像数据复制到Google云上的一个实例(8vcpu,64GB内存,teslak80gpu),在将原始数据转换为特性以及更改输出的数据结构时遇到内存问题。最后我想使用Keras/Tensorflow神经网络中的派生特性。在
流程
在将数据复制到存储桶之后,我运行一个构建_功能.py函数将原始数据转换为神经网络的已处理数据。在这个管道中,我首先获取每个原始图像并将其放入一个列表x(其中存储派生的特性)。在
因为有大量的图像(x500i)和大量的图像(x500i)被加工成大量的图像。x的每个元素都是一个numpy数组,它以250x500x3的形状存储图像。在
问题1-随着列表x的增长,内存减少
我拍了两张屏幕截图,显示可用内存随着x的增长而减少(见下图)。我最终能够完成这一步,但我只剩下几GB的内存,所以我肯定要解决这个问题(将来我想处理更大的数据集)。如何在不受x大小限制的情况下构建特性?
问题2-将x转换为numpy数组时出现内存错误
实例实际失败的步骤如下:
x = np.array(x)
失败消息是:
^{pr2}$如何调整此步骤以避免内存不足?
您的代码对每个映像都有两个副本—一个在列表中,一个在数组中:
只需将图像直接加载到数组中
^{pr2}$这意味着你一次只持有一个图像的副本。在
如果您事先不知道图像的大小或数据类型,或者不想硬编码,可以使用:
话虽如此,你现在的处境很棘手。如果您没有足够的空间在内存中存储两次数据集,那么您也没有足够的空间来计算
y = x + 1
。在您可能需要考虑使用
np.float16
来购买更多的存储空间,但要牺牲精度相关问题 更多 >
编程相关推荐