Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy从google云存储加载内存映射阵列(mmap_模式)_Python_Numpy_Keras_Google Cloud Storage_Numpy Memmap - Fatal编程技术网

Python Numpy从google云存储加载内存映射阵列(mmap_模式)

Python Numpy从google云存储加载内存映射阵列(mmap_模式),python,numpy,keras,google-cloud-storage,numpy-memmap,Python,Numpy,Keras,Google Cloud Storage,Numpy Memmap,我想将一个.npy从google存储(gs://project/file.npy)加载到我的google ml作业中作为培训数据。由于文件的大小为+10GB,因此我希望使用numpy.load()的mmap_mode选项以避免内存不足 背景:我使用带有fit_生成器和Keras序列的Keras从存储在google存储中的.npy加载批量数据 要访问google存储,我使用的是BytesIO,因为不是每个库都可以访问google存储。 此代码在没有mmap_mode='r'的情况下运行良好: fr

我想将一个.npy从google存储(gs://project/file.npy)加载到我的google ml作业中作为培训数据。由于文件的大小为+10GB,因此我希望使用numpy.load()的mmap_mode选项以避免内存不足

背景:我使用带有fit_生成器和Keras序列的Keras从存储在google存储中的.npy加载批量数据

要访问google存储,我使用的是BytesIO,因为不是每个库都可以访问google存储。 此代码在没有mmap_mode='r'的情况下运行良好:

from tensorflow.python.lib.io import file_io
from io import BytesIO

filename = 'gs://project/file'

x_file = BytesIO(file_io.read_file_to_string(filename + '.npy', binary_mode = True))
x = np.load(x_file)
如果激活mmap_模式,则会出现以下错误:

TypeError:应为str、bytes或os.PathLike对象,而不是BytesIO

我不明白为什么它现在不再接受BytesIO了

代码包括mmap_模式:

x_file = BytesIO(file_io.read_file_to_string(filename + '.npy', binary_mode = True))
x = np.load(x_file, mmap_mode = 'r')
跟踪:

加载返回中的第444行文件“[…]/numpy/lib/npyio.py” format.open_memmap(file,mode=mmap_mode)文件 “[…]/numpy/lib/format.py”,第829行,在open\u memmap fp中= 打开(os_fspath(filename),'rb')文件“[…]/numpy/compat/py3k.py”, 第237行,操作系统路径“非”+路径类型。名称)类型错误: 应为str、bytes或os.PathLike对象,而不是BytesIO


您可以使用
b.getvalue()

x_file=BytesIO(file_io.read_file_to_string(filename+'.npy',binary_mode=True))
x=np.load(x_file.getvalue(),mmap_模式='r')

查看
np.lib.npyio.format.open\u memmap
的文档(或代码)。它显示磁盘上文件的名称。这可能*不是*类似文件的对象。在处理
save/load
头之后,此代码使用
np.memmap
,因此仅限于可以处理的内容。在memmap模式下,文件被“随机”访问。在普通加载中,访问是按顺序进行的—一个字节接一个字节,没有任何回溯或查找。是否可以拆分数据集,以便您可以上载并逐步处理它?此外,您是否可以检查一下,看看那里的想法是否符合您的需要?如果您可以拆分文件,从我的角度来看,这将是最好的选择。如果你能避免用这种方法耗尽内存,问题就会立即得到解决。公平地说,我不知道如何将范围标题应用到您的用例中,但我认为共享信息是个好主意。