Генераторы данных модели Keras для изображений с многозначным бинаризатором, выбрасывающим generator_output = next(output_generator) остановите перечисление

#python #machine-learning #keras #generator

#python #машинное обучение #keras #генератор

Вопрос:

Я работал над обучением модели keras из большого набора данных изображений с размером нескольких меток около 4-5 ГБ, но написанная мной программа отлично работает для меньшего набора данных, но для большего набора данных у меня заканчивается память, поэтому мне нужно написать пользовательские генераторы, которые я пробовал и почти закончил, но я застрял с некоторым исключением во время обучения с помощью моих генераторов данных, и исключение составляет:

1/25 [>………………………..] — ETA: 2:13 — потеря: 1.0268 — оценка: 0.5038

2/25 [=>……………………….] — ETA: 1:07 — потеря: 1.0172 — соответствие: 0.5086

3/25 [==>………………………] — ETA: 46s — потеря: 0.9993 — acc: 0.5123

4/25 [===>……………………..] — ETA: 34 секунды — потеря: 0.9795 — acc: 0.5141

Обратная трассировка (последний последний вызов): Файл «/home/innovation/PycharmProjects/keras-multi-label/TestGen.py», строка 165, в epochs=ЭПОХИ, подробный = 1) файл «/home/innovation/anaconda3/envs/tf-gpu-cuda9/lib/python3.6/site-packages/keras/legacy/interfaces.py», строка 91, в оболочке возвращает файл func(*args, **kwargs) «/home/innovation/anaconda3/envs/tf-gpu-cuda9/lib/python3.6/site-packages/keras/engine/training.py», строка 1418, в fit_generator initial_epoch=initial_epoch) Файл «/home/innovation/anaconda3/envs/tf-gpu-cuda9/lib/python3.6/site-packages/keras/engine/training_generator.py», строка 181, в fit_generator generator_output = next(output_generator) остановка ввода

Я публикую здесь свой код, я был бы очень признателен, если кто-нибудь сможет помочь исправить эту проблему

     import json
    from imutils import paths
    import random
    import cv2
    from sklearn.model_selection import train_test_split
    import numpy as np
    import os
    from sklearn.preprocessing import MultiLabelBinarizer
    from keras.optimizers import Adam
    from pyimagesearch.smallervggnet import SmallerVGGNet
    from keras.preprocessing.image import ImageDataGenerator
    import matplotlib.pyplot as plt
    import pickle
    # load the user configs
    with open('conf/conf.json') as f:
      config = json.load(f)

    IMAGE_DIMS = (96, 96, 3)

    EPOCHS = 75
    INIT_LR = 1e-3
    BS = 32

    # config variables
    dataset     = config["dataset"]
    model_path      = config["model"]
    labelbin   = config["labelbin"]
    plot   = config["plot"]
    test_image     = config["test_image"]

    print("[INFO] loading images...")
    imagePaths = sorted(list(paths.list_images(dataset)))
    random.seed(42)
    random.shuffle(imagePaths)

    labels = list(imagePath.split(os.path.sep)[-2].split("_") for imagePath in imagePaths)

    images = (cv2.resize(cv2.imread(imagePath), (IMAGE_DIMS[1], IMAGE_DIMS[0])) for imagePath in imagePaths)

    #construct the image generator for data augmentation
    aug = ImageDataGenerator(rotation_range=25, width_shift_range=0.1,
       height_shift_range=0.1, shear_range=0.2, zoom_range=0.2,
       horizontal_flip=True, fill_mode="nearest")

    # Data generator
    def create_generator(images,labels,BS):
        arr_images = []
        slice_count = 0
        count_remain = total_items

        for (idx,image) in enumerate(images):

        count = idx 1

        if count % BS == 0:
            arr_images.append(image)
            _labels_chunk = labels[slice_count:count]
            slice_count = count
            count_remain = total_items - count

            (trainX, testX, trainY, testY) = train_test_split(np.array(arr_images, dtype="float") / 255.0,_labels_chunk, test_size=0.2, random_state=42)
            yield trainX, trainY
            arr_images.clear()



        else:
            arr_images.append(image)

            if count_remain == len(arr_images):
            _labels_chunk = labels[slice_count:count]
            (trainX, testX, trainY, testY) = train_test_split(np.array(arr_images, dtype="float") / 255.0,_labels_chunk, test_size=0.2, random_state=42)

            yield trainX, trainY
            arr_images.clear()

    mlb = MultiLabelBinarizer()
    labels = mlb.fit_transform(labels)


    model = SmallerVGGNet.build(
       width=IMAGE_DIMS[1], height=IMAGE_DIMS[0],
       depth=IMAGE_DIMS[2], classes=len(mlb.classes_),
       finalAct="sigmoid")


    opt = Adam(lr=INIT_LR, decay=INIT_LR / EPOCHS)

    model.compile(loss="binary_crossentropy", optimizer=opt,
       metrics=["accuracy"])


    print("[INFO] training network...",len(labels))
    H = model.fit_generator(
       create_generator(images,labels,500),
       steps_per_epoch=25,
       epochs=EPOCHS, verbose=1)


    # save the model to disk
    print("[INFO] serializing network...")
    model.save(model_path)
  

Заранее спасибо

Комментарии:

1. Здравствуйте, кто-нибудь может здесь помочь, пожалуйста…. Спасибо

2. Здравствуйте, эксперты, есть ли кто-нибудь, кто может мне здесь помочь. Я опубликовал этот пост около месяца назад, и я вижу, что никто еще не ответил на это. Я буду очень рад, если кто-нибудь сможет ответить.

3. Я здесь никого не поддержал по этому вопросу, я прошу, если у кого-то есть решение — пожалуйста, поделитесь. Спасибо

4. Эта проблема слишком сложна для нас : (