{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Restricted Boltzmann Machine using quantum annealing on D-wave's QPU" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Imports" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import timeit\n", "import matplotlib.pyplot as plt\n", "from tqdm import tqdm_notebook as tqdm\n", "\n", "from qrbm.MSQRBM import MSQRBM\n", "from qrbm.classicalRBM import classicalRBM\n", "\n", "\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline \n", "plt.rcParams['image.cmap'] = 'gray'\n", "\n", "import pandas as pd\n", "\n", "from skimage import data, color\n", "from skimage.transform import rescale, resize, downscale_local_mean\n", "from skimage import img_as_bool\n", "\n", "import cv2 as cv\n", "\n", "import random" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Presets\n", "\n", "Here you can set hyperparameters for learning:\n", "\n", " - digits: list of digits to train on\n", " - THRESHOLD: how bright parts of image become 1 (darker become 0)\n", " - n_hidden: number of neurons in hidden layer\n", " - qpu: whether to use real D-wave's qpu (requires [setup](https://docs.ocean.dwavesys.com/en/stable/overview/sapi.html)) or a local simulator\n", " - epochs: number of epochs\n", " - lr: learning rate\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "image_height = 28\n", "image_width = 28\n", "\n", "# images will be flattened\n", "len_x = image_height * image_width\n", "len_y = 0\n", "\n", "digits = [0, 1]\n", "THRESHOLD = 100\n", "n_hidden = 30\n", "qpu = False\n", "epochs = 1000\n", "lr = 0.1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## reading dataset" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": false }, "outputs": [], "source": [ "mnist_dataset = pd.read_csv('./data/mnist_train.csv')\n", "mnist_test = pd.read_csv('./data/mnist_test.csv')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## prepare train and test set" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "scrolled": true }, "outputs": [], "source": [ "X_train = mnist_dataset.values[:,1:]\n", "X_train2 = mnist_dataset.values[:,:]\n", "\n", "X_test = mnist_test.values[:,1:]\n", "X_test2 = mnist_test.values[:,:]\n", "\n", "# print(mnist_dataset.values[:,0])\n", "X_train3 = []\n", "X_test3 = []\n", "\n", "for digit in digits:\n", " X_train3.append(mnist_dataset.values[np.where(mnist_dataset.values[:,0] == digit), 1:][0])\n", " X_test3.append(mnist_test.values[np.where(mnist_test.values[:,0] == digit), 1:][0])\n", "# X_train3 = mnist_dataset.values[np.where(mnist_dataset.values[:,0] == 0), 1:]\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "imgs = []\n", "imgs_test = []\n", "for digit_index in range(len(digits)):\n", " imgs.append(np.resize(X_train3[digit_index], (len(X_train3[digit_index]), 28, 28)) / 255)\n", " imgs_test.append(np.resize(X_test3[digit_index], (len(X_test3[digit_index]), 28, 28)) / 255)\n", " \n", "plt.imshow(imgs[0][0])\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## resizing images" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "images_resized = []\n", "images_resized_test = []\n", "for digit_index in range(len(digits)):\n", " images_resized.append([resize(img, (image_width, image_height), anti_aliasing=True) for img in imgs[digit_index]])\n", " images_resized_test.append([resize(img, (image_width, image_height), anti_aliasing=True) for img in imgs_test[digit_index]])\n", "\n", " # images_resized = [resize(img, (image_width, image_height), anti_aliasing=True) for img in imgs]\n", "\n", "plt.imshow(images_resized[0][0])\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## normalizing images" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "images_normalized = []\n", "images_normalized_test = []\n", "\n", "for digit_index in range(len(digits)):\n", " images_normalized.append([cv.normalize(image_resized, image_resized, 0, 255, cv.NORM_MINMAX) for image_resized in images_resized[digit_index]])\n", " images_normalized_test.append([cv.normalize(image_resized, image_resized, 0, 255, cv.NORM_MINMAX) for image_resized in images_resized_test[digit_index]])\n", "\n", " # images_normalized = [cv.normalize(image_resized, image_resized, 0, 255, cv.NORM_MINMAX) for image_resized in images_resized]\n", "\n", "plt.imshow(images_normalized[0][0])\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## converting to binary" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "data = []\n", "data_test = []\n", "for digit_index in range(len(digits)):\n", " data.append([np.where(image_resized > THRESHOLD, 1, 0) for image_resized in images_resized[digit_index]])\n", " data_test.append([np.where(image_resized > THRESHOLD, 1, 0) for image_resized in images_resized_test[digit_index]])\n", " \n", "# data = [np.where(image_resized > THRESHOLD, 1, 0) for image_resized in images_resized]\n", "\n", "plt.imshow(data[0][0])\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## flattening the image" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n" ] } ], "source": [ "input_data = []\n", "input_data_test = []\n", "for digit_index in range(len(digits)):\n", " input_data.append([x.flatten().tolist() for x in data[digit_index]])\n", " input_data_test.append([x.flatten().tolist() for x in data_test[digit_index]])\n", " \n", "print(input_data[0][0])" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "result_picture_tab = []\n", "for digit_index in range(len(digits)):\n", " result_picture_tab.append(np.mean(input_data_test[digit_index], axis = 0))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## shuffling the training data" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "for digit in digits:\n", " flat_input_data = [item for sublist in input_data for item in sublist]\n", " flat_input_data_test = [item for sublist in input_data_test for item in sublist]\n", "\n", "random.shuffle(flat_input_data)\n", "random.shuffle(flat_input_data_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## training" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "bm = MSQRBM(n_visible=len_x, n_hidden=n_hidden, qpu=qpu)\n", "bm.image_height = image_height\n", "bm.tqdm = tqdm\n", "bm.result_picture_tab = result_picture_tab" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "scrolled": true }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "1e0f563b623b44d7a6e5dd8dac74098a", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/1000 [00:00<?, ?it/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "bm.train(flat_input_data, len_x, len_y, epochs = epochs, lr = lr, lr_decay = 0.1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### See random sampling results" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "eval: 63.79137130362349\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOcAAAD+CAYAAADBLRJzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAAIj0lEQVR4nO3dXYxcZR3H8e8fSrFYNKkisZCUUKpRwDQmSkRNDBLQCMFL4oUWExPFqBcYi0YJwRcSRVvjSzBqvJCIqRLjywVBKImCVg0aY9ALlCKNaKVtCi0CYvt4cZ4N0+3sdmHbnV93v5+kYfacOec5MznfOWfmMLvVWkNSnhMmvQGSxjNOKZRxSqGMUwplnFIo45RCGWeQqvpAVe2sqv1V9ZJJb48ma0nEWVUPVdXFk96O2VTVScCXgEtaaytba7sXePwNVXXPUVrXMXm+q+r6qrrlaK831ZKI8zhxOvAC4P5xM6tq2cJujiautbbo/wEPARf32xuAe4FNwF7gQeDCPn0H8G/gPSPLvgP4A/B4n3/9tHW/G/g7sBv41LSxTgCuBf7W528BVo3ZvlcATwAN2A9s7dMb8EHgAWB7n/Y+4K/AHuAnwOqR9TTg6n7/fcCngbXAr/r2bwGWjxn/VcBTwIE+/t4+/WTgJuBhYCdwM7Ciz3sp8LP+HO4Bftkf73eBg8CTfV0fGzPe2GX7vNXAbcCjwHbgw33624D/As/09f5x0vvVMd9vJ70BC/IgD4/zf8BVwInAZ/rO97W+M17Sd+yV/f5vAc7vO95r+k76zj7v1X1HeROwvO/Iz4yM9RFgG3BmX/c3gFtn2MazelzLRqY14OfAKmAFcBGwC3htX99XgF9Mu/+PgRcB5wJPA3cBZwMvBv7MyAvPtPE3APdMm7aJ4QVgFXAq8FPgxj7vxh7rSf3fm4Ga/nzPMNbYZftzfB9wXX8+z2Z48by0L3c9cMuk96cF228nvQEL8iAPj/OBkXnn95369JFpu4H1M6xrM7Cp375uNDbgFIZX96mx/gK8dWT+y3u8y8asd6Y4Lxr5+dvA50d+XtnXd9bI/d84Mv8+YOPIz18ENs/wuA6Js8fyBLB2ZNobePYIfkN/IThntud7hrHGLgtcADw8bdrHge/020sqzqX6nnPnyO0nAVpr06etBKiqC6rq7qp6tKoeA97PcFoGwynYjqmFWmv/YQh7yhrgR1W1t6r2MsR6gOH95VztGLm9muEUemq8/X28M2Z5bGMf1xycxvBic9/I9t/epwN8geH0+o6qerCqrp3jemdbdg2wemq8PuYneG7P16LhhwxH9j3gq8DbW2tPVdVmno3zn8Arp+5YVSuA0UsgO4D3ttbuncf4o18beoRhB54a74V9vH/MY/3jxoHh9PlJ4NzW2mHrb63tA64Brqmq84CtVfW71tpdY9Y1p2UZnq/trbV1c9zGRW2pHjmfi1OBPT3M1wPvGpn3Q+DyqrqwqpYznHbVyPybgc9W1RqAqjqtqq6Yx7bcClxVVeur6mTgc8BvWmsPzWOdU3YCZ/bHQWvtIPBNYFNVvQygqs6oqkv77cuq6pyqKuAxhjOCgyPrOnumgWZZ9rfAvqraWFUrqurEqjqvql43st6zqmpJ7LdL4kHO09XADVW1j+E95papGa21+4EPAd9nOIruZ/i09+l+ly8zfKByR19+G8P7queltXYnwyfCt/Xx1gJXPt/1TbOV4TLOv6pqV5+2keH0c1tVPQ7cybNnCuv6z/uBXwNfb63d3efdCHyyn5p+dMxYY5dtrR0ALgPWM3xSuwv4FsOHWQA/6P/dXVW/n/9Dzjb16ZqOgqpayXB5YF1rbfuEN0fHOY+c81RVl1fVKf39303Anxg+rZTmxTjn7wqGD2oeYThdu7J5OqKjwNNaKZRHTimUcUqhjFMKZZxSKOOUQhmnFMo4pVDGKYWa9StjVeX/oSAdY621GjfdI6cUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwo1658A1MJrbfa/ulg19q/FaRHyyCmFMk4plHFKoYxTCmWcUijjlEIZpxTK65zHGa+DLh0eOaVQximFMk4plHFKoYxTCmWcUijjlEIZpxTKOKVQximFMk4plHFKoYxTCmWcUijjlEIZpxTKOKVQximFMk4plHFKoYxTCmWcUijjlEIZpxTKOKVQximFMk4plHFKoYxTCmWcUijjlEIZpxTKOKVQximFMk4plHFKoYxTCmWcUijjlEIZpxTKOKVQximFMk4plHFKoYxTCmWcUqhlk94AHaqqZp3fWpvX/COtXzk8ckqhjFMKZZxSKOOUQhmnFMo4pVDGKYUyTimUcUqhjFMKZZxSKOOUQhmnFMo4pVDGKYUyTimUcUqhjFMKZZxSKOOUQhmnFMo4pVDGKYUyTimUcUqhjFMKZZxSKOOUQhmnFMo4pVDGKYUyTimUcUqhjFMKZZxSKOOUQhmnFMo4pVDLJr0BWlittVnnV9UCbYmOxCOnFMo4pVDGKYUyTimUcUqhjFMKZZxSKOOUQhmnFMo4pVDGKYUyTimUcUqhjFMKZZxSKOOUQhmnFMo4pVDGKYUyTimUcUqhjFMK5a/G1Jz5azUXlkdOKZRxSqGMUwplnFIo45RCGacUyjilUF7n1CGOdC1TC8cjpxTKOKVQximFMk4plHFKoYxTCuWllOPMkb6W5aWQxcMjpxTKOKVQximFMk4plHFKoYxTCmWcUiivc2rO/NWXC8sjpxTKOKVQximFMk4plHFKoYxTCmWcUijjlEIZpxTKOKVQximFMk4plHFKoYxTCmWcUii/z7nI+J3LxcMjpxTKOKVQximFMk4plHFKoYxTCmWcUijjlEIZpxTKOKVQximFMk4plHFKoYxTCmWcUijjlEIZpxTKOKVQximFMk4plHFKoYxTCmWcUijjlEIZpxTKOKVQximFMk4plHFKoYxTClWttUlvg6QxPHJKoYxTCmWcUijjlEIZpxTKOKVQ/wfIxtEFkLMiXAAAAABJRU5ErkJggg==\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "eval: 41.41975353684333\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOcAAAD+CAYAAADBLRJzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAAIeklEQVR4nO3dXahlZR3H8e9fR21sLLBMGgXFcYpSQ4KSrCBMtEixS+miNAjKqC6MxqJksBehrJnoBaOiiyTDkujlQkxHKC0rpoiwLizHHLImHRmdMTXTp4v1HFye2ec44z5z9m/mfD8g7rPWXs+z9mZ991pnLw9Waw1JeQ6b9Q5Imsw4pVDGKYUyTimUcUqhjFMKZZxBquoDVbWjqvZU1UtmvT+arRURZ1XdW1Xnzno/FlNVRwBfAs5rra1pre1c5vkvqarbl2isA/J+V9XGqrpuqcdNtSLiPEgcD7wAuGvSyqpatby7o5lrrR3y/wD3Auf2x5cAdwCbgF3APcDZffl24N/Ae0bbvgP4A/BIX79x3tjvBv4O7AQ+NW+uw4ArgL/19TcAx07Yv1cAjwIN2ANs6csb8EHgbmBbX/Y+4K/AQ8BPgLWjcRpwWX/+buDTwDrgV33/bwCOnDD/q4DHgaf6/Lv68qOAa4D7gB3AtcDqvu6lwM/6e/gQ8Mv+er8LPA081sf62IT5Jm7b160FbgQeALYBH+7L3wb8F3iyj/vHWR9XB/y4nfUOLMuL3DvO/wGXAocDn+kH39f6wXheP7DX9Oe/BTijH3iv6QfpO/u6V/cD5U3Akf1AfnI010eAO4ET+9jfAK5fYB9P7nGtGi1rwM+BY4HVwDnAg8Br+3hfAX4x7/k/Bl4EnAY8AdwKnAK8GPgzow+eefNfAtw+b9kmhg+AY4FjgJ8CV/d1V/dYj+j/vBmo+e/3AnNN3La/x1uBK/v7eQrDh+f5fbuNwHWzPp6W7bid9Q4sy4vcO867R+vO6Af18aNlO4EzFxhrM7CpP75yHBtwNMOn+9xcfwHeOlr/8h7vqgnjLhTnOaOfvw18fvTzmj7eyaPnv3G0fiuwYfTzF4HNC7yuZ8XZY3kUWDda9gaeOYNf1T8ITl3s/V5gronbAmcB981b9nHgO/3xiopzpf7OuWP0+DGA1tr8ZWsAquqsqrqtqh6oqoeB9zNclsFwCbZ9bqPW2n8Ywp5zEvCjqtpVVbsYYn2K4ffLfbV99HgtwyX03Hx7+nwnLPLaJr6ufXAcw4fN1tH+39SXA3yB4fL65qq6p6qu2MdxF9v2JGDt3Hx9zk+wf+/XIcMvGZ7b94CvAm9vrT1eVZt5Js5/Aq+ce2JVrQbGt0C2A+9trd0xxfzjPxu6n+EAnpvvhX2+f0wx/qR5YLh8fgw4rbW21/ittd3A5cDlVXU6sKWqftdau3XCWPu0LcP7ta21tn4f9/GQtlLPnPvjGOChHubrgXeN1v0QuLCqzq6qIxkuu2q0/lrgs1V1EkBVHVdVF02xL9cDl1bVmVV1FPA54DettXunGHPODuDE/jporT0NfBPYVFUvA6iqE6rq/P74gqo6taoKeJjhiuDp0VinLDTRItv+FthdVRuqanVVHV5Vp1fV60bjnlxVK+K4XREvckqXAVdV1W6G3zFvmFvRWrsL+BDwfYaz6B6Gb3uf6E/5MsMXKjf37e9k+L3qeWmt3cLwjfCNfb51wMXPd7x5tjDcxvlXVT3Yl21guPy8s6oeAW7hmSuF9f3nPcCvga+31m7r664GPtkvTT86Ya6J27bWngIuAM5k+Kb2QeBbDF9mAfyg/3tnVf1++pecbe7bNS2BqlrDcHtgfWtt24x3Rwc5z5xTqqoLq+ro/vvfNcCfGL6tlKZinNO7iOGLmvsZLtcubl6OaAl4WSuF8swphTJOKZRxSqGMUwplnFIo45RCGacUyjilUIv+yVhV+V8oSAdYa60mLffMKYUyTimUcUqhjFMKZZxSKOOUQhmnFMo4pVDGKYUyTimUcUqhjFMKZZxSKOOUQhmnFMo4pVDGKYUyTimUcUqhjFMKZZxSKOOUQhmnFMo4pVDGKYUyTimUcUqhjFMKZZxSKOOUQhmnFMo4pVDGKYUyTimUcUqhjFMKZZxSKOOUQq2a9Q5oabXWptq+qpZoTzQtz5xSKOOUQhmnFMo4pVDGKYUyTimUcUqhvM95kJn2PuY043sPdHl55pRCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqFWzXoHlKWqZr0L6jxzSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCrZr1Dmj/VNWi61try7QnOtA8c0qhjFMKZZxSKOOUQhmnFMo4pVDGKYXyPqeeZbH7pM91j1VLyzOnFMo4pVDGKYUyTimUcUqhjFMKZZxSKO9zHmL8e89Dh2dOKZRxSqGMUwplnFIo45RCGacUyjilUN7nXGH8m8yDh2dOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUqvxfwkmZPHNKoYxTCmWcUijjlEIZpxTKOKVQ/welbcsBaVCsQwAAAABJRU5ErkJggg==\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "eval: 26.30169186283452\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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nFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwq1ZNI7oGNTVbOub60t0J7oePPMKYUyTimUcUqhjFMKZZxSKOOUQhmnFMrvOfUss31PeqTvWDW/PHNKoYxTCmWcUijjlEIZpxTKOKVQximFMk4plHFKoYxTCmWcUijjlEIZpxTKOKVQximFMk4plHFKoYxTCmWcUijjlEIZpxTKOKVQximFMk4plHFKoYxTCmWcUijjlEIZpxTKOKVQximFMk4plHFKoYxTCmWcUijjlEIZpxTKOKVQSya9A5pfVTXr+tbaAu2J5sozpxTKOKVQximFMk4plHFKoYxTCmWcUii/51xkjvQ9qHJ45pRCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGMUwplnFIo45RCGacUyjilUMYphTJOKZRxSqGqtTbpfZA0hmdOKZRxSqGMUwplnFIo45RCGacU6v+toMf/CsrWDgAAAABJRU5ErkJggg==\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "eval: 27.94486366900192\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "eval: 78.94851416076634\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "for test in range(5):\n", " flat_input_data_test_img = np.reshape(flat_input_data_test[test], (image_width, image_height))\n", " plt.figure()\n", " plt.axis('off')\n", " plt.title(\"Image from test set\", y=1.03)\n", " plt.imshow(flat_input_data_test_img)\n", " plt.show()\n", " \n", " generated_pic = bm.generate(test_img = flat_input_data_test[test])\n", " evalutation = bm.evaluate(generated_pic, flat_input_data_test[test])\n", " print(\"evaluation: \", evaluation)\n", "# print(generated_pic)\n", " plt.figure()\n", " plt.axis('off')\n", " plt.title(\"Image reconstructed after training\", y=1.03)\n", " plt.imshow(np.array(generated_pic).reshape(image_height, -1))" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.6" } }, "nbformat": 4, "nbformat_minor": 2 }