| """ |
| Data Loader Module |
| Handles loading and preprocessing of MNIST dataset with noise addition |
| """ |
| import numpy as np |
| from tensorflow.keras.datasets import mnist |
|
|
|
|
| def load_and_preprocess_data(): |
| """ |
| Load MNIST dataset and preprocess images |
| |
| Returns: |
| Tuple of (x_train, y_train), (x_test, y_test) |
| """ |
| |
| (x_train, _), (x_test, _) = mnist.load_data() |
| |
| |
| x_train = x_train.astype('float32') / 255.0 |
| x_test = x_test.astype('float32') / 255.0 |
| |
| |
| x_train = np.reshape(x_train, (len(x_train), 28, 28, 1)) |
| x_test = np.reshape(x_test, (len(x_test), 28, 28, 1)) |
| |
| return (x_train, x_train), (x_test, x_test) |
|
|
|
|
| def add_noise(images, noise_factor=0.5): |
| """ |
| Add Gaussian noise to images |
| |
| Gaussian noise is random noise with normal distribution. |
| This simulates real-world image corruption. |
| |
| Args: |
| images: Clean images array |
| noise_factor: Amount of noise to add (default: 0.5) |
| |
| Returns: |
| Noisy images clipped to valid range [0, 1] |
| """ |
| |
| noise = np.random.normal(loc=0.0, scale=1.0, size=images.shape) |
| |
| |
| noisy_images = images + noise_factor * noise |
| |
| |
| noisy_images = np.clip(noisy_images, 0.0, 1.0) |
| |
| return noisy_images |
|
|