2016-12-21 3 views
2

У меня есть следующий код в моем Python Script:Python - Предварительная обработка большого количества данных изображения - Loop замерзает

def process_data(data): 
    features = [] 

    for i in range(int(len(data))): # Should iterate 33'000 times (length of data) 
     for j in range(3): 
      img = plt.imread(data[i][j].strip()) # Data is from a csv file 
      img = normalize(img) # Simple calculation 

      lis = img.flatten().tolist() 
      features += lis 

return features 

Это должно работать около 33'000 * 3 раза в предобработки всех данных. Однако после примерно 10 000-12 000 итераций сценарий резко замедляется, замерзает, и иногда моя машина (i7 - 3.6GHz, 8GB RAM) замерзает.

Что я могу сделать? Трудно разделить данные. Мне сказали использовать Keras 'fit_generator раньше, но как бы я это сделал?

+0

Почему вы хотите поместить это в список python? Очень удобно хранить его в массиве 1D numpy. Также не могли бы вы дать больше информации о том, как выглядят «данные»? – kmario23

+0

И никогда не используйте 'range (len (..))'. Лучшим вариантом является 'enumerate (..)' – kmario23

+0

@ kmario23 Я буду использовать перечисление, спасибо :) Это? Хорошо, я буду хранить его в массиве 1D Numpy. Данные состоят из 3 изображений (значения rgb) и значения от 0 до 50. Так что что-то вроде [[[255,255,255], [255,255,255], ..], [[255,255,255], [255,255,255], ..], [[ 255,255,255], [255,255,255], ..], 10.5] – Tutanchamunon

ответ

0

В зависимости от того, насколько велики эти файлы изображений, вы могли бы иссякнуть из ОЗУ и вынуждены поменяться местами. Это приведет к тому, что ваша система будет вялой. Вместо того, чтобы собирать все обработанные файлы в список, можете ли вы записать их по одному за раз?

+0

Хм, сложно. Мне нужно разбить данные после этого (коэффициент 1: 4), а затем сохранить его в [маринованный файл] (https://docs.python.org/2/library/pickle.html). Любая идея о том, как я могу это решить? – Tutanchamunon

Смежные вопросы