从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

numpy 数组的内存映射文件

是否可以在内存映射文件中存储python对象(特别是sklearn模型)?

将 CSV 文件加载到 NumPy memmap 数组使用太多内存

将Firebase存储与Google云CDN集成

400 Bad Request 错误尝试从云存储加载 bigquery 表