Когда я писал статью Использование узких мест для многоклассовой классификации в Keras и TensorFlow, некоторые из вас спрашивали об использовании увеличения данных в модели. Итак, я решил написать несколько статей, экспериментируя с различными дополнениями данных на модели узкого места. Для начала, вот краткое руководство, объясняющее, что такое увеличение данных и как это сделать в Keras.
Идея дополнения данных проста: мы выполняем случайные преобразования и нормализацию входных данных, чтобы обучаемая модель никогда не встречала одни и те же входные данные дважды. При небольшом количестве данных это может значительно снизить вероятность переобучения модели.
Но попытка вручную добавить преобразования к входным данным была бы утомительной задачей.
Вот почему в Keras есть встроенные функции для этого.
Пакет Keras Preprocessing имеет функцию ImageDataGeneraor, которую можно настроить для выполнения случайных преобразований и нормализации входных изображений по мере необходимости. Кроме того, в сочетании с функциями flow() и flow_from_directory() их можно использовать для автоматической загрузки данных, применения дополнений и подачи в модель.
Давайте напишем небольшой скрипт, чтобы увидеть возможности увеличения данных ImageDataGeneraor.
Я буду использовать следующее изображение,
Мы используем следующий код, чтобы загрузить изображение, запустить над ним дополнения 20 раз и сохранить полученные дополненные изображения.
from keras.preprocessing.image import ImageDataGenerator, img_to_array, load_img datagen = ImageDataGenerator( rotation_range=40, width_shift_range=0.2, height_shift_range=0.2, shear_range=0.2, zoom_range=0.2, horizontal_flip=True, fill_mode='nearest') img = load_img('data/Car.jpg') # this is a PIL image # convert image to numpy array with shape (3, width, height) img_arr = img_to_array(img) # convert to numpy array with shape (1, 3, width, height) img_arr = img_arr.reshape((1,) + img_arr.shape) # the .flow() command below generates batches of randomly transformed images # and saves the results to the `data/augmented` directory i = 0 for batch in datagen.flow( img_arr, batch_size=1, save_to_dir='data/augmented', save_prefix='Car_A', save_format='jpeg'): i += 1 if i > 20: break # otherwise the generator would loop indefinitely
Мы использовали следующие параметры для увеличения нашего изображения:
- rotate_range — диапазон (в градусах), в пределах которого можно применять случайные повороты к изображениям.
- width_shift_range — диапазон, в котором применяются случайные сдвиги по горизонтали.
- height_shift_range — диапазон, в пределах которого применяются случайные вертикальные сдвиги.
- shear_range — диапазон, в пределах которого применяются случайные преобразования сдвига.
- zoom_range — диапазон, в пределах которого применяется случайное масштабирование к изображениям.
- horizontal_flip — применять ли случайные горизонтальные перевороты к изображениям.
- fill_mode=’nearest’ — метод заполнения вновь созданных пикселей.
ImageDataGeneraor имеет еще несколько параметров для дополнений. О них можно прочитать на странице официальной документации.
Функция flow() объекта ImageDataGeneraor может принимать входные изображения, применять определенные нами дополнения и бесконечно создавать пакеты дополненных данных в цикле. Хотя в этом примере у нас есть только одно входное изображение, функция fit() действительно предназначена для пакетов изображений.
Полученные дополненные изображения сохраняются в каталоге data/augmented, и они будут выглядеть примерно так (преобразования случайны, поэтому ваши результаты могут отличаться):
Используя подобные дополнения к данным, мы сможем уменьшить вероятность переобучения модели глубокого обучения при обучении на небольшом наборе данных.
Статьи по Теме:
Использование узких мест для мультиклассовой классификации в Keras и TensorFlow
Neptune.ai — Увеличение данных в НЛП
Если вам понравилась эта статья, ознакомьтесь с моей новой книгой по глубокому обучению ниже.
Глубокое обучение в Windows: создание систем компьютерного зрения с глубоким обучением в Microsoft Windows
Научитесь создавать системы глубокого обучения и компьютерного зрения с использованием Python, TensorFlow, Keras, OpenCV и других инструментов прямо в знакомой среде Microsoft Windows.
(Примечание: статья содержит партнерские ссылки)
Первоначально опубликовано на www.codesofinterest.com 11 января 2019 г.