Вопрос или проблема
Библиотека ImageDataGenerator устарела.
dataGen= ImageDataGenerator(width_shift_range=0.1, # 0.1 = 10% ЕСЛИ БОЛЬШЕ 1, НАПРИМЕР 10, ТО ЭТО ОТНОСИТСЯ К КОЛИЧЕСТВУ ПИКСЕЛЕЙ, НАПРИМЕР 10 ПИКСЕЛЕЙ
height_shift_range=0.1,
zoom_range=0.2, # 0.2 ОЗНАЧАЕТ, ЧТО МОЖНО ИЗМЕНЯТЬ ОТ 0.8 ДО 1.2
shear_range=0.1, # ВЕЛИЧИНА УГЛА ИСКРЕЖЕНИЯ
rotation_range=10) # ГРАДУСЫ
dataGen.fit(X_train)
batches= dataGen.flow(X_train,y_train,batch_size=20) # ЗАПРОС БИБЛИОТЕКИ ДЛЯ ГЕНЕРАЦИИ ИЗОБРАЖЕНИЙ, РАЗМЕР ПАКЕТА = КОЛИЧЕСТВО СОЗДАННЫХ ИЗОБРАЖЕНИЙ КАЖДЫЙ РАЗ, КОГДА ЭТО ЗОВЕТСЯ
X_batch,y_batch = next(batches)
Я наткнулся на этот фрагмент кода и мне нужно переписать его на основе новых библиотек. Можете кто-нибудь указать мне правильные библиотеки? И если возможно, переписать этот фрагмент с использованием новой библиотеки?
Ответ или решение
С недавними обновлениями TensorFlow, библиотека tensorflow.keras.preprocessing.image.ImageDataGenerator
была признана устаревшей, и теперь рекомендуется использовать tf.keras.utils.image_dataset_from_directory
и tf.keras.preprocessing.image.ImageDataGenerator
в более современном множественном формате через подмодули. Эти новые методы позволяют упростить поток данных и упрощают процесс работы с изображениями при обучении моделей глубокого обучения.
Новая библиотека
В качестве основной замены можно использовать библиотеку tf.keras.utils
. В частности, метод image_dataset_from_directory
предназначен для загрузки изображений из каталогов. Однако, если вам нужно выполнять такие операции, как аугментация изображений, то вы все еще можете использовать класс tf.keras.layers.experimental.preprocessing.ImageDataGenerator
для создания аналогичного функционала.
Переписывание кода
Вот как можно переписать ваш код с использованием новой библиотеки:
import tensorflow as tf
from tensorflow.keras import layers
from tensorflow.keras.models import Sequential
# Создание генератора данных с помощью tf.keras.layers.experimental.preprocessing
data_augmentation = Sequential([
layers.RandomWidth(factor=0.1), # Массштабируем по ширине до 10%
layers.RandomHeight(factor=0.1), # Массштабируем по высоте до 10%
layers.RandomZoom(height_factor=0.2, width_factor=0.2), # Зум 20%
layers.RandomShear(shear_factor=0.1), # Сдвиг
layers.RandomRotation(10) # Поворот на 10 градусов
])
# Применение аугментации к входным данным
X_augmented = data_augmentation(X_train)
# Создание батчей с использованием tf.data
batch_size = 20
train_dataset = tf.data.Dataset.from_tensor_slices((X_augmented, y_train))
train_dataset = train_dataset.batch(batch_size)
# Извлечение одного батча
for X_batch, y_batch in train_dataset.take(1):
print(X_batch.shape, y_batch.shape)
Пояснения к коду
- Импорт библиотек: Мы импортируем необходимые слои и классы из TensorFlow.
- Генератор аугментации: Мы создаем последовательную модель с уровнями аугментации, такими как
RandomWidth
,RandomHeight
,RandomZoom
,RandomShear
иRandomRotation
, которые выполняют операции аналогичные тем, что вы использовали вImageDataGenerator
. - Применение аугментации: Мы применяем созданный генератор к набору данных.
- Создание батчей из
tf.data.Dataset
: Мы создаем набор данных из тензоровX_augmented
иy_train
, и разбиваем их на батчи. - Извлечение батча: Мы берем первый батч из нашего датасета и выводим его размеры.
Заключение
С переходом на современные подходы в TensorFlow, важно адаптироваться к изменениям в API. Использование новых библиотек делает рабочие процессы более интуитивными и эффективными. Управление аугментацией и подготовкой данных стало более гибким и удобным для современных приложений в области машинного обучения.