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
Post a Comment