This program shows how to use data augmentation and transfer learning together to train a model on a small image dataset.
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.applications import MobileNetV2
from tensorflow.keras import layers, models
# Create data augmentation generator
train_datagen = ImageDataGenerator(
rotation_range=20,
width_shift_range=0.1,
height_shift_range=0.1,
horizontal_flip=True,
rescale=1./255
)
# Assume images are in 'train/' folder with subfolders for classes
train_generator = train_datagen.flow_from_directory(
'train/',
target_size=(128, 128),
batch_size=16,
class_mode='binary'
)
# Load pre-trained MobileNetV2 without top layers
base_model = MobileNetV2(weights='imagenet', include_top=False, input_shape=(128, 128, 3))
base_model.trainable = False # Freeze base model
# Add new classification layers
model = models.Sequential([
base_model,
layers.GlobalAveragePooling2D(),
layers.Dense(1, activation='sigmoid')
])
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# Train model on small dataset with augmentation
model.fit(train_generator, epochs=3)
print('Training complete')