операции над массивами в python с точки зрения памяти - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь понять распределение памяти в следующей операции:

x_batch,images_path,ImageValidStatus = tf_resize_images(path_list, img_type=col_mode, im_size=IMAGE_SIZE)
x_batch=x_batch/255;
x_batch = 1.0-x_batch  
x_batch = x_batch.reshape(x_batch.shape[0],IMAGE_SIZE[0]*IMAGE_SIZE[1]*IMAGE_SIZE[2])

, что меня интересует, это x_batch, это многомерный numpy массив (100x64x64x3), где 100 - это количество изображений, а 64x64x3 - это размеры изображения.

Каково максимальное количество копий изображений, находящихся в памяти в один момент времени. другими словами, как именно операции (x_batch/255), (1-x_batch) и x_batch.reshape происходят с точки зрения памяти.

Моя главная проблема в некоторых случаях, когда я пытаюсь обрабатывать 500K изображений одновременно, если я сделаю несколько копий этих изображений в памяти, мне будет очень трудно уместить все в памяти.

1 Ответ

0 голосов
/ 24 апреля 2020

Я вижу "tf" в вашем коде, поэтому я не уверен, спрашиваете ли вы о тензорах или массивах. Предположим, вы спрашиваете о массивах. Как правило, массивы записываются в память один раз, а затем обрабатываются. Например,

import numpy as np
data = np.empty((1000,30,30,5))  #This took up 1000*30*30*5*dtype_size bytes (plus epsilon). 
data.reshape((1000,30,150))      #Does nothing but update how numpy accesses the array.
data += 1                        #Adds one to all the entries in the array. 
data = 1-data                    #Overwrites the array with the data of 1-data.
x    = data + 1                  #Re-allocates and copies the whole memory. 

До тех пор, пока вы не измените размер массива (перераспределите память), numpy будет очень быстро и эффективно работать с данными. Не так хорошо, как тензор потока, но очень, очень быстро. При добавлении на месте функции, операции выполняются без использования дополнительной памяти. Такие вещи, как добавление в массив, могут вызвать проблемы и заставить python переписать массив в памяти.

...