import tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# Define data augmentation
train_datagen = ImageDataGenerator(
rescale=1./255,
rotation_range=20,
width_shift_range=0.1,
height_shift_range=0.1,
horizontal_flip=True,
validation_split=0.2
)
# Load data (placeholder, replace with actual data loading)
# X_train, y_train = load_grayscale_and_color_images()
# Create model with dropout
model = models.Sequential([
layers.Input(shape=(64, 64, 1)),
layers.Conv2D(64, (3,3), activation='relu', padding='same'),
layers.Dropout(0.3),
layers.Conv2D(64, (3,3), activation='relu', padding='same'),
layers.MaxPooling2D((2,2)),
layers.Conv2D(128, (3,3), activation='relu', padding='same'),
layers.Dropout(0.3),
layers.UpSampling2D((2,2)),
layers.Conv2D(3, (3,3), activation='sigmoid', padding='same')
])
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.0005),
loss='mse',
metrics=['mae'])
# Use early stopping
early_stop = tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=5, restore_best_weights=True)
# Fit model with data augmentation
# history = model.fit(
# train_datagen.flow(X_train, y_train, subset='training', batch_size=32),
# validation_data=train_datagen.flow(X_train, y_train, subset='validation'),
# epochs=50,
# callbacks=[early_stop]
# )
# For demonstration, assume after training:
new_metrics = 'Training loss: 0.05, Validation loss: 0.08, Training MAE: 0.12, Validation MAE: 0.18'