Время прочтения: 2 мин.

Что делать, если нужно быстро обучить модель на очень маленьком наборе данных и постараться избежать риска «переобучения»? Само собой напрашивается решение: найти больше данных. Чем больше будет у нас материала для обучения модели, тем точнее будут её предсказания.

Довольно большое количество ресурсов с разнообразными датасетами для машинного обучения могли бы нам в этом помочь. Существует даже поисковик от Google для поиска датасетов: Google Dataset Search. Но что делать, если набор данных мал? Очень мал, неприлично мал? Правильно, создадим данные сами. Предположим, что нам необходимо обучить нашу модель узнавать пришельцев на основании имеющейся у нас единственной фотографии хитрого инопланетного засланца (а почему нет?)

Увеличивать наш датасет мы будем с помощью ImageDataGenerator библиотеки Keras на языке Python. В описании к методу ImageDataGenerator указано, что он может быть использован для расширения обучающего или тестового наборов данных (или для создания набора данных на основе имеющихся изображений). Нам подходит.

Аргументы, которые мы будем использовать:

      *  rotation_range – задаем угол для случайного вращения изображения;

      *  width_shift_range – сдвиг по ширине;

      * height_shift_range – сдвиг по высоте;

      * shear_range – сдвиг пикселей изображения;

      * zoom_range – масштабирование изображения;

      * horizontal_flip – горизонтальный поворот изображения;

      * fill_mode – правило заполнения точек за пределами границы входного изображения.

Приступим, весь код займет всего пару строк.

1.Импортируем.

2.Задаем параметры аргументов.

3.Выбираем изображение.

4.Задаем параметры цикла.

5.Запускаем и получаем готовые изображения.

from keras.preprocessing.image import ImageDataGenerator, img_to_array, load_img

data_augment = 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')

single_img = load_img('badalien.jpg')
image_array = img_to_array(single_img)
image_array = image_array.reshape((1,) + image_array.shape)

i = 0
for batch in data_augment.flow(image_array, save_to_dir = 'hunting_on_alien', save_prefix = 'badalien', save_format='jpg'):
    i += 1
    if i > 20:
        break

В результате выполнения кода получаем целую «фотосессию» нашего инопланетянина, которую уже можно отдать на обучение модели.

На этом всё, спасибо за внимание.