У меня проблемы с памятью во время преобразования большого списка 2D элементов в массив 3D-нюмпов.Я использую среду CoLab.Я занимаюсь глубоким изучением проекта, связанного с медицинскими изображениями (.nii), сетью CNN.Эти изображения являются плавающими (из-за стандартизации).Я загружаю изображения (один канал) в память в виде списка, затем делю его на мелкие кусочки (разрешение 11x11).В результате у меня есть список 11650348 - 11x11 изображений.
Получить последовательности. Информация о памяти:
Gen RAM Free: 12,8 ГБ |Размер процессора: 733,4 МБ
Объем ОЗУ графического процессора: 15079 МБ |Используется: 0MB |Использовать 0% |Всего 15079MB
get seqences ...
Время: 109.60107789899996
Gen RAM Free: 11,4 ГБ |Размер процессора: 2,8 ГБ
Объем ОЗУ графического процессора: 15079 МБ |Используется: 0MB |Использовать 0% |Всего 15079 МБ
[ИНФО] матрица данных в списке из 11507902 изображений
Теперь я использую метод np.array для преобразования списка в массив.
Информация о памяти:
Gen RAM Free: 11,8 ГБ |Размер процессора: 2,1 ГБ
Объем ОЗУ графического процессора: 15079 МБ |Используется: 0MB |Использовать 0% |Всего 15079MB
Coverting ....
Gen RAM Free: 6,7 ГБ |Размер процессора: 7,3 ГБ
ОЗУ GPU Свободно: 15079 МБ |Используется: 0MB |Использовать 0% |Всего 15079MB
Форма наших данных тренировки: (11650348, 11, 11, 1) РАЗДЕЛИТЬ!См. Код ниже.
Как видите, я потерял много памяти.Почему это происходит?
Я пытаюсь использовать np.asarray , np.array с параметром copy .Это не сработало.
Код, отвечающий за разделение исходного изображения.
def get_parts(image, segmented):
T2 = image[0]
seg = segmented[0]
labels = []
val = [];
window_width = 5
zlen, ylen, xlen = T2.shape
nda = np.zeros((240, 240))
for x in range(0, xlen):
for y in range(0, ylen):
for z in range(0, zlen):
if T2[z, y, x] != 0:
xbegin = x - window_width
xend = x + window_width + 1
ybegin = y - window_width
yend = y + window_width + 1
val.append(T2[z, ybegin:yend, xbegin:xend])
labels.append(seg[z, y, x])
#np_array_01 = np.asarray(val)
#np_array_02 = np.asarray(labels)
return val, labels
Получение значений
for x in range(0, length):
data, labels = get_parts(T2_images[x], segmented[x])
uber_dane.extend(data)
uber_label.extend(labels)
Я преобразую его таким образом.
X_train, X_test, y_train, y_test = train_test_split(uber_dane, uber_label,test_size=0.2, random_state=0)
#LABELS
y_train = np.array(y_train)
y_test= np.array(y_test)
y_train = np.expand_dims(y_train, axis=3)
y_test = np.expand_dims(y_test, axis=3)
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)
#DATA - HERE IS A PROBLEM
X_train = np.array(X_train)
X_test= np.array(X_test)
print(sys.getsizeof(X_train))
print(sys.getsizeof(X_test))
X_train = np.expand_dims(X_train, axis=4)
X_test = np.expand_dims(X_test, axis=4)
Что вы думаете об этом?Может я что то не так делаю.Массив должен занимать меньше памяти, чем list: / Я провел некоторые поиски через stackoverflow и Интернет, но это не помогло.Я не мог с собой поделать.
Надеюсь, у вас будут хорошие идеи: D
ОБНОВЛЕНИЕ 08-06-2019
Я запустил свой код в pyCharm,другая ошибка:
X_train = np.array (uber_dane) ValueError: массив слишком большой;arr.size
* arr.dtype.itemsize
больше максимально возможного размера.
У меня есть: Python 3.6.3 (v3.6.3: 2c5fed8, 3 октября 2017, 17:26:49) [MSC v.1900 32 бит (Intel)] на win32 Итак, python пытается выделить более 3 ГБ.
lmfit минимизирует неудачу с помощью ValueError: массив слишком большой
Что выдумаю