Skip to content

Instantly share code, notes, and snippets.

@deven96
Last active May 17, 2019 22:25
Show Gist options
  • Save deven96/32f0fb9555c776d77715890016a490d2 to your computer and use it in GitHub Desktop.
Save deven96/32f0fb9555c776d77715890016a490d2 to your computer and use it in GitHub Desktop.
MultiDigitClassification
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "MultiDigitClassification",
"version": "0.3.2",
"provenance": [],
"collapsed_sections": [],
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"accelerator": "TPU"
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/deven96/32f0fb9555c776d77715890016a490d2/multidigitclassification.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "kRqj4WlSR7D9",
"colab_type": "code",
"colab": {}
},
"source": [
"import random\n",
"import numpy as np\n",
"import tensorflow as tf\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"\n",
"from scipy import misc\n",
"from PIL import Image\n",
"from keras.datasets import mnist\n",
"from keras.utils import np_utils\n",
"from keras.preprocessing import image as imghandler\n",
"from keras.models import Sequential, Model\n",
"from keras.layers import Dense, Dropout, Activation, Flatten, Input, Convolution2D, MaxPooling2D"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "dV0C0q8hUSDt",
"colab_type": "code",
"colab": {}
},
"source": [
"# CONSTANTS\n",
"\n",
"random.seed(70)\n",
"IMAGE_SIZE = (64, 64)\n",
"MNIST_IMAGE = (28, 28)\n",
"DIGIT_SEQUENCE = 6\n",
"SPACE_CHARACTER = 10\n",
"# possible characters are 0-10\n",
"POSSIBLE_CHARACTERS = 11\n",
"(X_train, Y_train), (X_test, Y_test) = mnist.load_data()"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "SLTLe4OkVnWh",
"colab_type": "code",
"outputId": "b179de0a-d85e-4598-e581-c943d8f72aa0",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 286
}
},
"source": [
"# show single image\n",
"plt.figure()\n",
"plt.imshow(X_train[0], cmap='gray')"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7f84f5e0ce10>"
]
},
"metadata": {
"tags": []
},
"execution_count": 24
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab_type": "code",
"id": "x839W8vzloE_",
"colab": {}
},
"source": [
"###\n",
"# HELPER FUNCTIONS \n",
"#\n",
"###\n",
"\n",
"\n",
"def create_synset_data(data, label, datasize):\n",
" \"\"\"\n",
" Create a synthetic data of images and labels\n",
" \"\"\"\n",
" # create a synthetic dataset to be filled\n",
" synset = np.ndarray(shape=(datasize, IMAGE_SIZE[0], IMAGE_SIZE[1]), dtype=np.float32)\n",
" synlabels = []\n",
" # declare a space image to use\n",
" space_image = np.zeros(shape=MNIST_IMAGE)\n",
" \n",
" for i in range(0, datasize):\n",
" num_digits = random.randint(1, DIGIT_SEQUENCE)\n",
" s_indices = [random.randint(0, len(data)-1) for i in range(0, num_digits)]\n",
" # hstack the random selected images to get a new image\n",
" new_image = np.hstack([data[index] for index in s_indices])\n",
" # create the label\n",
" new_label = [label[index] for index in s_indices]\n",
"\n",
" # if digits are not up to digit sequence, append space character\n",
" for j in range(0, DIGIT_SEQUENCE-num_digits):\n",
" # append space image to the character\n",
" new_image = np.hstack([new_image, space_image])\n",
" new_label.append(SPACE_CHARACTER)\n",
" # resize the image\n",
" new_image = misc.imresize(new_image, IMAGE_SIZE)\n",
" # append image to synset\n",
" synset[i, :, :] = new_image\n",
" # append the label\n",
" synlabels.append(tuple(new_label))\n",
" return synset, synlabels\n",
"\n",
"def convert_labels(labels):\n",
" \"\"\"\n",
" Converts labels to keras standard for multiple label cases\n",
" \"\"\"\n",
" label_set = list()\n",
" \n",
" for i in range(0, DIGIT_SEQUENCE):\n",
" # create several arrays of shape (len(labels), 11) to represent every output digit\n",
" label_set.append(np.ndarray(shape=(len(labels), POSSIBLE_CHARACTERS)))\n",
" # label is a tuple of size (DIGIT_SEQUENCE)\n",
" for index, label in enumerate(labels):\n",
" for i in range(0, len(label_set)):\n",
" label_set[i][index, :] = np_utils.to_categorical(label[i], POSSIBLE_CHARACTERS)\n",
" return label_set\n",
"\n",
"def predtostr(predictions):\n",
" \"\"\"\n",
" Converts the numpy array into actual labels\n",
" \"\"\"\n",
" predstr = ''\n",
" predarr = list()\n",
" for i in predictions:\n",
" if np.argmax(i) == 10:\n",
" predstr += ' '\n",
" else:\n",
" predstr += str(np.argmax(i))\n",
" predarr.append(np.argmax(i))\n",
" return predstr, predarr\n",
"\n",
"def prep_data(img_data):\n",
" \"\"\"\n",
" Preps image data\n",
" \"\"\"\n",
" img_data = img_data.reshape(len(img_data), IMAGE_SIZE[0], IMAGE_SIZE[1], 1)\n",
" \n",
" # convert everything to floats\n",
" img_data = img_data.astype('float32')\n",
" # normalizes data to values between 0 and 1 so no need for batch norm\n",
" img_data /=255\n",
" \n",
" return img_data\n",
"\n",
"\n",
"def predict_single(model, image_path):\n",
" \"\"\"\n",
" Predict single image containing multiple digits\n",
" \"\"\"\n",
" # turn image to greyscale\n",
" img = Image.open(image_path).convert(\"L\")\n",
" plt.imshow(img, cmap='gray')\n",
" img = img.resize(IMAGE_SIZE)\n",
" img_array = imghandler.img_to_array(img)\n",
" # expand dimensions in the batch_size direction\n",
" img_array = np.expand_dims(img_array, axis=0)\n",
" return model.predict(img_array)\n",
"\n",
"def custom_accuracy(predictions, real_labels):\n",
" \"\"\"\n",
" Returns two accuracy values of individual digits and sequence accuracy\n",
" \"\"\"\n",
" ind_counter = 0\n",
" global_sequence = 0\n",
" \n",
" for i in range(0, len(predictions[0])):\n",
" sequence_counter = 0\n",
" for j in range(0, DIGIT_SEQUENCE):\n",
" if np.argmax(predictions[j][i]) == np.argmax(real_labels[j][i]):\n",
" ind_counter +=1\n",
" sequence_counter +=1\n",
" \n",
" if sequence_counter == DIGIT_SEQUENCE:\n",
" global_sequence +=1\n",
" # calculate individual and sequence accuracy\n",
" ind_acc = ind_counter/(DIGIT_SEQUENCE * len(predictions[0]))\n",
" glob_acc = global_sequence/ len(predictions[0])\n",
" \n",
" return ind_acc, glob_acc\n",
"\n"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "MJ5sM4rgVRJG",
"colab_type": "code",
"outputId": "711c0d2e-d1e4-4921-8475-685873ead09f",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 443
}
},
"source": [
"# get synset for training\n",
"syn_X_train, syn_Y_train = create_synset_data(X_train, Y_train, 80000)\n",
"syn_X_test, syn_Y_test = create_synset_data(X_test, Y_test, 15000)\n",
"train_labels = convert_labels(syn_Y_train)\n",
"test_labels = convert_labels(syn_Y_test)\n",
"train_images = prep_data(syn_X_train)\n",
"test_images = prep_data(syn_X_test)\n",
"print(f\"Label shapes are {np.shape(train_labels)}\")\n",
"ran_int = random.randint(0, 80000)\n",
"plt.imshow(syn_X_train[ran_int], cmap='gray')\n",
"for i in range(len(syn_Y_train[ran_int])):\n",
" print(f\"{np_utils.to_categorical(syn_Y_train[ran_int][i], 11)}\")"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:27: DeprecationWarning: `imresize` is deprecated!\n",
"`imresize` is deprecated in SciPy 1.0.0, and will be removed in 1.3.0.\n",
"Use Pillow instead: ``numpy.array(Image.fromarray(arr).resize())``.\n"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"Label shapes are (6, 80000, 11)\n",
"[0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]\n",
"[0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]\n",
"[0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]\n",
"[1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
"[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]\n",
"[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAP4AAAD8CAYAAABXXhlaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAGpdJREFUeJztnWtsVdeVx/8rECAJ4R1cgnm5mBDS\nEqAEkjbKA4YqySCQ2ihqU43QCIkvHSnVdNQkM9KoHc1I7Zc+PowqoabTfGhKQtoMiChNGUNKHiQN\nr4B5GGweAQdjXiYkTZMQ1ny4x9tr79rX177nnHtv9/8nWXedc/Y9Z/leL++19mMtUVUQQuLimkor\nQAjJHxo+IRFCwyckQmj4hEQIDZ+QCKHhExIhNHxCIqQswxeRB0SkRURaReSJtJQihGSLDHYBj4gM\nAXAYwDIApwC8DeCbqnogPfUIIVkwtIz3LgLQqqpHAUBE1gFYCaBPwxcRLhMkJGNUVfprU46rPxnA\nSXN8KjlHCKlyyunxS0JE1gBYk/VzCCGlU47htwOYYo7rk3MeqroWwFqArj4h1UI5rv7bABpFZIaI\nDAPwDQAb01GLEJIlg+7xVfWKiPwTgJcBDAHwS1Xdn5pmhJDMGPR03qAeRlefkMzJelSfEFKj0PAJ\niRAaPiERQsMnJEJo+IRECA2fkAih4RMSITR8QiKEhk9IhNDwCYkQGj4hEULDJyRCaPiEREjmGXgI\nGTdunJMbGhq8a7t373byZ599lptOscMen5AIoeETEiE0fEIihDE+yZyJEyc6eenSpd615uZmJzPG\nzw/2+IRECA2fkAihq1/jTJgwwTseM2aMky9cuODkixcveu3yTLJqdbr99tu9ayNGjHDyX/7yl9x0\nih32+IRECA2fkAih4RMSIYzxaxCRnnoJs2fP9q7dcccdTn711VedvGvXLq9dnjH+sGHDnDx5sl9Q\neeTIkU7u6urKTafY6bfHF5FfikiniDSbc+NEZLOIHElex2arJiEkTUpx9X8F4IHg3BMAmlS1EUBT\nckwIqRH6dfVVdZuITA9OrwRwXyI/DeAVAI+nqFdVYl3WG2+80cnXXnut18660Z988ol3zbqzg3W3\nravf2NjoXVuyZImTz58/7+S9e/d67UK9smTIkCFOtjv1AGDUqFG56UF6GOzgXp2qnk7kDgB1KelD\nCMmBsgf3VFWLVcEVkTUA1pT7HEJIegzW8M+IyCRVPS0ikwB09tVQVdcCWAvUXpnsa67xHaKbb77Z\nycuXL3dyfX291+7TTz91cltbm3dt3bp1Th7sSjXrOk+fPt27NmvWLCd/+ctfdvJLL73ktTt79uyg\nnj0Y7KrB8Heuq+txFg8cOJCbTrEzWFd/I4BVibwKwIZ01CGE5EEp03m/AbAdwC0ickpEVgP4IYBl\nInIEwN8lx4SQGqGUUf1v9nFpaR/nCSFVDlfuFcFOmwH+qrNHH33UyQsWLPDaffjhh07+4x//6F17\n4YUXnJxGjD916lTv2uc///le7x9Om+UZ41++fNnJH330kXftpptuyk0P0gPX6hMSITR8QiKkpl39\nsWP9LQILFy50cjjNtW3bNie3tLSUdP9wVZydwrPPPnr0qNfunXfecfLBgwdLetZAsCFIOOV4+PBh\nJ9uVgXPmzPHaWZ2z3rDzwQcfOPnEiRPeNbsCkuQHe3xCIoSGT0iE0PAJiZCajvHDnV4PPfSQk8P8\n7efOnXNyqTH+rbfe6h2vWLHCyTfccIOT33jjDa/d888/7+T333/fu5ZGPG1j/PB+Nk+9Hef4whe+\n4LV78cUXU9WpGHZ68+TJk941xviVgT0+IRFCwyckQmrC1beurc3RvmjRIq/dl770pV7bAX897dUX\nQ4f2fCThFJhdMbdjxw4nv/766147O50XutFXrlwpSY9i2N/F6gQAO3fudLJduReukAtXJaaNTU5i\ndy+eOXPGa2enRcPv6OrVqxlpR9jjExIhNHxCIqTmXH27UebBBx/02s2cOdPJhw4d8q51dHSU9Cyb\nVy909e1swPr16528b98+r53dABO6+mnkurMusQ1NAD8EsTMK4ai+DRGyqFJ73XXXOXn+/PlOtmW9\nAH9TURi20NXPDvb4hEQIDZ+QCKHhExIhNRHj2yQSX/ziF51sY8eQPXv2eMelJp6wJZ2mTJniXXvz\nzTedbMtTvffee167rGNTG+OHU2Ctra1OtmMjtrRWb+9Lm9GjRzvZlvmy042A/92GMb5NWkrShT0+\nIRFCwyckQqrS1Q9Xldlpuq997WtOtlNvANDU1OTkzZs3e9fsJp1i2BVuYWksm/f90qVLTs6z8mxI\nOBVnj607f/3113vtQrc6bWyYZFfn/fnPf/baDR8+PDedSA/s8QmJEBo+IRFCwyckQqoyxg+55ZZb\nnGyTbYRJHbZs2eLkrVu3etdKzWE/ceJEJ4djDXYZsM0VX4xi02ZpTPsVi/FtzGxj6fBaFkybNs3J\nNtmGTbwJ+OM0WU8xkh5KKaE1RUS2isgBEdkvIo8l58eJyGYROZK8ju3vXoSQ6qCUf7FXAHxXVecA\nuBPAt0VkDoAnADSpaiOApuSYEFIDlFI77zSA04l8WUQOApgMYCWA+5JmTwN4BcDjaSgVunzW/bYu\n+8aNG712dpfcYBNe2GeFu+5Onz5d0j1siBCW0LaueHt7+2BULIr97D73uc85OUyA8fHHH6f63HCX\noN1119nZU0U93J2Yxm5FMnAGFFSJyHQA8wG8BaAu+acAAB0A6vp4GyGkyih5cE9ERgL4LYDvqOr7\nQaZXFZFeV7GIyBoAa8pVlBCSHiX1+CJyLQpG/2tV/V1y+oyITEquTwLQ2dt7VXWtqi5U1YW9XSeE\n5E+/Pb4UuvanABxU1R+bSxsBrALww+R1Q1pKhTG+jVVtjL9hg//I/fv3O7nUrDLhlJ2N8ffu3etd\nC3fhlXLPMMa3Me1gY3y7RDhcLmw/O5utKIzx046twxjfLrO2yUfD53IHXmUoxdX/CoB/ALBPRLr3\nuv4rCgb/nIisBnACwCPZqEgISZtSRvVfA9BXLualfZwnhFQxVblyL3RfbQmmrq4uJ4eu8kcffVT2\ns63rGeaityvQ7O68MKywpb1uu+0279r27dvL1tGu+As/K/vsurqeiRaboKO395VLGJ7ZEmM20Wk4\nzZpFok/SP1wjSUiE0PAJiZCqdPXDzSvnz5/vVS51o0wxQpfX3jMs0WVH/G1CiVBf62LPnTvXu/by\nyy8PXtkE6x6H+tsZECuHue7SJnT1bRIT6+qHnxVd/crAHp+QCKHhExIhNHxCIqQqY/wwbrXJGy5e\nvOjkNKbvQmy9uTCv/uLFi51sE0icOHHCa9fQ0NDn/dMYl7BxcZi88uabb3ayLRVux0ayIExMamN+\nWy8vjPErmag0ZtjjExIhNHxCIqQmXH2bNMKumMtig4cNJazbDACPPNKzHcFOlb344oteO1uSOkzm\nkUZ4Yl390IWfMWOGk0eMGOHkUpOIDBZbFhvwNyrZUC3cFEUqA3t8QiKEhk9IhNDwCYmQqozxQ2ws\nX2xXXBrY6Ty7Gw8Ali1b5mSbl76trc1r19jY6GRbThsoPb9/MeyUmJ0qA4AFCxY42U6plVo7cLCE\ntfksdsrR7tojlYM9PiERQsMnJEJqwtW3rq1NxJHFqi/rOocr8uz0ns0bv2LFCq+dzSuXxTSa/b3t\n5wEAs2fPdvKRI0ecnMaKwWKMHj3aO7bfmf08wpAgjTJiZOCwxyckQmj4hERITbj6lnAUO23sSrjj\nx4971+6++24n2404YW6+9evXO7nUlNwDoZirP2vWLCc3NTU52c5WZMGoUaO8475c/TA84yadysAe\nn5AIoeETEiE0fEIipCZifLvLLOuEEjbvu42RAX8F4fjx45187733eu2mTp3q5HCaK+3kIeEORRsz\n27JZWSe1DEto2d/TPjvUl2WyK0O/Pb6IjBCRP4nIOyKyX0R+kJyfISJviUiriDwrIsP6uxchpDoo\nxdX/GMASVb0dwDwAD4jInQB+BOAnqjoTwEUAq7NTkxCSJqXUzlMA3ZkUrk1+FMASAI8m558G8H0A\nP09DqTBZw/Dhw51s3dcspoKsq79582bvWnNzs5NvvfVWJ991111eO5sMw5a0Avwc82kQus72uLOz\np3J51tNmdtMS4G/MsZ9p6NrbJCskP0oa3BORIUml3E4AmwG0AehS1e5v9BSAyX29nxBSXZRk+Kr6\nmarOA1APYBGA2f28xSEia0Rkh4jsGKSOhJCUGdB0nqp2AdgK4C4AY0SkO1SoB9Dex3vWqupCVV1Y\nlqaEkNToN8YXkZsAfKqqXSJyHYBlKAzsbQXwMIB1AFYB2JCVkjZne9axqr1/uNzWJgGx01fhclgb\n74a5+Q8cOJCKnt2E+ezt+EixGntpEybbtLG8Xb4bjt+ENfdIPpQyjz8JwNMiMgQFD+E5Vd0kIgcA\nrBOR/wSwG8BTGepJCEmRUkb19wKY38v5oyjE+4SQGqMqV+4VcwdtzrawXdburJ16srnzwtWEdvrR\nTu2lhf29wxx2trSXdb+z/qxCPewUng05rH5AvmEc6YEBFiERQsMnJEKq0tUPse7g2LFjc3tu6Hra\nVXF2VN+ukAP8Uf1p06Z516zLPVjX1t4j3ARkr9lqueHoedqbdsJcen3NKISbedL4PMjAYY9PSITQ\n8AmJEBo+IRFSEzG+nR6rq6tzct7TefZ5Nsd+mDvfltoOE3HaGHewZb6tHhMnTvSu2RVzM2fOdHK4\nwi/tGD/cnddXOezwvJ0WtVOAJFvY4xMSITR8QiKkJlx9u9qrvr6+gpr0YEOOMLnG4cOHnfzwww97\n16zLPVhX307NWT0APwGGzf0XrphLo2qvJbx/X65+GBLQ1a8M7PEJiRAaPiERQsMnJEJqIsa3VDIP\ne1/LYcN6fu3tPcmIwmm0kSNHOtnG4wPB3tPeDwBef/11J9vlvOG0Ytq19GztA6DvGD9c2mvHObhk\nNz/Y4xMSITR8QiKErv4AsNNoNl9+S0uL186u5At3o4Wu7mCw9wwTYGzbts3JK1ascHLo6re1tZWt\nhyX8vejqVzfs8QmJEBo+IRFSE66+dQG7urp6PZ8HdjTdjuqfPXvWa2dHzMPNMOHo92CwufTCFXOt\nra1Ovnz5spOzTmBS7LuwIVKYbjzt6sGkNNjjExIhNHxCIoSGT0iE1FyMb3PY5x3j23jaxvi2dDfg\nx63hDry0Y/xwZeC7777rZPtZWX2zINxZZ78bG+M3NDR47ez4CKfz8qPkHj8plb1bRDYlxzNE5C0R\naRWRZ0VkWH/3IIRUBwNx9R8DcNAc/wjAT1R1JoCLAFanqRghJDtKcvVFpB7A3wP4LwD/LIVlWUsA\nPJo0eRrA9wH8PAMdPRcwnDrLE+vqW9lOMQLFq9SGiSgGQ7HVfzbfn632G27mSRtbXgzwQxq7unD6\n9Oleu7RXEJLSKLXH/ymA7wHornc8HkCXqnYHdqcATE5ZN0JIRvRr+CKyHECnqu4czANEZI2I7BCR\nHYN5PyEkfUpx9b8CYIWIPARgBIBRAH4GYIyIDE16/XoA7b29WVXXAlgLACLCYVtCqoB+DV9VnwTw\nJACIyH0A/kVVvyUi6wE8DGAdgFUANqSlVLizy8bM4dRZnti43k7ThYkrbRwfTrelgY2fw2k0u3vR\nxs+jRo1KXQ9LuPTWJgGZMGGCk209AuCvx0dIPpSzgOdxFAb6WlGI+Z9KRyVCSNYMaAGPqr4C4JVE\nPgpgUfoqEUKypipX7oUlne3xuXPn8lbHYd12O30V5s6z7bJw9YuV4bKu/8mTJ508f/58r13a5ak/\n/PBD79i6+jb3f1gHgK5+ZeBafUIihIZPSIRUpasfrm6z+e2uXr0aNs8NW7X3gw8+cHI4qm8r2Gax\nYs4+LxxNt2671THUw37GaZSuCl19uyloxowZfb7v0qVLZT+bDBz2+IRECA2fkAih4RMSITUR49tE\nkdUS49tEluHONLsbLY08+iH2eeGzbYxvxwLC/Pt2SjCNGN9+HoC/UrBYjJ92KS9SGuzxCYkQGj4h\nEVKVrn6YK94eh1NnlaJY6aepU6c6OQxb0sgjb58XhhJ9TTmGG5/C0l7lEpY2s3rdcccdTu7o6PDa\nMa9+ZWCPT0iE0PAJiRAaPiERUpUxvo1TAX+HW7XEhMWmFW1CyTCWDnfylUs4TWc/O/usrGP8cOzF\nxviLFy928oYNfr6WahmziQ32+IRECA2fkAipSlc/nM6zOffClWqVwuoYlqCeM2eOk8Nda2mEKtY9\nDlfdzZo1y8n79u3r8x5hOFUu4co9q6PdrXj8+HGvXRqrBsnAYY9PSITQ8AmJkJpw9a3bGK4QqxQ2\nscXkyX4Roblz5zr5woUL3rXQ9R8MdmNLuMll0aKe/Kf79+/v8x624m4ahL+nzaU3fvx4Jx87dsxr\nZ8M4kh/s8QmJEBo+IRFCwyckQqoyxg9XldldZmEe+Tyxq/VsMsl58+Z57RoaGpz86quvetfSWKlm\npwTDsuFWF7tLMIzpw3GUcgmn89rbe0op2lz64XReGjn9ycApyfBF5DiAywA+A3BFVReKyDgAzwKY\nDuA4gEdU9WJf9yCEVA8DcfXvV9V5qrowOX4CQJOqNgJoSo4JITVAOa7+SgD3JfLTKNTUe7xMfXrl\n/PnzTq7kSi87lThlyhQnf/3rX/fa2XxznZ2d3rU0cgbaz+DIkSPetfvvv9/JK1eudHJ9fb3XLixT\nVi7hisrm5mYn2wq5YWhCKkOp374C+IOI7BSRNcm5OlU9ncgdAOp6fyshpNootce/W1XbRWQigM0i\ncsheVFUVkV5HaZJ/FGt6u0YIqQwl9fiq2p68dgJ4AYXy2GdEZBIAJK+dfbx3raouNGMDhJAK02+P\nLyI3ALhGVS8n8lcB/AeAjQBWAfhh8rqh77sMjDD+tFNF1RLj27j13nvv9drZZainT5/2rqUR49v7\nt7a2etdsLL98+XInh9OgYRLQcikW48+ePdvJlSxzTnooxdWvA/BCksFlKIBnVPX3IvI2gOdEZDWA\nEwAeyU5NQkia9Gv4qnoUwO29nD8PYGkWShFCsqUqV+6FU09p7yQbLNZdLpYQxE5ZHTp0qM92aXDy\n5Env+I033nDybbfd5uQwxEhjl2Ax7M5AG7pVSyKV2OFafUIihIZPSITQ8AmJkKqJ8W3e9zCjjY3x\nK7mby07nFYtV7TLdrGP89957zzt+7bXXnGxr1oVJPtPO7x9+LzbGb2trczJj/OqAPT4hEULDJyRC\nqsbVt7vdbMklwHcVK4lNonHw4EEnW90BYPv27U62OwuzIHSd9+7d6+RNmzY5OUyUkXUpMnv/ail7\nRnpgj09IhNDwCYmQqnH1GxsbnXzPPfd413bt2pW3Or1iXX2rk10hBwBbtmxxcuhip024Is+WzSqW\nwITud9ywxyckQmj4hEQIDZ+QCKmaGN/mqbdllYHqSdBo42SbaOLNN9/02tkptaxXqoUr5uyqwTDR\nJyHdsMcnJEJo+IRESNW4+jbJxcWLfkGecCNKpbBudUtLi5PXr1/vtaOLTaod9viERAgNn5AIoeET\nEiFVE+Pb5I/Hjh3zrnV0dOStTr+8++67vcqE1ALs8QmJEBo+IRFSNa6+de+feeYZ79qlS5fyVoeQ\nv2lK6vFFZIyIPC8ih0TkoIjcJSLjRGSziBxJXsdmrSwhJB1KdfV/BuD3qjobhXJaBwE8AaBJVRsB\nNCXHhJAaQPpLVy0iowHsAdCgprGItAC4T1VPJ2WyX1HVW/q5V58Ps2WWhg71IxC7qq+S6bUJqQVU\nVfprU0qPPwPAWQD/IyK7ReQXSbnsOlXtrgHdgUJVXUJIDVCK4Q8FsADAz1V1PoAPEbj1iSfQa1cs\nImtEZIeI7ChXWUJIOpRi+KcAnFLVt5Lj51H4R3AmcfGRvPa6M0VV16rqQlVdmIbChJDy6dfwVbUD\nwEkR6Y7flwI4AGAjgFXJuVUANpSjyNWrV93PJ5984v2oqvshhJRPv4N7ACAi8wD8AsAwAEcB/CMK\n/zSeAzAVwAkAj6jqhX7uQ8slJGNKGdwryfDTgoZPSPakNapPCPkbg4ZPSITQ8AmJEBo+IRFCwyck\nQmj4hEQIDZ+QCMk7Ecc5FBb7TEjkSlINOgDUI4R6+AxUj2mlNMp1AY97qMiOSq/drwYdqAf1qJQe\ndPUJiRAaPiERUinDX1uh51qqQQeAeoRQD59M9KhIjE8IqSx09QmJkFwNX0QeEJEWEWkVkdyy8orI\nL0WkU0Sazbnc04OLyBQR2SoiB0Rkv4g8VgldRGSEiPxJRN5J9PhBcn6GiLyVfD/PisiwLPUw+gxJ\n8jluqpQeInJcRPaJyJ7uNHEV+hvJJZV9boYvIkMA/DeABwHMAfBNEZmT0+N/BeCB4Fwl0oNfAfBd\nVZ0D4E4A304+g7x1+RjAElW9HcA8AA+IyJ0AfgTgJ6o6E8BFAKsz1qObx1BI2d5NpfS4X1Xnmemz\nSvyN5JPK3qa1yvIHwF0AXjbHTwJ4MsfnTwfQbI5bAExK5EkAWvLSxeiwAcCySuoC4HoAuwAsRmGh\nyNDevq8Mn1+f/DEvAbAJgFRIj+MAJgTncv1eAIwGcAzJ2FuWeuTp6k8GcNIcn0rOVYqKpgcXkekA\n5gN4qxK6JO71HhSSpG4G0AagS1WvJE3y+n5+CuB7AK4mx+MrpIcC+IOI7BSRNcm5vL+X3FLZc3AP\nxdODZ4GIjATwWwDfUdX3K6GLqn6mqvNQ6HEXAZid9TNDRGQ5gE5V3Zn3s3vhblVdgEIo+m0Rucde\nzOl7KSuV/UDI0/DbAUwxx/XJuUpRUnrwtBGRa1Ew+l+r6u8qqQsAqGoXgK0ouNRjRKR7/0Ye389X\nAKwQkeMA1qHg7v+sAnpAVduT104AL6DwzzDv76WsVPYDIU/DfxtAYzJiOwzAN1BI0V0pUk0PXgoi\nIgCeAnBQVX9cKV1E5CYRGZPI16EwznAQhX8AD+elh6o+qar1qjodhb+HLar6rbz1EJEbROTGbhnA\nVwE0I+fvRXNKZd/9sNx+ADwE4DAK8eS/5fjc3wA4DeBTFP6rrkYhlmwCcATA/wEYl4Med6Pgpu1F\noR7hnuQzyVUXAHMB7E70aAbw78n5BgB/AtAKYD2A4Tl+R/cB2FQJPZLnvZP87O/+26zQ38g8ADuS\n7+Z/AYzNQg+u3CMkQji4R0iE0PAJiRAaPiERQsMnJEJo+IRECA2fkAih4RMSITR8QiLk/wG4IXH4\nLN8u9AAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "OPDF65bIl7rD",
"colab_type": "code",
"outputId": "dad76815-0467-41c6-f8f8-d79db2fbb541",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 384
}
},
"source": [
"## CNN Model\n",
"\n",
"BATCH_SIZE = 128\n",
"NB_CLASSES = 11\n",
"NB_EPOCH = 12\n",
"\n",
"NB_FILTERS = 32\n",
"# max pooling filter size\n",
"POOL_SIZE = (2, 2)\n",
"# convolution kernel size\n",
"KERNEL_SIZE = (3, 3)\n",
"\n",
"# channel of one\n",
"inputs = Input(shape=(IMAGE_SIZE[0], IMAGE_SIZE[1], 1))\n",
"\n",
"cov = Convolution2D(NB_FILTERS, KERNEL_SIZE[0], KERNEL_SIZE[1], border_mode='same')(inputs)\n",
"cov = Activation('relu')(cov)\n",
"cov = Convolution2D(NB_FILTERS, KERNEL_SIZE[0], KERNEL_SIZE[1])(inputs)\n",
"cov = Activation('relu')(cov)\n",
"cov = MaxPooling2D(pool_size=POOL_SIZE)(cov)\n",
"cov2 = Dropout(0.25)(cov)\n",
"cov_out = Flatten()(cov)\n",
"\n",
"#Dense layers\n",
"\n",
"cov2 = Dense(128, activation='relu')(cov_out)\n",
"cov2 = Dropout(0.5)(cov2)\n",
"\n",
"\n",
"#Prediction layers\n",
"pred_layers = list()\n",
"for i in range(0, DIGIT_SEQUENCE):\n",
" ind_output = Dense(NB_CLASSES, activation='softmax')(cov2)\n",
" pred_layers.append(ind_output)\n",
"\n",
"model = Model(input=inputs, output=pred_layers)\n",
"\n",
"#compile the model\n",
"model.compile(loss='categorical_crossentropy', optimizer=\"adam\", metrics=['accuracy'])\n",
"\n",
"#fitting the model\n",
"model.fit(train_images, \n",
" train_labels, \n",
" batch_size=BATCH_SIZE, \n",
" nb_epoch=NB_EPOCH, \n",
" verbose=1, \n",
" validation_data=(test_images, test_labels))"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:15: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(32, (3, 3), padding=\"same\")`\n",
" from ipykernel import kernelapp as app\n",
"/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:17: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(32, (3, 3))`\n",
"/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:35: UserWarning: Update your `Model` call to the Keras 2 API: `Model(inputs=Tensor(\"in..., outputs=[<tf.Tenso...)`\n",
"/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:46: UserWarning: The `nb_epoch` argument in `fit` has been renamed `epochs`.\n"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"Train on 80000 samples, validate on 15000 samples\n",
"Epoch 1/12\n",
"80000/80000 [==============================] - 343s 4ms/step - loss: 4.8915 - dense_9_loss: 1.0690 - dense_10_loss: 1.0240 - dense_11_loss: 0.9339 - dense_12_loss: 0.8094 - dense_13_loss: 0.6373 - dense_14_loss: 0.4178 - dense_9_acc: 0.6417 - dense_10_acc: 0.6585 - dense_11_acc: 0.6897 - dense_12_acc: 0.7339 - dense_13_acc: 0.7927 - dense_14_acc: 0.8711 - val_loss: 1.7998 - val_dense_9_loss: 0.3523 - val_dense_10_loss: 0.3577 - val_dense_11_loss: 0.3217 - val_dense_12_loss: 0.3107 - val_dense_13_loss: 0.2603 - val_dense_14_loss: 0.1970 - val_dense_9_acc: 0.9211 - val_dense_10_acc: 0.9214 - val_dense_11_acc: 0.9331 - val_dense_12_acc: 0.9356 - val_dense_13_acc: 0.9412 - val_dense_14_acc: 0.9437\n",
"Epoch 2/12\n",
"80000/80000 [==============================] - 384s 5ms/step - loss: 3.4172 - dense_9_loss: 0.7131 - dense_10_loss: 0.6979 - dense_11_loss: 0.6524 - dense_12_loss: 0.5823 - dense_13_loss: 0.4682 - dense_14_loss: 0.3032 - dense_9_acc: 0.7628 - dense_10_acc: 0.7656 - dense_11_acc: 0.7796 - dense_12_acc: 0.8028 - dense_13_acc: 0.8452 - dense_14_acc: 0.9008 - val_loss: 1.3352 - val_dense_9_loss: 0.2583 - val_dense_10_loss: 0.2388 - val_dense_11_loss: 0.2467 - val_dense_12_loss: 0.2344 - val_dense_13_loss: 0.2077 - val_dense_14_loss: 0.1492 - val_dense_9_acc: 0.9419 - val_dense_10_acc: 0.9495 - val_dense_11_acc: 0.9506 - val_dense_12_acc: 0.9527 - val_dense_13_acc: 0.9557 - val_dense_14_acc: 0.9625\n",
"Epoch 3/12\n",
"80000/80000 [==============================] - 435s 5ms/step - loss: 3.0249 - dense_9_loss: 0.6106 - dense_10_loss: 0.6103 - dense_11_loss: 0.5768 - dense_12_loss: 0.5277 - dense_13_loss: 0.4209 - dense_14_loss: 0.2786 - dense_9_acc: 0.7980 - dense_10_acc: 0.7950 - dense_11_acc: 0.8044 - dense_12_acc: 0.8201 - dense_13_acc: 0.8574 - dense_14_acc: 0.9077 - val_loss: 1.1185 - val_dense_9_loss: 0.2071 - val_dense_10_loss: 0.2036 - val_dense_11_loss: 0.1987 - val_dense_12_loss: 0.2013 - val_dense_13_loss: 0.1794 - val_dense_14_loss: 0.1285 - val_dense_9_acc: 0.9494 - val_dense_10_acc: 0.9543 - val_dense_11_acc: 0.9562 - val_dense_12_acc: 0.9579 - val_dense_13_acc: 0.9627 - val_dense_14_acc: 0.9719\n",
"Epoch 4/12\n",
"80000/80000 [==============================] - 428s 5ms/step - loss: 2.7407 - dense_9_loss: 0.5471 - dense_10_loss: 0.5428 - dense_11_loss: 0.5195 - dense_12_loss: 0.4831 - dense_13_loss: 0.3930 - dense_14_loss: 0.2551 - dense_9_acc: 0.8177 - dense_10_acc: 0.8163 - dense_11_acc: 0.8235 - dense_12_acc: 0.8358 - dense_13_acc: 0.8646 - dense_14_acc: 0.9135 - val_loss: 0.9655 - val_dense_9_loss: 0.1685 - val_dense_10_loss: 0.1738 - val_dense_11_loss: 0.1686 - val_dense_12_loss: 0.1741 - val_dense_13_loss: 0.1570 - val_dense_14_loss: 0.1235 - val_dense_9_acc: 0.9582 - val_dense_10_acc: 0.9597 - val_dense_11_acc: 0.9628 - val_dense_12_acc: 0.9644 - val_dense_13_acc: 0.9670 - val_dense_14_acc: 0.9687\n",
"Epoch 5/12\n",
"80000/80000 [==============================] - 432s 5ms/step - loss: 2.5181 - dense_9_loss: 0.4944 - dense_10_loss: 0.4943 - dense_11_loss: 0.4744 - dense_12_loss: 0.4454 - dense_13_loss: 0.3655 - dense_14_loss: 0.2441 - dense_9_acc: 0.8331 - dense_10_acc: 0.8306 - dense_11_acc: 0.8368 - dense_12_acc: 0.8467 - dense_13_acc: 0.8738 - dense_14_acc: 0.9172 - val_loss: 0.8309 - val_dense_9_loss: 0.1545 - val_dense_10_loss: 0.1473 - val_dense_11_loss: 0.1394 - val_dense_12_loss: 0.1431 - val_dense_13_loss: 0.1376 - val_dense_14_loss: 0.1090 - val_dense_9_acc: 0.9581 - val_dense_10_acc: 0.9605 - val_dense_11_acc: 0.9645 - val_dense_12_acc: 0.9689 - val_dense_13_acc: 0.9670 - val_dense_14_acc: 0.9724\n",
"Epoch 6/12\n",
"80000/80000 [==============================] - 436s 5ms/step - loss: 2.3606 - dense_9_loss: 0.4549 - dense_10_loss: 0.4553 - dense_11_loss: 0.4448 - dense_12_loss: 0.4211 - dense_13_loss: 0.3511 - dense_14_loss: 0.2333 - dense_9_acc: 0.8448 - dense_10_acc: 0.8442 - dense_11_acc: 0.8469 - dense_12_acc: 0.8540 - dense_13_acc: 0.8778 - dense_14_acc: 0.9200 - val_loss: 0.7478 - val_dense_9_loss: 0.1351 - val_dense_10_loss: 0.1316 - val_dense_11_loss: 0.1215 - val_dense_12_loss: 0.1291 - val_dense_13_loss: 0.1265 - val_dense_14_loss: 0.1039 - val_dense_9_acc: 0.9639 - val_dense_10_acc: 0.9641 - val_dense_11_acc: 0.9684 - val_dense_12_acc: 0.9729 - val_dense_13_acc: 0.9702 - val_dense_14_acc: 0.9742\n",
"Epoch 7/12\n",
"55168/80000 [===================>..........] - ETA: 2:09 - loss: 2.2340 - dense_9_loss: 0.4271 - dense_10_loss: 0.4295 - dense_11_loss: 0.4188 - dense_12_loss: 0.4015 - dense_13_loss: 0.3344 - dense_14_loss: 0.2228 - dense_9_acc: 0.8532 - dense_10_acc: 0.8520 - dense_11_acc: 0.8544 - dense_12_acc: 0.8601 - dense_13_acc: 0.8810 - dense_14_acc: 0.9218"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "UlklEiTB5-1E",
"colab_type": "code",
"outputId": "012a701e-0a2f-46cf-82ef-17dcb575e34c",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 69
}
},
"source": [
"# predict the test images\n",
"\n",
"predictions = model.predict(test_images)\n",
"\n",
"ind_acc, glob_acc = custom_accuracy(predictions, test_labels)\n",
"print(f\"Ind Accuracy: {ind_acc}\\n Seq Accuracy: {glob_acc}\\n\")"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Ind Accuracy: 0.9419555555555555\n",
" Seq Accuracy: 0.725\n",
"\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "AiSr4knzKEgJ",
"colab_type": "code",
"outputId": "fd43d88a-c2c0-492b-eadd-f194ad5ef58d",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 286
}
},
"source": [
"# uploaded image prediction\n",
"test_pred = predict_single(model, \"test-3.jpeg\")\n",
"pred, lab = predtostr(test_pred)\n",
"print(lab)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"[2, 2, 10, 10, 10, 10]\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "zJtdOzmPeN-c",
"colab_type": "code",
"colab": {}
},
"source": [
""
],
"execution_count": 0,
"outputs": []
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment