Вопрос или проблема
Я запутался, когда добавляю аугментацию данных, должен ли я получить больше данных или те же данные? Я протестировал длину x_train, чтобы это подтвердить, но получил ту же длину до аугментации и после аугментации, это правильно или мне следует удвоить свои данные?
print(len(x_train)) вывод: 5484
после аугментации:
datagen = ImageDataGenerator(
featurewise_center=True, # устанавливаем среднее значение входа равным 0 по всему набору данных
samplewise_center=True, # устанавливаем среднее значение каждого примера равным 0
featurewise_std_normalization=True, # делим входные данные на стандартное отклонение набора данных
samplewise_std_normalization=True, # делим каждое входное значение на его стандартное отклонение
zca_whitening=False, # применяем ZCA нормализацию
rotation_range=45, # случайным образом поворачиваем изображения в диапазоне (градусы, от 0 до 180)
zoom_range = 0.2, # Случайно масштабируем изображение
width_shift_range=0.2, # случайным образом сдвигаем изображения по горизонтали (доля от общей ширины)
height_shift_range=0.2, # случайным образом сдвигаем изображения по вертикали (доля от общей высоты)
horizontal_flip=True, # случайным образом переворачиваем изображения
vertical_flip=True,
validation_split=0.2) # случайным образом переворачиваем изображения
datagen.fit(x_train)
print(len(x_train)) вывод: 5484
Это хорошо или что мне следует делать, пожалуйста?
Немного запоздалый ответ, но это может помочь кому-то.
Вам не следует беспокоиться о длине данных после аугментации, поскольку Keras это делает, когда вы отправляете данные на обучение. Таким образом, фактическая длина данных не изменяется.
Ответ или решение
При использовании аугментации данных в Keras важно понимать, что длина ваших исходных данных (например, x_train
) не изменяется. Это связано с тем, что аугментация выполняется "на лету" во время обучения модели, а не создает дополнительные копии ваших данных.
Вот подробное объяснение:
-
Что такое аугментация данных?
Аугментация данных — это метод увеличения объема обучающего набора данных путем создания измененных версий образцов, что позволяет улучшать обобщающую способность модели. Ваша модель видит различные варианты одного и того же изображения, что помогает избежать переобучения. -
Почему длина данных остается неизменной?
После создания объектаImageDataGenerator
(как вы сделали сdatagen
) и применения методаfit
, вы по-прежнему имеете те же 5484 образца вx_train
. Это нормально, так какImageDataGenerator
будет динамически генерировать аугментированные данные в процессе обучения. Например, если вы передаете эти данные в методfit
илиflow
, Keras будет создавать новые аугментированные версии на лету, но общее количество образцов останется прежним. -
Как работать с аугментацией?
Вы можете использовать методflow
илиflow_from_directory
для подачи данных в модель во время обучения. Например:model.fit(datagen.flow(x_train, y_train, batch_size=32), epochs=50)
В этом случае на каждом шаге будет генерироваться новая выборка образцов с аугментацией.
-
Нужно ли беспокоиться о длине данных?
Нет, вам не нужно беспокоиться о том, чтобы количество образцов увеличивалось. Главная цель аугментации — это обогатить ваш набор данных за счет различных преобразований, что делается "на лету". Вы можете сосредоточиться на улучшении вашей модели, правильно выбирая параметры аугментации.
Таким образом, ваша проблема заключается не в неправильно настроенной аугментации, а в неправильном понимании того, как работает Keras при использовании ImageDataGenerator
. Длина вашего обучающего набора останется неизменной, но разнообразие данных будет увеличено, что способствует улучшению обобщающей способности модели.