5. Removing noise from the images

 AIM: Implement Multi-Layer Perceptron algorithm for Image denoising hyperparameter tuning.


PROGRAM:


import numpy as np
import tensorflow as tf
from tensorflow.keras.layers import Input, Dense
from tensorflow.keras.models import Model
from tensorflow.keras.datasets import mnist

# Load the MNIST dataset
(x_train, _), (x_test, _) = mnist.load_data()

# Normalize and reshape the data
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
x_train = x_train.reshape((len(x_train), np.prod(x_train.shape[1:])))
x_test = x_test.reshape((len(x_test), np.prod(x_test.shape[1:])))

# Add noise to the training and test data
noise_factor = 0.5
x_train_noisy = x_train + noise_factor * np.random.normal(loc=0.0, scale=1.0, size=x_train.shape)
x_test_noisy = x_test + noise_factor * np.random.normal(loc=0.0, scale=1.0, size=x_test.shape)

# Clip the noisy images to ensure values are between 0 and 1
x_train_noisy = np.clip(x_train_noisy, 0., 1.)
x_test_noisy = np.clip(x_test_noisy, 0., 1.)

# Define the MLP denoising model
def create_denoising_mlp(input_shape, encoding_dim):
    input_img = Input(shape=input_shape)
    encoded = Dense(encoding_dim, activation='relu')(input_img)
    decoded = Dense(input_shape[0], activation='sigmoid')(encoded)

    autoencoder = Model(input_img, decoded)
    return autoencoder

# Define input shape and encoding dimension
input_shape = (784,)  # 28x28 flattened images
encoding_dim = 128

# Create the MLP denoising model
model = create_denoising_mlp(input_shape, encoding_dim)

# Compile the model
model.compile(optimizer='adam', loss='binary_crossentropy')

# Train the denoising model
batch_size = 32
epochs = 50
model.fit(x_train_noisy, x_train, epochs=epochs, batch_size=batch_size, shuffle=True, validation_data=(x_test_noisy, x_test))

# Denoise test images
decoded_imgs = model.predict(x_test_noisy)

# Display the noisy and denoised images
import matplotlib.pyplot as plt

n = 10  # Number of images to display
plt.figure(figsize=(20, 4))
for i in range(n):
    # Display original images
    ax = plt.subplot(2, n, i + 1)
    plt.imshow(x_test_noisy[i].reshape(28, 28), cmap='gray')
    plt.title('Noisy')
    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)

    # Display denoised images
    ax = plt.subplot(2, n, i + 1 + n)
    plt.imshow(decoded_imgs[i].reshape(28, 28), cmap='gray')
    plt.title('Denoised')
    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)
plt.show()


o/P:

Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz 11490434/11490434 [==============================] - 0s 0us/step Epoch 1/50 1875/1875 [==============================] - 18s 9ms/step - loss: 0.1531 - val_loss: 0.1203 Epoch 2/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1173 - val_loss: 0.1140 Epoch 3/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1132 - val_loss: 0.1126 Epoch 4/50 1875/1875 [==============================] - 14s 7ms/step - loss: 0.1112 - val_loss: 0.1103 Epoch 5/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1099 - val_loss: 0.1094 Epoch 6/50 1875/1875 [==============================] - 14s 7ms/step - loss: 0.1088 - val_loss: 0.1095 Epoch 7/50 1875/1875 [==============================] - 14s 7ms/step - loss: 0.1081 - val_loss: 0.1082 Epoch 8/50 1875/1875 [==============================] - 14s 7ms/step - loss: 0.1075 - val_loss: 0.1077 Epoch 9/50 1875/1875 [==============================] - 14s 7ms/step - loss: 0.1070 - val_loss: 0.1078 Epoch 10/50 1875/1875 [==============================] - 15s 8ms/step - loss: 0.1067 - val_loss: 0.1078 Epoch 11/50 1875/1875 [==============================] - 14s 7ms/step - loss: 0.1064 - val_loss: 0.1076 Epoch 12/50 1875/1875 [==============================] - 14s 7ms/step - loss: 0.1062 - val_loss: 0.1071 Epoch 13/50 1875/1875 [==============================] - 14s 7ms/step - loss: 0.1060 - val_loss: 0.1069 Epoch 14/50 1875/1875 [==============================] - 14s 7ms/step - loss: 0.1059 - val_loss: 0.1071 Epoch 15/50 1875/1875 [==============================] - 14s 7ms/step - loss: 0.1057 - val_loss: 0.1069 Epoch 16/50 1875/1875 [==============================] - 14s 7ms/step - loss: 0.1056 - val_loss: 0.1066 Epoch 17/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1054 - val_loss: 0.1064 Epoch 18/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1053 - val_loss: 0.1066 Epoch 19/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1052 - val_loss: 0.1066 Epoch 20/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1051 - val_loss: 0.1063 Epoch 21/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1049 - val_loss: 0.1065 Epoch 22/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1049 - val_loss: 0.1063 Epoch 23/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1048 - val_loss: 0.1062 Epoch 24/50 1875/1875 [==============================] - 15s 8ms/step - loss: 0.1047 - val_loss: 0.1063 Epoch 25/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1046 - val_loss: 0.1061 Epoch 26/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1045 - val_loss: 0.1061 Epoch 27/50 1875/1875 [==============================] - 15s 8ms/step - loss: 0.1044 - val_loss: 0.1060 Epoch 28/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1043 - val_loss: 0.1059 Epoch 29/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1042 - val_loss: 0.1059 Epoch 30/50 1875/1875 [==============================] - 14s 7ms/step - loss: 0.1042 - val_loss: 0.1058 Epoch 31/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1041 - val_loss: 0.1058 Epoch 32/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1040 - val_loss: 0.1059 Epoch 33/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1040 - val_loss: 0.1056 Epoch 34/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1039 - val_loss: 0.1059 Epoch 35/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1039 - val_loss: 0.1054 Epoch 36/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1038 - val_loss: 0.1057 Epoch 37/50 1875/1875 [==============================] - 15s 8ms/step - loss: 0.1037 - val_loss: 0.1056 Epoch 38/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1037 - val_loss: 0.1057 Epoch 39/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1036 - val_loss: 0.1055 Epoch 40/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1036 - val_loss: 0.1054 Epoch 41/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1035 - val_loss: 0.1055 Epoch 42/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1035 - val_loss: 0.1053 Epoch 43/50 1875/1875 [==============================] - 14s 7ms/step - loss: 0.1034 - val_loss: 0.1054 Epoch 44/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1034 - val_loss: 0.1055 Epoch 45/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1034 - val_loss: 0.1052 Epoch 46/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1033 - val_loss: 0.1052 Epoch 47/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1033 - val_loss: 0.1050 Epoch 48/50 1875/1875 [==============================] - 14s 7ms/step - loss: 0.1032 - val_loss: 0.1051 Epoch 49/50 1875/1875 [==============================] - 13s 7ms/step - loss: 0.1032 - val_loss: 0.1051 Epoch 50/50 1875/1875 [==============================] - 15s 8ms/step - loss: 0.1032 - val_loss: 0.1053 313/313 [==============================] - 1s 2ms/step

noise images
denoised images

Comments

Popular posts from this blog

11. List of Capstone Projects for SOC - Deep Learning

8. Advanced CNN (Build AlexNet using Advanced CNN)