Эффективный способ использования numpy memmap при обучении нейронной сети с помощью pytorch

#python #numpy #pytorch #pytorch-dataloader #numpy-memmap

Вопрос:

Я тренирую нейронную сеть на базе данных изображений. Мои изображения имеют разрешение Full HD (1920 x 1080), но для обучения я использую случайные посевы размером 256×256. Поскольку чтение полного изображения и последующая обрезка неэффективны, я использую numpy memmap для загрузки только обрезанного изображения 256×256. То есть я делаю что-то вроде ниже

 image_mmap = numpy.load(npy_image_path.as_posix(), mmap_mode=mmap_mode) cropped_image = image_mmap[y1:y2, x1:x2]  

Поскольку одни и те же изображения будут загружаться в каждую эпоху, не лучше ли сначала загрузить все memmaps и в каждую эпоху, просто вызовите вторую строку выше, чтобы получить обрезанное изображение?

PS: Я пробовал оба подхода и на самом деле не нашел большой разницы между ними. Моя интуиция подсказывает, что загрузка всех memmaps в __init__ функции должна быть лучше, чем загрузка memmaps снова и снова в каждую эпоху, но это не так. Если вы сможете объяснить, почему это может произойти, это также поможет мне.

Причина, по которой я задаю этот вопрос, хотя оба подхода работают для меня одинаково, заключается в том, что я хочу знать, какова наилучшая практика в будущем.