#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 снова и снова в каждую эпоху, но это не так. Если вы сможете объяснить, почему это может произойти, это также поможет мне.
Причина, по которой я задаю этот вопрос, хотя оба подхода работают для меня одинаково, заключается в том, что я хочу знать, какова наилучшая практика в будущем.