从Google云存储中Numpy加载一个内存映射的数组(mmap_mode)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Google云存储中Numpy加载一个内存映射的数组(mmap_mode)相关的知识,希望对你有一定的参考价值。
我想从Google存储空间(gs://project/file.npy)中将。npy作为训练数据加载到我的Google ml-job中。由于文件的大小为+ 10GB,因此我想使用numpy.load()的mmap_mode选项来不耗尽内存。
背景:我将Keras与fit_generator和Keras Sequence结合使用,以从.npy加载存储在Google存储设备中的成批数据。
要访问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_mode,则会出现此错误:
TypeError:预期的str,字节或os.PathLike对象,而不是BytesIO
我不明白为什么它现在不再接受BytesIO。
包括mmap_mode的代码:
x_file = BytesIO(file_io.read_file_to_string(filename + '.npy', binary_mode = True))
x = np.load(x_file, mmap_mode = 'r')
Trace:
文件“ [...] / numpy / lib / npyio.py”,行444,在装入返回中format.open_memmap(file,mode = mmap_mode)文件open_memmap fp中的“ [...] / numpy / lib / format.py”行829 =打开(os_fspath(文件名),“ rb”)文件“ [...] / numpy / compat / py3k.py”,237行,在os_fspath中“不是” + path_type。名称)TypeError:预期的str,字节或os.PathLike对象,而不是BytesIO
您可以使用b.getvalue()
从BytesIO传递到字节
x_file = BytesIO(file_io.read_file_to_string(filename + '.npy', binary_mode = True))
x = np.load(x_file.getvalue(), mmap_mode = 'r')
以上是关于从Google云存储中Numpy加载一个内存映射的数组(mmap_mode)的主要内容,如果未能解决你的问题,请参考以下文章
使用 spark 将 parquet 数据从 Google 云存储加载到 BigQuery
是否可以在内存映射文件中存储python对象(特别是sklearn模型)?