Я хочу загрузить .npy из хранилища Google (gs: //project/file.npy) в свое задание google ml в качестве обучающих данных. Поскольку размер файла составляет +10 ГБ, я хочу использовать параметр mmap_mode в numpy.load (), чтобы не исчерпать память.
Предыстория: я использую 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, bytes или 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')
След:
Файл «[...] / numpy / lib / npyio.py», строка 444, в формате возврата загрузки. Open_memmap (file, mode = mmap_mode) Файл «[...] / numpy / lib / format.py», строка 829, в open_memmap fp = open (os_fspath (filename), 'rb') Файл «[...] / numpy / compat / py3k.py», строка 237, в os_fspath «not» + path_type. имя ) TypeError: ожидаемый объект str, bytes или os.PathLike, а не BytesIO
np.lib.npyio.format.open_memmap
. Там написаноThe name of the file on disk. This may *not* be a file-like object
. После обработки заголовкаsave/load
этот код используетnp.memmap
, поэтому он ограничен тем, что он может обработать. - person hpaulj   schedule 30.12.2019