{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "Lab 1 DNN Deployment.ipynb", "provenance": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "markdown", "source": [ "# Load the DNN model\n" ], "metadata": { "id": "up2NRZfBYnNg" } }, { "cell_type": "code", "source": [ "from tensorflow.keras.models import load_model\n", "new_model = load_model('./DNN_model.h5')" ], "metadata": { "id": "wsN0VwGEYqRP" }, "execution_count": 1, "outputs": [] }, { "cell_type": "markdown", "source": [ "## Data preparation" ], "metadata": { "id": "pg0vCLzpY_-E" } }, { "cell_type": "code", "source": [ "from skimage import io, transform\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import tensorflow as tf" ], "metadata": { "id": "cb8yhiZXZCCl" }, "execution_count": 2, "outputs": [] }, { "cell_type": "code", "source": [ "images =['./im1.bmp', './im2.bmp','./im3.bmp','./im4.bmp']\n", "w=28\n", "h=28\n", "def read_one_image(path):\n", " img = io.imread(path)\n", " img = transform.resize(img,(w,h))\n", " return (1-img) \n", "image = np.array([read_one_image(images[0]) , read_one_image(images[1]) ,read_one_image(images[2]) ,read_one_image(images[3]) ])\n", "print(image[0])" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "JLGBtbOQZWlu", "outputId": "ad97db6f-3a14-49e9-860a-a2237b0ded66" }, "execution_count": 8, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "[[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", " [0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", " [0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", " [0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", " [0.00000000e+00 0.00000000e+00 3.92156863e-03 3.92156863e-03\n", " 7.84313725e-03 3.92156863e-03 3.92156863e-03 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", " [0.00000000e+00 0.00000000e+00 3.92156863e-03 1.28921569e-01\n", " 4.74054622e-01 1.57177871e-01 3.92156863e-03 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", " [0.00000000e+00 0.00000000e+00 3.92156863e-03 3.60294118e-01\n", " 9.81722689e-01 6.29621849e-01 1.84873950e-02 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", " [0.00000000e+00 0.00000000e+00 3.92156863e-03 3.87009804e-01\n", " 9.91561625e-01 6.34453782e-01 1.49509804e-02 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", " [0.00000000e+00 0.00000000e+00 3.92156863e-03 2.85539216e-01\n", " 9.77345938e-01 8.00525210e-01 4.17016807e-02 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", " [0.00000000e+00 0.00000000e+00 3.92156863e-03 2.65196078e-01\n", " 9.73249300e-01 8.20658263e-01 4.32773109e-02 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 3.39635854e-03\n", " 3.92156863e-03 3.92156863e-03 3.92156863e-03 3.60644258e-03\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", " [0.00000000e+00 0.00000000e+00 3.92156863e-03 3.42892157e-01\n", " 9.89460784e-01 8.20658263e-01 4.32773109e-02 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 3.92156863e-03\n", " 6.03641457e-02 2.44362745e-01 7.24089636e-02 3.92156863e-03\n", " 1.43557423e-03 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", " [0.00000000e+00 0.00000000e+00 3.92156863e-03 3.46568627e-01\n", " 9.91456583e-01 8.04621849e-01 4.17016807e-02 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 3.92156863e-03\n", " 3.15546218e-01 9.54761905e-01 6.44397759e-01 3.80952381e-02\n", " 3.92156863e-03 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", " [0.00000000e+00 0.00000000e+00 3.92156863e-03 3.11519608e-01\n", " 9.81407563e-01 7.52591036e-01 3.38235294e-02 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 3.92156863e-03\n", " 2.41456583e-01 9.64425770e-01 9.43662465e-01 1.96218487e-01\n", " 3.92156863e-03 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", " [0.00000000e+00 0.00000000e+00 3.92156863e-03 1.87745098e-01\n", " 9.57037815e-01 8.04796919e-01 4.17016807e-02 2.73109244e-03\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 3.92156863e-03\n", " 7.45448179e-02 8.52871148e-01 9.96988796e-01 5.42577031e-01\n", " 1.25350140e-02 3.18627451e-03 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", " [0.00000000e+00 0.00000000e+00 3.92156863e-03 1.34313725e-01\n", " 9.32983193e-01 8.81547619e-01 9.32072829e-02 2.73109244e-03\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 2.87114846e-03\n", " 1.90476190e-02 6.01435574e-01 9.98144258e-01 8.53221289e-01\n", " 1.05392157e-01 3.92156863e-03 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", " [0.00000000e+00 0.00000000e+00 3.01120448e-03 1.41666667e-01\n", " 9.37079832e-01 9.11449580e-01 1.18767507e-01 2.73109244e-03\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 3.92156863e-03 2.10504202e-01 9.53081232e-01 9.87114846e-01\n", " 4.45098039e-01 8.82352941e-03 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", " [0.00000000e+00 0.00000000e+00 3.01120448e-03 7.50000000e-02\n", " 8.65336134e-01 9.40826331e-01 1.46288515e-01 4.51680672e-03\n", " 1.33753501e-02 2.25140056e-02 1.17647059e-02 1.37254902e-02\n", " 1.17647059e-02 5.48669468e-02 7.97128852e-01 1.00000000e+00\n", " 7.64845938e-01 3.70098039e-02 2.03081232e-03 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", " [0.00000000e+00 0.00000000e+00 3.01120448e-03 3.72549020e-02\n", " 7.70518207e-01 9.63935574e-01 2.59733894e-01 1.87920168e-01\n", " 5.17121849e-01 6.33998599e-01 5.09558824e-01 5.48599440e-01\n", " 4.90301120e-01 3.33158263e-01 6.21008403e-01 9.96708683e-01\n", " 8.87289916e-01 1.05147059e-01 3.92156863e-03 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", " [0.00000000e+00 0.00000000e+00 0.00000000e+00 2.32843137e-02\n", " 6.91771709e-01 9.83298319e-01 7.36869748e-01 9.16421569e-01\n", " 9.92156863e-01 9.88305322e-01 9.94117647e-01 9.96078431e-01\n", " 9.92471989e-01 9.82457983e-01 9.86589636e-01 1.00000000e+00\n", " 9.50105042e-01 2.06372549e-01 3.92156863e-03 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", " [0.00000000e+00 0.00000000e+00 0.00000000e+00 1.07843137e-02\n", " 6.01365546e-01 1.00000000e+00 9.99229692e-01 9.32598039e-01\n", " 6.27100840e-01 4.11379552e-01 5.01960784e-01 5.05882353e-01\n", " 5.85924370e-01 7.40651261e-01 8.06337535e-01 9.66526611e-01\n", " 9.52591036e-01 2.14705882e-01 3.92156863e-03 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", " [0.00000000e+00 0.00000000e+00 0.00000000e+00 3.92156863e-03\n", " 3.28151261e-01 8.91771709e-01 7.82808123e-01 2.28116246e-01\n", " 3.08123249e-02 9.80392157e-03 7.84313725e-03 1.17647059e-02\n", " 1.70168067e-02 2.94117647e-02 6.95028011e-02 6.72373950e-01\n", " 9.83753501e-01 3.58088235e-01 4.93697479e-03 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", " [0.00000000e+00 0.00000000e+00 0.00000000e+00 3.92156863e-03\n", " 2.52100840e-02 1.07107843e-01 9.97549020e-02 7.24789916e-03\n", " 3.92156863e-03 9.45378151e-04 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 1.96078431e-03 6.51260504e-03 4.34453782e-01\n", " 9.90196078e-01 5.50980392e-01 1.10294118e-02 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", " [0.00000000e+00 0.00000000e+00 0.00000000e+00 1.71568627e-03\n", " 1.96078431e-03 3.92156863e-03 3.92156863e-03 3.92156863e-03\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 4.02661064e-03 2.55217087e-01\n", " 9.69187675e-01 7.42156863e-01 3.30182073e-02 1.61064426e-03\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", " [0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 3.92156863e-03 1.35644258e-01\n", " 9.14600840e-01 8.72794118e-01 9.48529412e-02 3.92156863e-03\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", " [0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 3.92156863e-03 4.56232493e-02\n", " 7.72478992e-01 9.60539216e-01 2.62184874e-01 4.72689076e-03\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", " [0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 2.10084034e-04 8.40336134e-03\n", " 4.47198880e-01 9.82843137e-01 6.55847339e-01 2.26890756e-02\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", " [0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 3.92156863e-03\n", " 1.09418768e-01 7.89460784e-01 6.28991597e-01 2.26890756e-02\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", " [0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 3.92156863e-03\n", " 7.45798319e-03 7.91666667e-02 6.02591036e-02 3.92156863e-03\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]\n" ] } ] }, { "cell_type": "markdown", "source": [ "## Visualize the prediction result" ], "metadata": { "id": "0zGkPIdXbSMc" } }, { "cell_type": "code", "source": [ "plt.figure()\n", "pred= np.argmax(new_model.predict(image.reshape(4,784)) , axis=-1)\n", "print(pred)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 52 }, "id": "zFGK83fmbXcp", "outputId": "438dda59-2117-48dd-ba5f-fcd4d1702bb2" }, "execution_count": 9, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "[5 2 0 8]\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "
" ] }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "for i in range(4):\n", " plt.subplot(2,2,i+1)\n", " plt.imshow(image[i])\n", " plt.title(\"pred:\"+str(pred[i]))\n", " plt.axis('off')\n", "plt.show()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 264 }, "id": "HofwYAWtb5CX", "outputId": "7af61fa4-2ad4-4c98-e363-4f59d0a8274c" }, "execution_count": 10, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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\n" }, "metadata": { "needs_background": "light" } } ] } ] }