Выполните аугментацию обучающей выборки (train_datagen).

Примените к ней такие операции:

  • Отражения по вертикали и горизонтали,
  • Повороты до 90 градусов,
  • Сдвиги изображения по вертикали и горизонтали на 20% от исходного размера.

Создайте генератор для валидационной выборки (validation_datagen). Выведите на экран изображения из первого батча обучающей выборки. Код компактного вывода 16 изображений уже в прекоде.

Подсказка

Аргументы, отвечающие за аугментацию:

  • Отражения: horizontal_flip и vertical_flip,
  • Повороты: rotation_range (англ. «диапазон вращения»),
  • Сдвиги: width_shift_range (англ. «диапазон сдвига по ширине») и height_shift_range (англ. «диапазон сдвига по высоте»).
from tensorflow.keras.preprocessing.image import ImageDataGenerator
import matplotlib.pyplot as plt
 
# вместо одного генератора сделайте два: train_datagen и validation_datagen
train_datagen = ImageDataGenerator(
    validation_split=0.25,
    rescale=1./255,
    horizontal_flip=True,
    vertical_flip=True,
    rotation_range=90,
    width_shift_range=0.2,
    height_shift_range=0.2)

validation_datagen = ImageDataGenerator(
    validation_split=0.25,
    rescale=1./255)


train_datagen_flow = train_datagen.flow_from_directory(
    '/datasets/fruits_small/',
    target_size=(150, 150),
    batch_size=16,
    class_mode='sparse',
    subset='training',
    seed=12345)

val_datagen_flow = validation_datagen.flow_from_directory(
    '/datasets/fruits_small/',
    target_size=(150, 150),
    batch_size=16,
    class_mode='sparse',
    subset='validation',
    seed=12345)

features, target = next(train_datagen_flow)

# выводим 16 изображений
fig = plt.figure(figsize=(10,10))
for i in range(16):
    fig.add_subplot(4, 4, i+1)
    plt.imshow(features[i])
	# для компактности удаляем оси и прижимаем изображения друг к другу
    plt.xticks([])
    plt.yticks([])
    plt.tight_layout()

Результат