import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras.layers import Conv2D, Conv2DTranspose, Input
from tensorflow.keras.models import Model

def build_inpainting_model():
    inputs = Input(shape=(256, 256, 3))
    x = Conv2D(64, 5, padding='same', activation='relu')(inputs)
    x = Conv2D(64, 5, padding='same', activation='relu')(x)
    x = Conv2D(64, 5, padding='same', activation='relu')(x)
    x = Conv2DTranspose(64, 5, padding='same', activation='relu')(x)
    x = Conv2DTranspose(64, 5, padding='same', activation='relu')(x)
    x = Conv2D(3, 5, padding='same', activation='sigmoid')(x)
    return Model(inputs, x)

# Hyperparameters
epochs = 10
batch_size = 1

# Load dataset (example)
def load_data():
    # Placeholder function to load dataset
    return np.random.rand(10, 256, 256, 3)

# Initialize model
model = build_inpainting_model()
model.compile(optimizer=tf.keras.optimizers.Adam(1e-4), loss='binary_crossentropy')

# Training loop
for epoch in range(epochs):
    real_images = load_data()
    masks = np.random.rand(batch_size, 256, 256, 3) > 0.5
    masked_images = real_images * masks
    
    loss = model.train_on_batch(masked_images, real_images)
    print(f'Epoch [{epoch+1}/{epochs}], Loss: {loss}')
    
    if (epoch + 1) % 5 == 0:
        output_images = model.predict(masked_images)
        for i in range(batch_size):
            plt.imshow(output_images[i])
            plt.axis('off')
            plt.savefig(f'inpainting_image_{epoch+1}_{i}.png')
            plt.close()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.