diff --git a/aronpereira1999@gmail.com/Dataset.txt b/aronpereira1999@gmail.com/Dataset.txt new file mode 100644 index 000000000..2b6f95d4c --- /dev/null +++ b/aronpereira1999@gmail.com/Dataset.txt @@ -0,0 +1 @@ +Link : https://www.kaggle.com/crawford/emnist \ No newline at end of file diff --git a/aronpereira1999@gmail.com/EMNISTCLASSIFICATION.pdf b/aronpereira1999@gmail.com/EMNISTCLASSIFICATION.pdf new file mode 100644 index 000000000..175cb41b9 Binary files /dev/null and b/aronpereira1999@gmail.com/EMNISTCLASSIFICATION.pdf differ diff --git a/aronpereira1999@gmail.com/EmnistClassifier.ipynb b/aronpereira1999@gmail.com/EmnistClassifier.ipynb new file mode 100644 index 000000000..9311a50f5 --- /dev/null +++ b/aronpereira1999@gmail.com/EmnistClassifier.ipynb @@ -0,0 +1,1424 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import os" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "from mnist import MNIST\n", + "mndata = MNIST()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "#Load the data\n", + "X_train, y_train = mndata.load('emnist/emnist_source_files/emnist-byclass-train-images-idx3-ubyte',\n", + " 'emnist/emnist_source_files/emnist-byclass-train-labels-idx1-ubyte')\n", + "X_test, y_test = mndata.load('emnist/emnist_source_files/emnist-byclass-test-images-idx3-ubyte',\n", + " 'emnist/emnist_source_files/emnist-byclass-test-labels-idx1-ubyte')" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "# Convert data to numpy arrays and normalize images to the interval [0, 1]\n", + "X_train = np.array(X_train) / 255.0\n", + "y_train = np.array(y_train)\n", + "X_test = np.array(X_test) / 255.0\n", + "y_test = np.array(y_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(697932, 784)" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X_train.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(697932,)" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y_train.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "#Reshaping all images into 28*28 for pre-processing\n", + "X_train = X_train.reshape(X_train.shape[0], 28, 28)\n", + "X_test = X_test.reshape(X_test.shape[0], 28, 28)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#Display a random image\n", + "plt.imshow(X_train[20])\n", + "plt.show" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. ],\n", + " [0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. ],\n", + " [0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. ],\n", + " [0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0.03137255, 0.1254902 , 0.14509804,\n", + " 0.1254902 , 0.03529412, 0.00784314, 0. , 0. ,\n", + " 0. , 0. , 0. ],\n", + " [0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0.0745098 , 0.4745098 , 0.79607843, 0.85098039,\n", + " 0.8 , 0.54509804, 0.30196078, 0.03137255, 0. ,\n", + " 0. , 0. , 0. ],\n", + " [0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0.19607843, 0.85490196, 0.99215686, 0.99607843,\n", + " 0.99607843, 0.98039216, 0.85490196, 0.35294118, 0.02745098,\n", + " 0. , 0. , 0. ],\n", + " [0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0.01568627, 0.44705882, 0.93333333, 0.87058824, 0.87058824,\n", + " 0.96078431, 0.98823529, 0.99215686, 0.81176471, 0.18431373,\n", + " 0.00392157, 0. , 0. ],\n", + " [0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0.03529412, 0.5372549 , 0.6745098 , 0.20784314, 0.2 ,\n", + " 0.45098039, 0.69411765, 0.96862745, 0.96862745, 0.62352941,\n", + " 0.07843137, 0. , 0. ],\n", + " [0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0.10588235, 0.61176471, 0.30196078, 0.01176471, 0. ,\n", + " 0.01568627, 0.18823529, 0.81960784, 0.99215686, 0.8627451 ,\n", + " 0.19607843, 0. , 0. ],\n", + " [0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0.00392157, 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0.01960784, 0.10588235, 0.02745098, 0. , 0. ,\n", + " 0. , 0.03921569, 0.55686275, 0.98431373, 0.96078431,\n", + " 0.44705882, 0.01568627, 0. ],\n", + " [0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0.03137255, 0.24705882, 0.1254902 ,\n", + " 0.00392157, 0. , 0. , 0. , 0.01176471,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0.08235294, 0.6745098 , 0.98823529, 0.97647059,\n", + " 0.49019608, 0.01568627, 0. ],\n", + " [0. , 0. , 0. , 0. , 0. ,\n", + " 0.00392157, 0.08627451, 0.37254902, 0.83137255, 0.61568627,\n", + " 0.07843137, 0. , 0.01960784, 0.17647059, 0.39215686,\n", + " 0.17647059, 0.01960784, 0. , 0. , 0. ,\n", + " 0. , 0.14901961, 0.84705882, 0.99607843, 0.91372549,\n", + " 0.32156863, 0.00784314, 0. ],\n", + " [0. , 0. , 0. , 0. , 0. ,\n", + " 0.08627451, 0.60392157, 0.90980392, 0.99215686, 0.83529412,\n", + " 0.14117647, 0. , 0.12941176, 0.74509804, 0.94117647,\n", + " 0.74509804, 0.1254902 , 0. , 0. , 0. ,\n", + " 0.01176471, 0.32941176, 0.91372549, 0.99607843, 0.8 ,\n", + " 0.13333333, 0. , 0. ],\n", + " [0. , 0. , 0. , 0. , 0.01176471,\n", + " 0.3254902 , 0.90980392, 0.99607843, 0.98431373, 0.66666667,\n", + " 0.08235294, 0.02745098, 0.37254902, 0.91764706, 0.99607843,\n", + " 0.85098039, 0.14509804, 0. , 0. , 0. ,\n", + " 0.08627451, 0.67058824, 0.98431373, 0.96470588, 0.49803922,\n", + " 0.03137255, 0. , 0. ],\n", + " [0. , 0. , 0. , 0.00392157, 0.14117647,\n", + " 0.68627451, 0.98823529, 0.99607843, 0.8627451 , 0.30980392,\n", + " 0.01176471, 0.1254902 , 0.79215686, 0.99215686, 0.99607843,\n", + " 0.8 , 0.1254902 , 0. , 0. , 0.00784314,\n", + " 0.32156863, 0.90980392, 0.99215686, 0.81568627, 0.18039216,\n", + " 0. , 0. , 0. ],\n", + " [0. , 0. , 0.00392157, 0.1372549 , 0.63921569,\n", + " 0.96470588, 0.99607843, 0.95686275, 0.49803922, 0.03921569,\n", + " 0. , 0.19215686, 0.86666667, 0.99607843, 0.98431373,\n", + " 0.54901961, 0.03529412, 0. , 0. , 0.04313725,\n", + " 0.54509804, 0.98039216, 0.95686275, 0.49411765, 0.03137255,\n", + " 0. , 0. , 0. ],\n", + " [0. , 0. , 0.08627451, 0.62352941, 0.96078431,\n", + " 0.99607843, 0.96470588, 0.63921569, 0.12941176, 0. ,\n", + " 0.00784314, 0.32156863, 0.91372549, 0.99607843, 0.97647059,\n", + " 0.49019608, 0.01568627, 0. , 0.01176471, 0.30980392,\n", + " 0.8627451 , 0.98431373, 0.68627451, 0.13333333, 0. ,\n", + " 0. , 0. , 0. ],\n", + " [0. , 0.00392157, 0.26666667, 0.89019608, 0.99607843,\n", + " 0.98823529, 0.69411765, 0.14117647, 0.00392157, 0. ,\n", + " 0.03529412, 0.50588235, 0.96470588, 0.99607843, 0.8627451 ,\n", + " 0.30196078, 0.00784314, 0. , 0.08627451, 0.67058824,\n", + " 0.98431373, 0.90980392, 0.3254902 , 0.01176471, 0. ,\n", + " 0. , 0. , 0. ],\n", + " [0. , 0. , 0.17254902, 0.81568627, 0.99607843,\n", + " 0.96078431, 0.45098039, 0.01568627, 0. , 0.01568627,\n", + " 0.18823529, 0.81568627, 0.99607843, 0.98431373, 0.55294118,\n", + " 0.04313725, 0.00784314, 0.04313725, 0.37254902, 0.90980392,\n", + " 0.98431373, 0.67058824, 0.08627451, 0. , 0. ,\n", + " 0. , 0. , 0. ],\n", + " [0. , 0. , 0.03529412, 0.54901961, 0.98039216,\n", + " 0.87058824, 0.20392157, 0.01568627, 0.13333333, 0.45098039,\n", + " 0.69411765, 0.96862745, 1. , 0.98431373, 0.57254902,\n", + " 0.16862745, 0.32156863, 0.54509804, 0.86666667, 0.99215686,\n", + " 0.90980392, 0.3254902 , 0.01176471, 0. , 0. ,\n", + " 0. , 0. , 0. ],\n", + " [0. , 0. , 0.01568627, 0.44705882, 0.96078431,\n", + " 0.91764706, 0.40392157, 0.3372549 , 0.68627451, 0.95294118,\n", + " 0.98823529, 0.99607843, 0.99607843, 0.99607843, 0.9254902 ,\n", + " 0.85490196, 0.91372549, 0.98039216, 0.99607843, 0.96078431,\n", + " 0.62352941, 0.08627451, 0. , 0. , 0. ,\n", + " 0. , 0. , 0. ],\n", + " [0. , 0. , 0. , 0.19607843, 0.87058824,\n", + " 0.99215686, 0.92156863, 0.91764706, 0.98431373, 0.98823529,\n", + " 0.96078431, 0.87058824, 0.91372549, 0.97647059, 0.98823529,\n", + " 0.99607843, 0.98823529, 0.98039216, 0.95294118, 0.63921569,\n", + " 0.1372549 , 0.00392157, 0. , 0. , 0. ,\n", + " 0. , 0. , 0. ],\n", + " [0. , 0. , 0. , 0.1254902 , 0.79607843,\n", + " 0.99215686, 0.99607843, 0.99607843, 0.95686275, 0.69411765,\n", + " 0.45098039, 0.20392157, 0.32156863, 0.49803922, 0.6745098 ,\n", + " 0.83921569, 0.6745098 , 0.50588235, 0.44313725, 0.12941176,\n", + " 0.00392157, 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. ],\n", + " [0. , 0. , 0. , 0.03137255, 0.4745098 ,\n", + " 0.83529412, 0.85098039, 0.79607843, 0.49411765, 0.13333333,\n", + " 0.01568627, 0. , 0.00784314, 0.01960784, 0.08235294,\n", + " 0.14117647, 0.08235294, 0.01960784, 0.01568627, 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. ],\n", + " [0. , 0. , 0. , 0. , 0.07058824,\n", + " 0.14509804, 0.14509804, 0.1254902 , 0.03137255, 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. ],\n", + " [0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. ],\n", + " [0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. ],\n", + " [0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. ]])" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Image array\n", + "X_train[20]" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Process Complete: Rotated and reversed train images!\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#Since the images are not in right shape process the images\n", + "#for train data\n", + "for t in range(697932):\n", + " X_train[t]=np.transpose(X_train[t])\n", + " \n", + "#checking\n", + "plt.imshow(X_train[20])\n", + "plt.show\n", + "print('Process Complete: Rotated and reversed train images!')" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Process Complete: Rotated and reversed train images!\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#for test data \n", + "for t in range(116323):\n", + " X_test[t]=np.transpose(X_test[t])\n", + "\n", + "#checking\n", + "plt.imshow(X_test[2])\n", + "plt.show\n", + "print('Process Complete: Rotated and reversed train images!')" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "X_train = X_train.reshape(X_train.shape[0], 784,1)\n", + "X_test = X_test.reshape(X_test.shape[0], 784,1)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "import keras\n", + "from keras.models import Sequential\n", + "from keras import optimizers\n", + "from keras.utils import np_utils\n", + "from keras.layers import Convolution2D, MaxPooling2D, Dropout, Flatten, Dense,Reshape" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "def resh(ipar):\n", + " opar = []\n", + " for image in ipar:\n", + " opar.append(image.reshape(-1))\n", + " return np.asarray(opar)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "train_images = X_train.astype('float32')\n", + "test_images = X_test.astype('float32')\n", + "\n", + "train_images = resh(train_images)\n", + "test_images = resh(test_images)\n", + "\n", + "\n", + "train_labels = np_utils.to_categorical(y_train, 62)\n", + "test_labels = np_utils.to_categorical(y_test, 62)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "classifier = Sequential()\n", + "classifier.add(Reshape((28,28,1), input_shape=(784,)))\n", + "classifier.add(Convolution2D(32,(3,3),activation='relu'))\n", + "classifier.add(MaxPooling2D(pool_size=(2, 2)))\n", + "classifier.add(Flatten())\n", + "#Hidden Layer\n", + "classifier.add(Dense(units = 512 ,activation = 'relu'))\n", + "classifier.add(Dropout(0.5))\n", + "#Output Layer\n", + "classifier.add(Dense(62, activation='softmax'))" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "classifier.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "reshape_1 (Reshape) (None, 28, 28, 1) 0 \n", + "_________________________________________________________________\n", + "conv2d_1 (Conv2D) (None, 26, 26, 32) 320 \n", + "_________________________________________________________________\n", + "max_pooling2d_1 (MaxPooling2 (None, 13, 13, 32) 0 \n", + "_________________________________________________________________\n", + "flatten_1 (Flatten) (None, 5408) 0 \n", + "_________________________________________________________________\n", + "dense_1 (Dense) (None, 512) 2769408 \n", + "_________________________________________________________________\n", + "dropout_1 (Dropout) (None, 512) 0 \n", + "_________________________________________________________________\n", + "dense_2 (Dense) (None, 62) 31806 \n", + "=================================================================\n", + "Total params: 2,801,534\n", + "Trainable params: 2,801,534\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n", + "None\n" + ] + } + ], + "source": [ + "print(classifier.summary())" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train on 697932 samples, validate on 116323 samples\n", + "Epoch 1/30\n", + "697932/697932 [==============================] - 973s 1ms/step - loss: 0.6573 - acc: 0.7912 - val_loss: 0.4325 - val_acc: 0.8471\n", + "Epoch 2/30\n", + "697932/697932 [==============================] - 1118s 2ms/step - loss: 0.4754 - acc: 0.8358 - val_loss: 0.4021 - val_acc: 0.8555\n", + "Epoch 3/30\n", + "697932/697932 [==============================] - 1190s 2ms/step - loss: 0.4427 - acc: 0.8442 - val_loss: 0.3890 - val_acc: 0.8586\n", + "Epoch 4/30\n", + "697932/697932 [==============================] - 1041s 1ms/step - loss: 0.4220 - acc: 0.8497 - val_loss: 0.3801 - val_acc: 0.8613\n", + "Epoch 5/30\n", + "697932/697932 [==============================] - 918s 1ms/step - loss: 0.4070 - acc: 0.8536 - val_loss: 0.3728 - val_acc: 0.8635\n", + "Epoch 6/30\n", + "697932/697932 [==============================] - 1034s 1ms/step - loss: 0.3939 - acc: 0.8570 - val_loss: 0.3711 - val_acc: 0.8639\n", + "Epoch 7/30\n", + "697932/697932 [==============================] - 1113s 2ms/step - loss: 0.3825 - acc: 0.8602 - val_loss: 0.3683 - val_acc: 0.8653\n", + "Epoch 8/30\n", + "697932/697932 [==============================] - 886s 1ms/step - loss: 0.3728 - acc: 0.8627 - val_loss: 0.3692 - val_acc: 0.8655\n", + "Epoch 9/30\n", + "697932/697932 [==============================] - 949s 1ms/step - loss: 0.3639 - acc: 0.8650 - val_loss: 0.3664 - val_acc: 0.8653\n", + "Epoch 10/30\n", + "697932/697932 [==============================] - 951s 1ms/step - loss: 0.3559 - acc: 0.8673 - val_loss: 0.3672 - val_acc: 0.8669\n", + "Epoch 11/30\n", + "697932/697932 [==============================] - 968s 1ms/step - loss: 0.3489 - acc: 0.8696 - val_loss: 0.3659 - val_acc: 0.8671\n", + "Epoch 12/30\n", + "697932/697932 [==============================] - 958s 1ms/step - loss: 0.3416 - acc: 0.8715 - val_loss: 0.3740 - val_acc: 0.8646\n", + "Epoch 13/30\n", + "697932/697932 [==============================] - 907s 1ms/step - loss: 0.3350 - acc: 0.8737 - val_loss: 0.3710 - val_acc: 0.8663\n", + "Epoch 14/30\n", + "697932/697932 [==============================] - 947s 1ms/step - loss: 0.3282 - acc: 0.8753 - val_loss: 0.3743 - val_acc: 0.8658\n", + "Epoch 15/30\n", + "697932/697932 [==============================] - 962s 1ms/step - loss: 0.3232 - acc: 0.8771 - val_loss: 0.3749 - val_acc: 0.8674\n", + "Epoch 16/30\n", + "697932/697932 [==============================] - 937s 1ms/step - loss: 0.3170 - acc: 0.8792 - val_loss: 0.3777 - val_acc: 0.8658\n", + "Epoch 17/30\n", + "697932/697932 [==============================] - 965s 1ms/step - loss: 0.3113 - acc: 0.8807 - val_loss: 0.3785 - val_acc: 0.8656\n", + "Epoch 18/30\n", + "697932/697932 [==============================] - 962s 1ms/step - loss: 0.3066 - acc: 0.8823 - val_loss: 0.3846 - val_acc: 0.8659\n", + "Epoch 19/30\n", + "697932/697932 [==============================] - 940s 1ms/step - loss: 0.3018 - acc: 0.8841 - val_loss: 0.3871 - val_acc: 0.8640\n", + "Epoch 20/30\n", + "697932/697932 [==============================] - 937s 1ms/step - loss: 0.2969 - acc: 0.8859 - val_loss: 0.3923 - val_acc: 0.8656\n", + "Epoch 21/30\n", + "697932/697932 [==============================] - 953s 1ms/step - loss: 0.2924 - acc: 0.8870 - val_loss: 0.3951 - val_acc: 0.8664\n", + "Epoch 22/30\n", + "697932/697932 [==============================] - 928s 1ms/step - loss: 0.2873 - acc: 0.8891 - val_loss: 0.4042 - val_acc: 0.8663\n", + "Epoch 23/30\n", + "697932/697932 [==============================] - 949s 1ms/step - loss: 0.2838 - acc: 0.8903 - val_loss: 0.4017 - val_acc: 0.8651\n", + "Epoch 24/30\n", + "697932/697932 [==============================] - 921s 1ms/step - loss: 0.2797 - acc: 0.8917 - val_loss: 0.4092 - val_acc: 0.8639\n", + "Epoch 25/30\n", + "697932/697932 [==============================] - 941s 1ms/step - loss: 0.2761 - acc: 0.8930 - val_loss: 0.4092 - val_acc: 0.8644\n", + "Epoch 26/30\n", + "697932/697932 [==============================] - 940s 1ms/step - loss: 0.2714 - acc: 0.8948 - val_loss: 0.4132 - val_acc: 0.8638\n", + "Epoch 27/30\n", + "697932/697932 [==============================] - 962s 1ms/step - loss: 0.2679 - acc: 0.8961 - val_loss: 0.4133 - val_acc: 0.8643\n", + "Epoch 28/30\n", + "697932/697932 [==============================] - 923s 1ms/step - loss: 0.2644 - acc: 0.8974 - val_loss: 0.4221 - val_acc: 0.8644\n", + "Epoch 29/30\n", + "697932/697932 [==============================] - 962s 1ms/step - loss: 0.2607 - acc: 0.8989 - val_loss: 0.4263 - val_acc: 0.8628\n", + "Epoch 30/30\n", + "697932/697932 [==============================] - 933s 1ms/step - loss: 0.2578 - acc: 0.8995 - val_loss: 0.4357 - val_acc: 0.8624\n" + ] + } + ], + "source": [ + "history = classifier.fit(train_images,train_labels,validation_data=(test_images, test_labels), batch_size=256, epochs=30)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "116323/116323 [==============================] - 71s 609us/step\n" + ] + }, + { + "data": { + "text/plain": [ + "0.8624175786387903" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "_, test_acc = classifier.evaluate(test_images, test_labels)\n", + "test_acc" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Evaluation of Dataset Size Vs Accuracy" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(697932, 784)" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_images.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For 9k" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(9000, 784)\n", + "(9000, 62)\n" + ] + } + ], + "source": [ + "train_images1 = train_images[:9000,:]\n", + "print(train_images1.shape)\n", + "train_labels1 = train_labels[:9000,:]\n", + "print(train_labels1.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For 27k" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(27000, 784)\n", + "(27000, 62)\n" + ] + } + ], + "source": [ + "train_images2 = train_images[:27000,:]\n", + "print(train_images2.shape)\n", + "train_labels2 = train_labels[:27000,:]\n", + "print(train_labels2.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For 80k" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(80000, 784)\n", + "(80000, 62)\n" + ] + } + ], + "source": [ + "train_images3 = train_images[:80000,:]\n", + "print(train_images3.shape)\n", + "train_labels3 = train_labels[:80000,:]\n", + "print(train_labels3.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For 240k" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(240000, 784)\n", + "(240000, 62)\n" + ] + } + ], + "source": [ + "train_images4 = train_images[:240000,:]\n", + "print(train_images4.shape)\n", + "train_labels4 = train_labels[:240000,:]\n", + "print(train_labels4.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Model Evaluation" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": {}, + "outputs": [], + "source": [ + "classifier1 = Sequential()\n", + "classifier1.add(Reshape((28,28,1), input_shape=(784,)))\n", + "classifier1.add(Convolution2D(32,(3,3),activation='relu'))\n", + "classifier1.add(MaxPooling2D(pool_size=(2, 2)))\n", + "classifier1.add(Flatten())\n", + "#Hidden Layer\n", + "classifier1.add(Dense(units = 512 ,activation = 'relu'))\n", + "classifier1.add(Dropout(0.5))\n", + "#Output Layer\n", + "classifier1.add(Dense(62, activation='softmax'))" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": {}, + "outputs": [], + "source": [ + "classifier1.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train on 9000 samples, validate on 116323 samples\n", + "Epoch 1/30\n", + "9000/9000 [==============================] - 74s 8ms/step - loss: 2.5015 - acc: 0.3982 - val_loss: 1.5095 - val_acc: 0.6103\n", + "Epoch 2/30\n", + "9000/9000 [==============================] - 50s 6ms/step - loss: 1.4702 - acc: 0.6031 - val_loss: 1.1757 - val_acc: 0.6619\n", + "Epoch 3/30\n", + "9000/9000 [==============================] - 49s 5ms/step - loss: 1.1971 - acc: 0.6517 - val_loss: 1.0371 - val_acc: 0.6987\n", + "Epoch 4/30\n", + "9000/9000 [==============================] - 49s 5ms/step - loss: 1.0256 - acc: 0.6953 - val_loss: 0.9266 - val_acc: 0.7252\n", + "Epoch 5/30\n", + "9000/9000 [==============================] - 50s 6ms/step - loss: 0.8959 - acc: 0.7274 - val_loss: 0.8599 - val_acc: 0.7394\n", + "Epoch 6/30\n", + "9000/9000 [==============================] - 49s 5ms/step - loss: 0.8049 - acc: 0.7467 - val_loss: 0.8076 - val_acc: 0.7525\n", + "Epoch 7/30\n", + "9000/9000 [==============================] - 49s 5ms/step - loss: 0.7172 - acc: 0.7681 - val_loss: 0.7811 - val_acc: 0.7595\n", + "Epoch 8/30\n", + "9000/9000 [==============================] - 49s 5ms/step - loss: 0.6444 - acc: 0.7907 - val_loss: 0.7451 - val_acc: 0.7693\n", + "Epoch 9/30\n", + "9000/9000 [==============================] - 49s 5ms/step - loss: 0.5935 - acc: 0.8003 - val_loss: 0.7312 - val_acc: 0.7725\n", + "Epoch 10/30\n", + "9000/9000 [==============================] - 49s 5ms/step - loss: 0.5595 - acc: 0.8104 - val_loss: 0.7218 - val_acc: 0.7720\n", + "Epoch 11/30\n", + "9000/9000 [==============================] - 49s 5ms/step - loss: 0.5304 - acc: 0.8223 - val_loss: 0.7158 - val_acc: 0.7716\n", + "Epoch 12/30\n", + "9000/9000 [==============================] - 49s 5ms/step - loss: 0.4830 - acc: 0.8363 - val_loss: 0.7113 - val_acc: 0.7791\n", + "Epoch 13/30\n", + "9000/9000 [==============================] - 49s 5ms/step - loss: 0.4609 - acc: 0.8392 - val_loss: 0.6979 - val_acc: 0.7803\n", + "Epoch 14/30\n", + "9000/9000 [==============================] - 49s 5ms/step - loss: 0.4189 - acc: 0.8540 - val_loss: 0.7093 - val_acc: 0.7758\n", + "Epoch 15/30\n", + "9000/9000 [==============================] - 49s 5ms/step - loss: 0.3991 - acc: 0.8589 - val_loss: 0.6986 - val_acc: 0.7828\n", + "Epoch 16/30\n", + "9000/9000 [==============================] - 49s 5ms/step - loss: 0.3800 - acc: 0.8642 - val_loss: 0.6893 - val_acc: 0.7820\n", + "Epoch 17/30\n", + "9000/9000 [==============================] - 49s 5ms/step - loss: 0.3659 - acc: 0.8670 - val_loss: 0.6808 - val_acc: 0.7890\n", + "Epoch 18/30\n", + "9000/9000 [==============================] - 49s 5ms/step - loss: 0.3406 - acc: 0.8788 - val_loss: 0.6968 - val_acc: 0.7881\n", + "Epoch 19/30\n", + "9000/9000 [==============================] - 48s 5ms/step - loss: 0.3152 - acc: 0.8841 - val_loss: 0.6945 - val_acc: 0.7888\n", + "Epoch 20/30\n", + "9000/9000 [==============================] - 49s 5ms/step - loss: 0.3092 - acc: 0.8882 - val_loss: 0.7078 - val_acc: 0.7886\n", + "Epoch 21/30\n", + "9000/9000 [==============================] - 49s 5ms/step - loss: 0.2950 - acc: 0.8881 - val_loss: 0.7126 - val_acc: 0.7859\n", + "Epoch 22/30\n", + "9000/9000 [==============================] - 49s 5ms/step - loss: 0.2833 - acc: 0.8956 - val_loss: 0.7046 - val_acc: 0.7910\n", + "Epoch 23/30\n", + "9000/9000 [==============================] - 49s 5ms/step - loss: 0.2699 - acc: 0.8986 - val_loss: 0.7058 - val_acc: 0.7894\n", + "Epoch 24/30\n", + "9000/9000 [==============================] - 48s 5ms/step - loss: 0.2590 - acc: 0.9081 - val_loss: 0.7230 - val_acc: 0.7894\n", + "Epoch 25/30\n", + "9000/9000 [==============================] - 49s 5ms/step - loss: 0.2520 - acc: 0.9039 - val_loss: 0.7302 - val_acc: 0.7882\n", + "Epoch 26/30\n", + "9000/9000 [==============================] - 49s 5ms/step - loss: 0.2471 - acc: 0.9111 - val_loss: 0.7191 - val_acc: 0.7913\n", + "Epoch 27/30\n", + "9000/9000 [==============================] - 49s 5ms/step - loss: 0.2356 - acc: 0.9151 - val_loss: 0.7449 - val_acc: 0.7914\n", + "Epoch 28/30\n", + "9000/9000 [==============================] - 49s 5ms/step - loss: 0.2291 - acc: 0.9144 - val_loss: 0.7304 - val_acc: 0.7911\n", + "Epoch 29/30\n", + "9000/9000 [==============================] - 49s 5ms/step - loss: 0.2198 - acc: 0.9182 - val_loss: 0.7549 - val_acc: 0.7879\n", + "Epoch 30/30\n", + "9000/9000 [==============================] - 49s 5ms/step - loss: 0.2218 - acc: 0.9162 - val_loss: 0.7555 - val_acc: 0.7861\n" + ] + } + ], + "source": [ + "history1 = classifier1.fit(train_images1,train_labels1,validation_data=(test_images, test_labels), batch_size=256, epochs=30)" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "116323/116323 [==============================] - 53s 453us/step\n" + ] + }, + { + "data": { + "text/plain": [ + "0.7860526293171566" + ] + }, + "execution_count": 82, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "_, test_acc1 = classifier1.evaluate(test_images, test_labels)\n", + "test_acc1" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [], + "source": [ + "classifier2 = Sequential()\n", + "classifier2.add(Reshape((28,28,1), input_shape=(784,)))\n", + "classifier2.add(Convolution2D(32,(3,3),activation='relu'))\n", + "classifier2.add(MaxPooling2D(pool_size=(2, 2)))\n", + "classifier2.add(Flatten())\n", + "#Hidden Layer\n", + "classifier2.add(Dense(units = 512 ,activation = 'relu'))\n", + "classifier2.add(Dropout(0.5))\n", + "#Output Layer\n", + "classifier2.add(Dense(62, activation='softmax'))" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": {}, + "outputs": [], + "source": [ + "classifier2.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train on 27000 samples, validate on 116323 samples\n", + "Epoch 1/30\n", + "27000/27000 [==============================] - 71s 3ms/step - loss: 1.8154 - acc: 0.5344 - val_loss: 1.0308 - val_acc: 0.7059\n", + "Epoch 2/30\n", + "27000/27000 [==============================] - 70s 3ms/step - loss: 1.0337 - acc: 0.6964 - val_loss: 0.7876 - val_acc: 0.7591\n", + "Epoch 3/30\n", + "27000/27000 [==============================] - 69s 3ms/step - loss: 0.8142 - acc: 0.7460 - val_loss: 0.6817 - val_acc: 0.7854\n", + "Epoch 4/30\n", + "27000/27000 [==============================] - 69s 3ms/step - loss: 0.6937 - acc: 0.7799 - val_loss: 0.6203 - val_acc: 0.8005\n", + "Epoch 5/30\n", + "27000/27000 [==============================] - 70s 3ms/step - loss: 0.6207 - acc: 0.7960 - val_loss: 0.5898 - val_acc: 0.8081\n", + "Epoch 6/30\n", + "27000/27000 [==============================] - 70s 3ms/step - loss: 0.5666 - acc: 0.8114 - val_loss: 0.5688 - val_acc: 0.8124\n", + "Epoch 7/30\n", + "27000/27000 [==============================] - 69s 3ms/step - loss: 0.5298 - acc: 0.8190 - val_loss: 0.5579 - val_acc: 0.8153\n", + "Epoch 8/30\n", + "27000/27000 [==============================] - 69s 3ms/step - loss: 0.4953 - acc: 0.8293 - val_loss: 0.5472 - val_acc: 0.8187\n", + "Epoch 9/30\n", + "27000/27000 [==============================] - 69s 3ms/step - loss: 0.4679 - acc: 0.8351 - val_loss: 0.5372 - val_acc: 0.8215\n", + "Epoch 10/30\n", + "27000/27000 [==============================] - 70s 3ms/step - loss: 0.4406 - acc: 0.8444 - val_loss: 0.5402 - val_acc: 0.8217\n", + "Epoch 11/30\n", + "27000/27000 [==============================] - 69s 3ms/step - loss: 0.4221 - acc: 0.8487 - val_loss: 0.5384 - val_acc: 0.8197\n", + "Epoch 12/30\n", + "27000/27000 [==============================] - 69s 3ms/step - loss: 0.4034 - acc: 0.8546 - val_loss: 0.5311 - val_acc: 0.8244\n", + "Epoch 13/30\n", + "27000/27000 [==============================] - 69s 3ms/step - loss: 0.3872 - acc: 0.8578 - val_loss: 0.5383 - val_acc: 0.8220\n", + "Epoch 14/30\n", + "27000/27000 [==============================] - 70s 3ms/step - loss: 0.3701 - acc: 0.8648 - val_loss: 0.5301 - val_acc: 0.8232\n", + "Epoch 15/30\n", + "27000/27000 [==============================] - 70s 3ms/step - loss: 0.3551 - acc: 0.8699 - val_loss: 0.5364 - val_acc: 0.8206\n", + "Epoch 16/30\n", + "27000/27000 [==============================] - 69s 3ms/step - loss: 0.3420 - acc: 0.8717 - val_loss: 0.5424 - val_acc: 0.8250\n", + "Epoch 17/30\n", + "27000/27000 [==============================] - 69s 3ms/step - loss: 0.3315 - acc: 0.8760 - val_loss: 0.5498 - val_acc: 0.8225\n", + "Epoch 18/30\n", + "27000/27000 [==============================] - 70s 3ms/step - loss: 0.3176 - acc: 0.8811 - val_loss: 0.5434 - val_acc: 0.8241\n", + "Epoch 19/30\n", + "27000/27000 [==============================] - 70s 3ms/step - loss: 0.3049 - acc: 0.8847 - val_loss: 0.5530 - val_acc: 0.8249\n", + "Epoch 20/30\n", + "27000/27000 [==============================] - 70s 3ms/step - loss: 0.2984 - acc: 0.8870 - val_loss: 0.5558 - val_acc: 0.8264\n", + "Epoch 21/30\n", + "27000/27000 [==============================] - 69s 3ms/step - loss: 0.2900 - acc: 0.8910 - val_loss: 0.5573 - val_acc: 0.8237\n", + "Epoch 22/30\n", + "27000/27000 [==============================] - 70s 3ms/step - loss: 0.2812 - acc: 0.8934 - val_loss: 0.5613 - val_acc: 0.8246\n", + "Epoch 23/30\n", + "27000/27000 [==============================] - 69s 3ms/step - loss: 0.2736 - acc: 0.8960 - val_loss: 0.5657 - val_acc: 0.8242\n", + "Epoch 24/30\n", + "27000/27000 [==============================] - 69s 3ms/step - loss: 0.2660 - acc: 0.8999 - val_loss: 0.5746 - val_acc: 0.8233\n", + "Epoch 25/30\n", + "27000/27000 [==============================] - 69s 3ms/step - loss: 0.2532 - acc: 0.9024 - val_loss: 0.5768 - val_acc: 0.8232\n", + "Epoch 26/30\n", + "27000/27000 [==============================] - 69s 3ms/step - loss: 0.2496 - acc: 0.9016 - val_loss: 0.5886 - val_acc: 0.8229\n", + "Epoch 27/30\n", + "27000/27000 [==============================] - 69s 3ms/step - loss: 0.2408 - acc: 0.9093 - val_loss: 0.5955 - val_acc: 0.8226\n", + "Epoch 28/30\n", + "27000/27000 [==============================] - 69s 3ms/step - loss: 0.2375 - acc: 0.9094 - val_loss: 0.5967 - val_acc: 0.8257\n", + "Epoch 29/30\n", + "27000/27000 [==============================] - 70s 3ms/step - loss: 0.2293 - acc: 0.9101 - val_loss: 0.6036 - val_acc: 0.8239\n", + "Epoch 30/30\n", + "27000/27000 [==============================] - 69s 3ms/step - loss: 0.2265 - acc: 0.9112 - val_loss: 0.6190 - val_acc: 0.8219\n" + ] + } + ], + "source": [ + "history2 = classifier2.fit(train_images2,train_labels2,validation_data=(test_images, test_labels), batch_size=256, epochs=30)" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "116323/116323 [==============================] - 52s 451us/step\n" + ] + }, + { + "data": { + "text/plain": [ + "0.8218666987617205" + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "_, test_acc2 = classifier2.evaluate(test_images, test_labels)\n", + "test_acc2" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": {}, + "outputs": [], + "source": [ + "classifier3 = Sequential()\n", + "classifier3.add(Reshape((28,28,1), input_shape=(784,)))\n", + "classifier3.add(Convolution2D(32,(3,3),activation='relu'))\n", + "classifier3.add(MaxPooling2D(pool_size=(2, 2)))\n", + "classifier3.add(Flatten())\n", + "#Hidden Layer\n", + "classifier3.add(Dense(units = 512 ,activation = 'relu'))\n", + "classifier3.add(Dropout(0.5))\n", + "#Output Layer\n", + "classifier3.add(Dense(62, activation='softmax'))" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": {}, + "outputs": [], + "source": [ + "classifier3.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train on 80000 samples, validate on 116323 samples\n", + "Epoch 1/30\n", + "80000/80000 [==============================] - 132s 2ms/step - loss: 1.2414 - acc: 0.6577 - val_loss: 0.6973 - val_acc: 0.7820\n", + "Epoch 2/30\n", + "80000/80000 [==============================] - 131s 2ms/step - loss: 0.7157 - acc: 0.7760 - val_loss: 0.5623 - val_acc: 0.8158\n", + "Epoch 3/30\n", + "80000/80000 [==============================] - 130s 2ms/step - loss: 0.6010 - acc: 0.8027 - val_loss: 0.5112 - val_acc: 0.8290\n", + "Epoch 4/30\n", + "80000/80000 [==============================] - 130s 2ms/step - loss: 0.5415 - acc: 0.8183 - val_loss: 0.4947 - val_acc: 0.8301\n", + "Epoch 5/30\n", + "80000/80000 [==============================] - 130s 2ms/step - loss: 0.5073 - acc: 0.8265 - val_loss: 0.4755 - val_acc: 0.8380\n", + "Epoch 6/30\n", + "80000/80000 [==============================] - 130s 2ms/step - loss: 0.4806 - acc: 0.8334 - val_loss: 0.4723 - val_acc: 0.8370\n", + "Epoch 7/30\n", + "80000/80000 [==============================] - 130s 2ms/step - loss: 0.4573 - acc: 0.8401 - val_loss: 0.4604 - val_acc: 0.8416\n", + "Epoch 8/30\n", + "80000/80000 [==============================] - 131s 2ms/step - loss: 0.4399 - acc: 0.8428 - val_loss: 0.4587 - val_acc: 0.8408\n", + "Epoch 9/30\n", + "80000/80000 [==============================] - 130s 2ms/step - loss: 0.4249 - acc: 0.8477 - val_loss: 0.4541 - val_acc: 0.8436\n", + "Epoch 10/30\n", + "80000/80000 [==============================] - 131s 2ms/step - loss: 0.4112 - acc: 0.8507 - val_loss: 0.4569 - val_acc: 0.8420\n", + "Epoch 11/30\n", + "80000/80000 [==============================] - 129s 2ms/step - loss: 0.3974 - acc: 0.8543 - val_loss: 0.4499 - val_acc: 0.8457\n", + "Epoch 12/30\n", + "80000/80000 [==============================] - 130s 2ms/step - loss: 0.3842 - acc: 0.8583 - val_loss: 0.4551 - val_acc: 0.8451\n", + "Epoch 13/30\n", + "80000/80000 [==============================] - 130s 2ms/step - loss: 0.3754 - acc: 0.8612 - val_loss: 0.4545 - val_acc: 0.8438\n", + "Epoch 14/30\n", + "80000/80000 [==============================] - 130s 2ms/step - loss: 0.3621 - acc: 0.8665 - val_loss: 0.4519 - val_acc: 0.8449\n", + "Epoch 15/30\n", + "80000/80000 [==============================] - 130s 2ms/step - loss: 0.3510 - acc: 0.8677 - val_loss: 0.4576 - val_acc: 0.8459\n", + "Epoch 16/30\n", + "80000/80000 [==============================] - 130s 2ms/step - loss: 0.3415 - acc: 0.8716 - val_loss: 0.4614 - val_acc: 0.8446\n", + "Epoch 17/30\n", + "80000/80000 [==============================] - 130s 2ms/step - loss: 0.3320 - acc: 0.8748 - val_loss: 0.4613 - val_acc: 0.8435\n", + "Epoch 18/30\n", + "80000/80000 [==============================] - 130s 2ms/step - loss: 0.3236 - acc: 0.8772 - val_loss: 0.4601 - val_acc: 0.8449\n", + "Epoch 19/30\n", + "80000/80000 [==============================] - 130s 2ms/step - loss: 0.3155 - acc: 0.8796 - val_loss: 0.4693 - val_acc: 0.8460\n", + "Epoch 20/30\n", + "80000/80000 [==============================] - 130s 2ms/step - loss: 0.3071 - acc: 0.8827 - val_loss: 0.4700 - val_acc: 0.8454\n", + "Epoch 21/30\n", + "80000/80000 [==============================] - 130s 2ms/step - loss: 0.2964 - acc: 0.8869 - val_loss: 0.4756 - val_acc: 0.8447\n", + "Epoch 22/30\n", + "80000/80000 [==============================] - 130s 2ms/step - loss: 0.2903 - acc: 0.8880 - val_loss: 0.4766 - val_acc: 0.8435\n", + "Epoch 23/30\n", + "80000/80000 [==============================] - 131s 2ms/step - loss: 0.2834 - acc: 0.8901 - val_loss: 0.4833 - val_acc: 0.8439\n", + "Epoch 24/30\n", + "80000/80000 [==============================] - 130s 2ms/step - loss: 0.2767 - acc: 0.8928 - val_loss: 0.4850 - val_acc: 0.8448\n", + "Epoch 25/30\n", + "80000/80000 [==============================] - 130s 2ms/step - loss: 0.2682 - acc: 0.8950 - val_loss: 0.4916 - val_acc: 0.8448\n", + "Epoch 26/30\n", + "80000/80000 [==============================] - 135s 2ms/step - loss: 0.2621 - acc: 0.8986 - val_loss: 0.4984 - val_acc: 0.8449\n", + "Epoch 27/30\n", + "80000/80000 [==============================] - 130s 2ms/step - loss: 0.2576 - acc: 0.9008 - val_loss: 0.5081 - val_acc: 0.8436\n", + "Epoch 28/30\n", + "80000/80000 [==============================] - 130s 2ms/step - loss: 0.2475 - acc: 0.9034 - val_loss: 0.5074 - val_acc: 0.8428\n", + "Epoch 29/30\n", + "80000/80000 [==============================] - 130s 2ms/step - loss: 0.2413 - acc: 0.9064 - val_loss: 0.5251 - val_acc: 0.8417\n", + "Epoch 30/30\n", + "80000/80000 [==============================] - 129s 2ms/step - loss: 0.2373 - acc: 0.9069 - val_loss: 0.5232 - val_acc: 0.8432\n" + ] + } + ], + "source": [ + "history3 = classifier3.fit(train_images3,train_labels3,validation_data=(test_images, test_labels), batch_size=256, epochs=30)" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "116323/116323 [==============================] - 54s 467us/step\n" + ] + }, + { + "data": { + "text/plain": [ + "0.8432038375901585" + ] + }, + "execution_count": 90, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "_, test_acc3 = classifier3.evaluate(test_images, test_labels)\n", + "test_acc3" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": {}, + "outputs": [], + "source": [ + "classifier4 = Sequential()\n", + "classifier4.add(Reshape((28,28,1), input_shape=(784,)))\n", + "classifier4.add(Convolution2D(32,(3,3),activation='relu'))\n", + "classifier4.add(MaxPooling2D(pool_size=(2, 2)))\n", + "classifier4.add(Flatten())\n", + "#Hidden Layer\n", + "classifier4.add(Dense(units = 512 ,activation = 'relu'))\n", + "classifier4.add(Dropout(0.5))\n", + "#Output Layer\n", + "classifier4.add(Dense(62, activation='softmax'))" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": {}, + "outputs": [], + "source": [ + "classifier4.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train on 240000 samples, validate on 116323 samples\n", + "Epoch 1/30\n", + "240000/240000 [==============================] - 325s 1ms/step - loss: 0.8783 - acc: 0.7393 - val_loss: 0.5121 - val_acc: 0.8275\n", + "Epoch 2/30\n", + "240000/240000 [==============================] - 313s 1ms/step - loss: 0.5544 - acc: 0.8153 - val_loss: 0.4667 - val_acc: 0.8387\n", + "Epoch 3/30\n", + "240000/240000 [==============================] - 314s 1ms/step - loss: 0.5010 - acc: 0.8282 - val_loss: 0.4390 - val_acc: 0.8454\n", + "Epoch 4/30\n", + "240000/240000 [==============================] - 314s 1ms/step - loss: 0.4713 - acc: 0.8367 - val_loss: 0.4242 - val_acc: 0.8495\n", + "Epoch 5/30\n", + "240000/240000 [==============================] - 314s 1ms/step - loss: 0.4507 - acc: 0.8419 - val_loss: 0.4142 - val_acc: 0.8524\n", + "Epoch 6/30\n", + "240000/240000 [==============================] - 312s 1ms/step - loss: 0.4338 - acc: 0.8452 - val_loss: 0.4106 - val_acc: 0.8534\n", + "Epoch 7/30\n", + "240000/240000 [==============================] - 313s 1ms/step - loss: 0.4200 - acc: 0.8495 - val_loss: 0.4085 - val_acc: 0.8548\n", + "Epoch 8/30\n", + "240000/240000 [==============================] - 313s 1ms/step - loss: 0.4060 - acc: 0.8527 - val_loss: 0.4021 - val_acc: 0.8563\n", + "Epoch 9/30\n", + "240000/240000 [==============================] - 314s 1ms/step - loss: 0.3939 - acc: 0.8572 - val_loss: 0.4035 - val_acc: 0.8547\n", + "Epoch 10/30\n", + "240000/240000 [==============================] - 315s 1ms/step - loss: 0.3840 - acc: 0.8590 - val_loss: 0.4014 - val_acc: 0.8565\n", + "Epoch 11/30\n", + "240000/240000 [==============================] - 318s 1ms/step - loss: 0.3716 - acc: 0.8622 - val_loss: 0.4027 - val_acc: 0.8573\n", + "Epoch 12/30\n", + "240000/240000 [==============================] - 318s 1ms/step - loss: 0.3612 - acc: 0.8658 - val_loss: 0.4043 - val_acc: 0.8574\n", + "Epoch 13/30\n", + "240000/240000 [==============================] - 317s 1ms/step - loss: 0.3520 - acc: 0.8681 - val_loss: 0.4022 - val_acc: 0.8571\n", + "Epoch 14/30\n", + "240000/240000 [==============================] - 315s 1ms/step - loss: 0.3430 - acc: 0.8710 - val_loss: 0.4014 - val_acc: 0.8577\n", + "Epoch 15/30\n", + "240000/240000 [==============================] - 314s 1ms/step - loss: 0.3339 - acc: 0.8733 - val_loss: 0.4068 - val_acc: 0.8584\n", + "Epoch 16/30\n", + "240000/240000 [==============================] - 313s 1ms/step - loss: 0.3248 - acc: 0.8769 - val_loss: 0.4079 - val_acc: 0.8568\n", + "Epoch 17/30\n", + "240000/240000 [==============================] - 313s 1ms/step - loss: 0.3178 - acc: 0.8788 - val_loss: 0.4118 - val_acc: 0.8586\n", + "Epoch 18/30\n", + "240000/240000 [==============================] - 314s 1ms/step - loss: 0.3096 - acc: 0.8816 - val_loss: 0.4178 - val_acc: 0.8581\n", + "Epoch 19/30\n", + "240000/240000 [==============================] - 313s 1ms/step - loss: 0.3028 - acc: 0.8841 - val_loss: 0.4156 - val_acc: 0.8568\n", + "Epoch 20/30\n", + "240000/240000 [==============================] - 313s 1ms/step - loss: 0.2938 - acc: 0.8864 - val_loss: 0.4204 - val_acc: 0.8565\n", + "Epoch 21/30\n", + "240000/240000 [==============================] - 313s 1ms/step - loss: 0.2869 - acc: 0.8892 - val_loss: 0.4243 - val_acc: 0.8570\n", + "Epoch 22/30\n", + "240000/240000 [==============================] - 312s 1ms/step - loss: 0.2808 - acc: 0.8912 - val_loss: 0.4288 - val_acc: 0.8572\n", + "Epoch 23/30\n", + "240000/240000 [==============================] - 313s 1ms/step - loss: 0.2753 - acc: 0.8931 - val_loss: 0.4357 - val_acc: 0.8565\n", + "Epoch 24/30\n", + "240000/240000 [==============================] - 313s 1ms/step - loss: 0.2682 - acc: 0.8955 - val_loss: 0.4406 - val_acc: 0.8556\n", + "Epoch 25/30\n", + "240000/240000 [==============================] - 312s 1ms/step - loss: 0.2613 - acc: 0.8986 - val_loss: 0.4464 - val_acc: 0.8570\n", + "Epoch 26/30\n", + "240000/240000 [==============================] - 314s 1ms/step - loss: 0.2556 - acc: 0.9006 - val_loss: 0.4514 - val_acc: 0.8554\n", + "Epoch 27/30\n", + "240000/240000 [==============================] - 313s 1ms/step - loss: 0.2498 - acc: 0.9023 - val_loss: 0.4551 - val_acc: 0.8555\n", + "Epoch 28/30\n", + "240000/240000 [==============================] - 313s 1ms/step - loss: 0.2438 - acc: 0.9044 - val_loss: 0.4614 - val_acc: 0.8559\n", + "Epoch 29/30\n", + "240000/240000 [==============================] - 313s 1ms/step - loss: 0.2395 - acc: 0.9061 - val_loss: 0.4683 - val_acc: 0.8555\n", + "Epoch 30/30\n", + "240000/240000 [==============================] - 314s 1ms/step - loss: 0.2337 - acc: 0.9084 - val_loss: 0.4744 - val_acc: 0.8545\n" + ] + } + ], + "source": [ + "history4 = classifier4.fit(train_images4,train_labels4,validation_data=(test_images, test_labels), batch_size=256, epochs=30)" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "116323/116323 [==============================] - 53s 454us/step\n" + ] + }, + { + "data": { + "text/plain": [ + "0.8544913731597329" + ] + }, + "execution_count": 94, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "_, test_acc4 = classifier4.evaluate(test_images, test_labels)\n", + "test_acc4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Accuracy Vs Dataset Size" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "metadata": {}, + "outputs": [], + "source": [ + "sizes = [9,27,80,240,627]" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[78.60526293171566,\n", + " 82.18666987617205,\n", + " 84.32038375901585,\n", + " 85.44913731597329,\n", + " 86.24175786387903]" + ] + }, + "execution_count": 108, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "acc =[test_acc1*100,test_acc2*100,test_acc3*100,test_acc4*100,test_acc*100,]\n", + "acc" + ] + }, + { + "cell_type": "code", + "execution_count": 117, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 117, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(10,10))\n", + "plt.title(\"Accuracy Vs Dataset Size\")\n", + "plt.xlabel('Dataset Size(k)')\n", + "plt.ylabel('Test accuracy')\n", + "plt.plot(sizes,acc ,marker='o')\n", + "plt.show" + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['model_classifier']" + ] + }, + "execution_count": 119, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.externals import joblib \n", + "joblib.dump(classifier, 'model_classifier') \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.6.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/aronpereira1999@gmail.com/model_classifier b/aronpereira1999@gmail.com/model_classifier new file mode 100644 index 000000000..156f5a5e7 Binary files /dev/null and b/aronpereira1999@gmail.com/model_classifier differ