Создание больших файлов .npy с эффективным использованием памяти - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь создать очень большие файлы .npy, и у меня возникают некоторые трудности. Например, мне нужно создать матрицу (500, 1586, 2048, 3) и сохранить ее в файл npy. И желательно поместить его в файл npz_compressed. Мне также нужно, чтобы это было эффективным с точки зрения памяти для работы в системах с низким объемом памяти. Я пробовал несколько методов, но пока ни один из них не работает. Я столько раз писал и переписывал что-то, что у меня нет фрагментов кода для всего, но я опишу методы как можно лучше с фрагментами кода, где могу. Также приносим извинения за плохое форматирование.

  1. Создайте ndarray со всеми моими данными в нем, затем используйте savez_compressed для его экспорта.

Все мои данные будут помещены в массив , но это ужасно для эффективности памяти. Я заполнил все 8 ГБ ОЗУ плюс 5 ГБ пространства подкачки. Я получил его, чтобы сохранить свой файл, но он не масштабируется, так как моя матрица может значительно увеличиться.

Используйте «np.memmap ('file_name_to_create', mode = 'w +', shape = (500,1586,2048,3))», чтобы создать большой начальный файл npy, затем добавьте мои данные.

Этот метод работал для получения моих данных, и он довольно эффективно использует память. Однако я больше не могу использовать np.load для открытия файла (получать ошибки, связанные с pickle, независимо от того, имеет ли значение allow_pickle значение true или false), что означает, что я не могу поместить его в сжатый. Я был бы доволен этим форматом, если бы смог перевести его в сжатый формат, но я просто не могу понять. Я стараюсь по возможности избегать использования gzip.

Создайте массив (1,1,1,1) нулей и сохраните его с помощью np.save. Затем попробуйте открыть его с помощью np.memmap с тем же размером, что и раньше.

При этом возникают те же проблемы, что и в методе 2. Больше нельзя использовать np.load для его последующего чтения

Создайте 5 [100, ...] файлов npy методом 1 и сохраните их с помощью np.save. Затем прочтите 2 с помощью np.load (mmap_mode = 'r +'), а затем объедините их в 1 большой файл npy.

Создание отдельных файлов npy неплохо для памяти, может быть, от 1 ГБ до 1,5 gb. Однако я не мог понять, как затем объединить файлы npy без фактической загрузки всего файла npy в ОЗУ. Я читал в другом stackoverflow, что файлы npy вообще не предназначены для этого. Они упомянули, что для такого «добавления» было бы лучше использовать файл .h5.

Это основные методы, которые я использовал. Я ищу отзывы о том, сработает ли какой-либо из этих методов, какой из них будет работать «лучше всего» для эффективности памяти, и, возможно, некоторые рекомендации по тому, как заставить этот метод работать. Я также не был бы против перехода на .h5, если бы это был лучший метод, я просто еще не пробовал его.

1 Ответ

0 голосов
/ 06 августа 2020

попробуйте в Google colab , который использует графический процессор для его запуска

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...