Как применить DataGenerator для обучения и проверки данных? - PullRequest
0 голосов
/ 18 июня 2020

Используя код здесь https://keras.io/api/utils/python_utils/#sequence -class , я закодировал собственный DataGenerator.

 # Here, `x_set` is list of path to the images
 # and `y_set` are the associated classes.

class DataGenerator(Sequence):

    def __init__(self, x_set, y_set, batch_size):
        self.x, self.y = x_set, y_set
        self.batch_size = batch_size

    def __len__(self):
        return math.ceil(len(self.x) / self.batch_size)

    def __getitem__(self, idx):
        batch_x = self.x[idx * self.batch_size:(idx + 1) *
        self.batch_size]
        batch_y = self.y[idx * self.batch_size:(idx + 1) *
        self.batch_size]

        return np.array([
            resize(imread(file_name), (224, 224))
               for file_name in batch_x]), np.array(batch_y)

Теперь мне интересно, как применить генератор данных к моему обучению данные и данные проверки? У меня есть X_train и X_val, которые представляют собой списки, содержащие пути изображений к моим файлам изображений, и y_train и y_val, которые представляют собой метки с горячим кодированием.

Могу ли я затем использовать этот код?

training_generator = DataGenerator(X_train, y_train)
validation_generator = DataGenerator(X_val, y_val)

А потом подогнать модель?

model.fit_generator(generator=training_generator,
                    validation_data=validation_generator)

1 Ответ

1 голос
/ 18 июня 2020

То, что вы написали, в основном правильно. Не забудьте передать параметр batch_size вашему DataGenerator.

С другой стороны, параметр epochs (как вы упомянули в комментарии) должен быть передан в model.fit_generator (еще лучше используйте вместо него model.fit, потому что метод fit_generator является устаревшим ). Если вы не передадите его, значение по умолчанию epochs будет равно 1.

Также ознакомьтесь с в этом руководстве о том, как использовать класс Sequence (вы можете перейти к внизу, где используется DataGenerator). В этом руководстве в DataGenerator передается пара параметров, отличных от batch_size, поскольку они определены как входные данные для метода __init__. Вам не нужно их передавать, пока вы их не определяете.

...