{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport numpy as np\nimport pandas as pd\nimport tensorflow as tf\n\nfrom sklearn.metrics import accuracy_score, precision_score, recall_score\nfrom sklearn.model_selection import train_test_split\nfrom tensorflow.keras import layers, losses\nfrom tensorflow.keras.datasets import cifar10\nfrom tensorflow.keras.models import Model","metadata":{"execution":{"iopub.status.busy":"2023-05-13T18:59:02.447606Z","iopub.execute_input":"2023-05-13T18:59:02.447937Z","iopub.status.idle":"2023-05-13T18:59:10.306663Z","shell.execute_reply.started":"2023-05-13T18:59:02.447912Z","shell.execute_reply":"2023-05-13T18:59:10.305340Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"(x_train, _), (x_test, _) = cifar10.load_data()","metadata":{"execution":{"iopub.status.busy":"2023-05-13T18:59:10.308089Z","iopub.execute_input":"2023-05-13T18:59:10.308644Z","iopub.status.idle":"2023-05-13T18:59:18.206102Z","shell.execute_reply.started":"2023-05-13T18:59:10.308620Z","shell.execute_reply":"2023-05-13T18:59:18.205207Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def rgb_to_gray(image):\n    gray_image = np.dot(image[...,:3], [0.2989, 0.5870, 0.1140])\n    return gray_image","metadata":{"execution":{"iopub.status.busy":"2023-05-13T18:59:18.206893Z","iopub.execute_input":"2023-05-13T18:59:18.207104Z","iopub.status.idle":"2023-05-13T18:59:18.212397Z","shell.execute_reply.started":"2023-05-13T18:59:18.207085Z","shell.execute_reply":"2023-05-13T18:59:18.211377Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Convert images to grayscale\nx_train_gray = np.array([rgb_to_gray(image) for image in x_train])\nx_test_gray = np.array([rgb_to_gray(image) for image in x_test])\n\n# Normalize grayscale images\nx_train_gray = x_train_gray.astype('float32') / 255.\nx_test_gray = x_test_gray.astype('float32') / 255.\n\n# Reshape grayscale images to have a single channel\nx_train_gray = x_train_gray.reshape(x_train_gray.shape + (1,))\nx_test_gray = x_test_gray.reshape(x_test_gray.shape + (1,))","metadata":{"execution":{"iopub.status.busy":"2023-05-13T18:59:22.313339Z","iopub.execute_input":"2023-05-13T18:59:22.313751Z","iopub.status.idle":"2023-05-13T18:59:23.848595Z","shell.execute_reply.started":"2023-05-13T18:59:22.313724Z","shell.execute_reply":"2023-05-13T18:59:23.847618Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Normalize color images\nx_train = x_train.astype('float32') / 255.\nx_test = x_test.astype('float32') / 255.","metadata":{"execution":{"iopub.status.busy":"2023-05-13T19:10:03.255101Z","iopub.execute_input":"2023-05-13T19:10:03.255543Z","iopub.status.idle":"2023-05-13T19:10:03.450859Z","shell.execute_reply.started":"2023-05-13T19:10:03.255512Z","shell.execute_reply":"2023-05-13T19:10:03.450018Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print (x_train.shape)\nprint (x_test.shape)\n\nprint(x_train_gray.shape)\nprint(x_test_gray.shape)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"latent_dim = 64\n\nclass Autoencoder(Model):\n  def __init__(self, latent_dim):\n    super(Autoencoder, self).__init__()\n    self.latent_dim = latent_dim\n    self.encoder = tf.keras.Sequential([\n      layers.Input(shape=(32, 32, 1)), # Input shape adjusted for grayscale images\n      layers.Flatten(),\n      layers.Dense(128, activation='relu'),\n      layers.Dense(latent_dim, activation='relu'),\n    ])\n    self.decoder = tf.keras.Sequential([\n      layers.Dense(128, activation='relu'),\n      layers.Dense(32*32*3, activation='sigmoid'), # Output shape adjusted for color images\n      layers.Reshape((32, 32, 3)) # Output shape adjusted for color images\n    ])\n\n  def call(self, x):\n    encoded = self.encoder(x)\n    decoded = self.decoder(encoded)\n    return decoded\n\nautoencoder = Autoencoder(latent_dim)","metadata":{"execution":{"iopub.status.busy":"2023-05-13T19:03:14.690773Z","iopub.execute_input":"2023-05-13T19:03:14.691174Z","iopub.status.idle":"2023-05-13T19:03:14.866397Z","shell.execute_reply.started":"2023-05-13T19:03:14.691130Z","shell.execute_reply":"2023-05-13T19:03:14.864923Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"autoencoder.compile(optimizer='adam', loss=losses.MeanSquaredError())","metadata":{"execution":{"iopub.status.busy":"2023-05-13T19:03:18.533457Z","iopub.execute_input":"2023-05-13T19:03:18.533829Z","iopub.status.idle":"2023-05-13T19:03:18.550472Z","shell.execute_reply.started":"2023-05-13T19:03:18.533803Z","shell.execute_reply":"2023-05-13T19:03:18.549789Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"autoencoder.fit(x_train_gray, x_train,\n                epochs=25,\n                shuffle=True,\n                validation_data=(x_test_gray, x_test))","metadata":{"execution":{"iopub.status.busy":"2023-05-13T19:03:59.026538Z","iopub.execute_input":"2023-05-13T19:03:59.026879Z","iopub.status.idle":"2023-05-13T19:04:56.210759Z","shell.execute_reply.started":"2023-05-13T19:03:59.026852Z","shell.execute_reply":"2023-05-13T19:04:56.209579Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"encoded_imgs = autoencoder.encoder(x_test_gray).numpy()\ndecoded_imgs = autoencoder.decoder(encoded_imgs).numpy()","metadata":{"execution":{"iopub.status.busy":"2023-05-13T19:05:45.918312Z","iopub.execute_input":"2023-05-13T19:05:45.918651Z","iopub.status.idle":"2023-05-13T19:05:46.132057Z","shell.execute_reply.started":"2023-05-13T19:05:45.918622Z","shell.execute_reply":"2023-05-13T19:05:46.128221Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"n = 10\nplt.figure(figsize=(20, 10))\nfor i in range(n):\n  # display original image\n  ax = plt.subplot(3, n, i + 1)\n  plt.imshow(x_test[i])\n  plt.title(\"Original\")\n  plt.gray()\n  ax.get_xaxis().set_visible(False)\n  ax.get_yaxis().set_visible(False)\n\n  # display grayscale image\n  ax = plt.subplot(3, n, i + 1 + n)\n  plt.imshow(x_test_gray[i].reshape(32, 32), cmap='gray')\n  plt.title(\"Grayscale\")\n  plt.gray()\n  ax.get_xaxis().set_visible(False)\n  ax.get_yaxis().set_visible(False)\n\n  # display reconstruction\n  ax = plt.subplot(3, n, i + 1 + 2 * n)\n  plt.imshow(decoded_imgs[i])\n","metadata":{"execution":{"iopub.status.busy":"2023-05-13T19:05:48.635973Z","iopub.execute_input":"2023-05-13T19:05:48.638239Z","iopub.status.idle":"2023-05-13T19:06:44.720732Z","shell.execute_reply.started":"2023-05-13T19:05:48.638204Z","shell.execute_reply":"2023-05-13T19:06:44.719741Z"},"trusted":true},"execution_count":null,"outputs":[]}]}