Вопрос или проблема
Мой главный вопрос касается аугментации.
если я применяю аугментацию, я считаю, что это всегда лучше, чем меньше данных
но в моем случае точность валидации снижается
обучение: 7000 изображений, валидация: 3000 изображений: точность валидации: 0.89
обучение: 40000 изображений, валидация: 17990 изображений: точность валидации: 0.85
мой код аугментации
def data_augmentation_folder(trainImagesPath,saveDir):
#X_train=load_training_data(trainImagesPath,"train")
print("=====================================================")
X_train = cleanData(trainImagesPath)
X_train = np.array(X_train)
print(X_train[0].shape)
for i in range(5):
#print(i)
datagen = ImageDataGenerator(rotation_range=15,
width_shift_range=0.1,
height_shift_range=0.1,
shear_range=0.01,
zoom_range=[0.9, 1.25],
horizontal_flip=True,
vertical_flip=False,
fill_mode="reflect",
data_format="channels_last",
brightness_range=[0.5, 1.5])
if i==1:
datagen = ImageDataGenerator(
featurewise_center=True,
featurewise_std_normalization=True,
rotation_range=90,
width_shift_range=0.1,
height_shift_range=0.1,
#zoom_range=0.2
)
if i==2:
datagen = ImageDataGenerator(
featurewise_center=True,
featurewise_std_normalization=True,
rotation_range=100,
width_shift_range=0.1,
height_shift_range=0.1,
#zoom_range=0.2
)
elif i==3:
datagen = ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
elif i==4:
datagen = ImageDataGenerator(
rescale=1./255,
shear_range=0.1,
rotation_range=80,
zoom_range=0.1,
horizontal_flip=True,
brightness_range=[0.5,1.5])
datagen.fit(X_train)
for x, y in datagen.flow(X_train, np.arange(X_train.shape[0]),shuffle=True, save_to_dir=saveDir,save_format="jpg",save_prefix='aug'):
#print(y)
assert x.shape[1:] == X_train.shape[1:]
break
вопросы
в каком случае точность валидации снижается, даже если я применил аугментацию?
о чем вам нужно беспокоиться, когда вы применяете аугментацию?
Вы не можете сравнивать точности валидации, если наборы данных для валидации фундаментально различны.
То, что вы делали изначально, – это проверка вашей модели на ограниченном наборе изображений. Аугментация применяется, чтобы сделать ваш набор данных более представительным для вашей рабочей среды.
Если вы ожидаете, что в вашей рабочей среде изображения будут извлекаться из того же подсостояния, что и ваш аугментированный набор данных, точность валидации в первом случае не будет истинным представителем производительности вашей модели в реальном мире.
…В моем случае точность валидации снижается
Это нормально, так как вы не делаете “яблоко к яблоку” сравнение. Фактическая производительность модели могла возрасти или остаться прежней, но это не видно, потому что вы используете разные наборы данных для валидации для каждой модели. Модель, обученная на аугментированном наборе данных, могла лучше справляться с классификацией оригинальных изображений и справляться с аугментированными, а поскольку аугментированных изображений почти в 6 раз больше оригинальных, общая точность пострадает.
В общем, ваш набор для валидации не должен подвергаться аугментации, чтобы верно отражать, как выглядят “реальные” данные, и чтобы метрики валидации имели смысл. Также крайне сложно проводить сравнения между моделями и эталонами, когда вы изменяете свой набор для валидации.
Ответ или решение
Вопрос о работе с данными и их аугментации становится особенно актуальным в контексте достижения высокой точности валидации моделей машинного обучения. Давайте подробнее разберем причины, по которым точность валидации может снижаться после применения аугментации, а также обсудим возможные проблемы и их решения.
Причины снижения точности валидации после аугментации
-
Сравнение различных наборов данных:
Вы указали, что при использовании 7000 изображений для обучения и 3000 для валидации были получены 89% точности, тогда как при 40000 изображениях точность валидации упала до 85%. Основная причина заключается в том, что вы сравниваете различные наборы данных и, следовательно, результаты не сопоставимы. Если в данных для валидации моделей разные характеристики или распределение, то сравнили "яблоки с апельсинами". -
Влияние аугментации на распределение данных:
Аугментация создает новые образцы, изменяя существующие, тем самым изменяя распределение данных. Если ваше обучающее множество становится слишком разнообразным из-за агрессивной аугментации, это может привести к снижению способности модели обобщать на невидимых данных (например, данных валидации). -
Качество аугментации:
Параметры аугментации, такие как вращение, сдвиг или изменение яркости, могут не соответствовать реальным условиям, в которых будут использоваться ваши данные. Это может вызвать потери важной информации, что, в свою очередь, негативно сказывается на точности валидации.
На что стоит обратить внимание при аугментации
-
Сохранение оригинальных данных:
Всегда сохраняйте оригинальные данные для валидации. Это позволит иметь строгий контроль над ослаблением модели и корректно интерпретировать ее ошибки. -
Анализ распределения данных:
Перед выполнением аугментации проанализируйте распределение текущих данных. Убедитесь, что аугментированные данные находятся в том же распределении, что и ваши данные валидации, чтобы избежать некорректных сопоставлений. -
Чрезмерная аугментация:
Будьте осторожны с применением высоких значений параметров аугментации, таких как угол поворота или степень изменения яркости. Слишком сильная аугментация может сделать ваши данные неузнаваемыми для модели. -
Тестирование и валидация:
Включите корректные подходы к отделению данных для обучения, тестирования и валидации. Это поможет модельнонимно оценить работу в реальных условиях.
Заключение
Понимание и правильная интерпретация результатов моделей – ключ к успешному развертыванию и применению машинного обучения. Если точность валидации снижается после аугментации, постарайтесь проанализировать, не вызвано ли это сравнением несопоставимых данных, и оптимизируйте параметры аугментации, чтобы обеспечить лучшую универсальность вашей модели. Всегда применяйте аугментацию с учетом контекста применения данных, избегая некорректных выводов из результатов.