MemoryError на Kaggle после загрузки данных для кера - PullRequest
0 голосов
/ 13 апреля 2019

Чтобы быстро добраться до сути, я пытаюсь запустить это ядро ​​kaggle на новом, большем и улучшенном наборе данных (1,3 ГБ) вместо 430 МБ исходного набора данных.Но после загрузки данных с использованием этого:

def convert_image_to_array(image_dir):
try:
    image = cv2.imread(image_dir)
    if image is not None :
        image = cv2.resize(image, default_image_size)   
        return img_to_array(image)
    else :
        return np.array([])
except Exception as e:
    print(f"Error : {e}")
    return None

и здесь используется convert_image_to_array:

image_list, label_list = [], []
try:
print("[INFO] Loading images ...")
root_dir = listdir(directory_root)
for directory in root_dir :
    # remove .DS_Store from list
    if directory == ".DS_Store" :
        root_dir.remove(directory)

for plant_folder in root_dir :
    plant_disease_folder_list = listdir(f"{directory_root}/{plant_folder}")

    for disease_folder in plant_disease_folder_list :
        # remove .DS_Store from list
        if (disease_folder == ".DS_Store"):
            plant_disease_folder_list.remove(disease_folder)

    for plant_disease_folder in plant_disease_folder_list:
        print(f"[INFO] Processing {plant_disease_folder} ...")
        plant_disease_image_list = listdir(f"{directory_root}/{plant_folder}/{plant_disease_folder}/")

        for single_plant_disease_image in plant_disease_image_list :
            if single_plant_disease_image == ".DS_Store" :
                plant_disease_image_list.remove(single_plant_disease_image)

        for image in plant_disease_image_list[:200]:
            image_directory = f"{directory_root}/{plant_folder}/{plant_disease_folder}/{image}"
            if image_directory.endswith(".jpg") == True or image_directory.endswith(".JPG") == True:
                image_list.append(convert_image_to_array(image_directory))
                label_list.append(plant_disease_folder)
     print("[INFO] Image loading completed")  
except Exception as e:
    print(f"Error : {e}")

Моя проблема заключается в том, что после запуска этого кода мое ядро ​​kaggleиспользование памяти резко увеличивается до 11 ГБ / 13 ГБ .На следующем шаге, который разбивает данные на две части для обучения и тестирования .. используя это:

np_image_list = np.array(image_list, dtype=np.float16) / 225.0

Я получаю MemoryError со следующим стеком:

---------------------------------------------------------------------------
MemoryError                               Traceback (most recent call last)
<ipython-input-7-2574d0b4a520> in <module>()
----> 1 np_image_list = np.array(image_list, dtype=np.float16) / 225.0

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

Спасибо

...