Skip to content

Instantly share code, notes, and snippets.

@anandpawara
Last active April 10, 2019 18:47
Show Gist options
  • Save anandpawara/68d5fd9a81616dfebc4e827944f8a833 to your computer and use it in GitHub Desktop.
Save anandpawara/68d5fd9a81616dfebc4e827944f8a833 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Data Preprocessing and data visualization"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib.image as mpimg\n",
"import seaborn as sns\n",
"from scipy.misc import imsave, imread, imresize"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"np.random.seed(2)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.model_selection import train_test_split\n",
"from sklearn.metrics import confusion_matrix\n",
"import itertools"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.5/dist-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n",
" from ._conv import register_converters as _register_converters\n",
"Using TensorFlow backend.\n"
]
}
],
"source": [
"from keras.utils.np_utils import to_categorical\n",
"from keras.models import Sequential\n",
"from keras.layers import Dense,Dropout,Flatten,Conv2D,MaxPool2D"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"from keras.optimizers import RMSprop\n",
"from keras.preprocessing.image import ImageDataGenerator\n",
"from keras.callbacks import ReduceLROnPlateau"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"sns.set(style='white',context='notebook',palette = 'deep')"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"train = pd.read_csv(\"Dataset/train.csv\")\n",
"test = pd.read_csv(\"Dataset/test.csv\")"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"Y_train = train['label']"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"X_train = train.drop(labels = ['label'],axis = 1)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"del train\n"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f164745e668>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"g = sns.countplot(Y_train)\n",
"# Y_train.value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"count 784\n",
"unique 1\n",
"top False\n",
"freq 784\n",
"dtype: object"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X_train.isnull().any().describe()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"count 784\n",
"unique 1\n",
"top False\n",
"freq 784\n",
"dtype: object"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test.isnull().any().describe()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"X_train = X_train/255.0\n",
"test = test / 255.0"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"X_train = X_train.values.reshape(-1,28,28,1)\n",
"test = test.values.reshape(-1,28,28,1)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"Y_train = to_categorical(Y_train,10)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"random_seed = 2"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"X_train,X_val,Y_train,Y_val = train_test_split(X_train,Y_train,test_size = 0.1,random_state = random_seed)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f1647471f98>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"g = plt.imshow(X_train[0][:,:,0])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Setting CNN model"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"# my CNN architechture is In -> [[Conv2D->relu]*2 -> MaxPool2D -> Dropout]*2 -> Flatten -> Dense -> Dropout -> Out\n",
"\n",
"model = Sequential()\n",
"\n",
"model.add(Conv2D(filters = 32, kernel_size = (5,5),padding = 'Same', \n",
" activation ='relu', input_shape = (28,28,1)))\n",
"model.add(Conv2D(filters = 32, kernel_size = (5,5),padding = 'Same', \n",
" activation ='relu'))\n",
"model.add(MaxPool2D(pool_size=(2,2)))\n",
"model.add(Dropout(0.25))\n",
"\n",
"\n",
"model.add(Conv2D(filters = 64, kernel_size = (3,3),padding = 'Same', \n",
" activation ='relu'))\n",
"model.add(Conv2D(filters = 64, kernel_size = (3,3),padding = 'Same', \n",
" activation ='relu'))\n",
"model.add(MaxPool2D(pool_size=(2,2), strides=(2,2)))\n",
"model.add(Dropout(0.25))\n",
"\n",
"\n",
"model.add(Flatten())\n",
"model.add(Dense(256, activation = \"relu\"))\n",
"model.add(Dropout(0.5))\n",
"model.add(Dense(10, activation = \"softmax\"))"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"optimizer = RMSprop(lr = 0.001,rho = 0.9,epsilon = 1e-08,decay=0.0)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"model.compile(optimizer = optimizer ,loss = 'categorical_crossentropy',metrics = [\"accuracy\"])"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [],
"source": [
"learning_rate_reduction = ReduceLROnPlateau(\n",
" monitor = \"val_acc\",\n",
" verbose = 1,\n",
" factor = 0.5,\n",
" min_lr = 0.00001\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"epochs = 30\n",
"batch_size = 86"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train on 37800 samples, validate on 4200 samples\n",
"Epoch 1/30\n",
" - 8s - loss: 0.2374 - acc: 0.9246 - val_loss: 0.0613 - val_acc: 0.9805\n",
"Epoch 2/30\n",
" - 5s - loss: 0.0735 - acc: 0.9773 - val_loss: 0.0615 - val_acc: 0.9814\n",
"Epoch 3/30\n",
" - 5s - loss: 0.0538 - acc: 0.9836 - val_loss: 0.0448 - val_acc: 0.9883\n",
"Epoch 4/30\n",
" - 5s - loss: 0.0472 - acc: 0.9865 - val_loss: 0.0355 - val_acc: 0.9895\n",
"Epoch 5/30\n",
" - 5s - loss: 0.0404 - acc: 0.9877 - val_loss: 0.0314 - val_acc: 0.9902\n",
"Epoch 6/30\n",
" - 5s - loss: 0.0360 - acc: 0.9891 - val_loss: 0.0270 - val_acc: 0.9929\n",
"Epoch 7/30\n",
" - 5s - loss: 0.0339 - acc: 0.9904 - val_loss: 0.0299 - val_acc: 0.9910\n",
"Epoch 8/30\n",
" - 5s - loss: 0.0318 - acc: 0.9905 - val_loss: 0.0318 - val_acc: 0.9919\n",
"Epoch 9/30\n",
" - 5s - loss: 0.0292 - acc: 0.9907 - val_loss: 0.0300 - val_acc: 0.9914\n",
"Epoch 10/30\n",
" - 5s - loss: 0.0279 - acc: 0.9910 - val_loss: 0.0282 - val_acc: 0.9936\n",
"Epoch 11/30\n",
" - 5s - loss: 0.0285 - acc: 0.9913 - val_loss: 0.0320 - val_acc: 0.9912\n",
"Epoch 12/30\n",
" - 5s - loss: 0.0284 - acc: 0.9917 - val_loss: 0.0301 - val_acc: 0.9921\n",
"Epoch 13/30\n",
" - 5s - loss: 0.0267 - acc: 0.9926 - val_loss: 0.0235 - val_acc: 0.9943\n",
"Epoch 14/30\n",
" - 5s - loss: 0.0253 - acc: 0.9924 - val_loss: 0.0315 - val_acc: 0.9943\n",
"Epoch 15/30\n",
" - 5s - loss: 0.0271 - acc: 0.9921 - val_loss: 0.0333 - val_acc: 0.9926\n",
"Epoch 16/30\n",
" - 5s - loss: 0.0285 - acc: 0.9925 - val_loss: 0.0324 - val_acc: 0.9924\n",
"Epoch 17/30\n",
" - 5s - loss: 0.0298 - acc: 0.9921 - val_loss: 0.0287 - val_acc: 0.9936\n",
"Epoch 18/30\n",
" - 5s - loss: 0.0294 - acc: 0.9922 - val_loss: 0.0364 - val_acc: 0.9910\n",
"Epoch 19/30\n",
" - 5s - loss: 0.0277 - acc: 0.9926 - val_loss: 0.0297 - val_acc: 0.9933\n",
"Epoch 20/30\n",
" - 5s - loss: 0.0302 - acc: 0.9924 - val_loss: 0.0342 - val_acc: 0.9931\n",
"Epoch 21/30\n",
" - 5s - loss: 0.0289 - acc: 0.9922 - val_loss: 0.0351 - val_acc: 0.9929\n",
"Epoch 22/30\n",
" - 5s - loss: 0.0301 - acc: 0.9923 - val_loss: 0.0311 - val_acc: 0.9926\n",
"Epoch 23/30\n",
" - 5s - loss: 0.0300 - acc: 0.9921 - val_loss: 0.0367 - val_acc: 0.9917\n",
"Epoch 24/30\n",
" - 5s - loss: 0.0327 - acc: 0.9914 - val_loss: 0.0510 - val_acc: 0.9902\n",
"Epoch 25/30\n",
" - 5s - loss: 0.0310 - acc: 0.9922 - val_loss: 0.0289 - val_acc: 0.9926\n",
"Epoch 26/30\n",
" - 5s - loss: 0.0332 - acc: 0.9915 - val_loss: 0.0353 - val_acc: 0.9902\n",
"Epoch 27/30\n",
" - 5s - loss: 0.0320 - acc: 0.9916 - val_loss: 0.0474 - val_acc: 0.9905\n",
"Epoch 28/30\n",
" - 5s - loss: 0.0332 - acc: 0.9918 - val_loss: 0.0283 - val_acc: 0.9931\n",
"Epoch 29/30\n",
" - 5s - loss: 0.0338 - acc: 0.9917 - val_loss: 0.0269 - val_acc: 0.9933\n",
"Epoch 30/30\n",
" - 5s - loss: 0.0360 - acc: 0.9913 - val_loss: 0.0439 - val_acc: 0.9902\n"
]
}
],
"source": [
"history = model.fit(\n",
" X_train,\n",
" Y_train,\n",
" batch_size = batch_size,\n",
" epochs = epochs,\n",
" validation_data = (X_val,Y_val),\n",
" verbose = 2\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f1647229550>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"g = plt.imshow(X_val[0][:,:,0])"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [],
"source": [
"def plot_confusion_matrix(cm, classes,\n",
" normalize=False,\n",
" title='Confusion matrix',\n",
" cmap=plt.cm.Blues):\n",
" \"\"\"\n",
" This function prints and plots the confusion matrix.\n",
" Normalization can be applied by setting `normalize=True`.\n",
" \"\"\"\n",
" plt.imshow(cm, interpolation='nearest', cmap=cmap)\n",
" plt.title(title)\n",
" plt.colorbar()\n",
" tick_marks = np.arange(len(classes))\n",
" plt.xticks(tick_marks, classes, rotation=45)\n",
" plt.yticks(tick_marks, classes)\n",
"\n",
" if normalize:\n",
" cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]\n",
"\n",
" thresh = cm.max() / 2.\n",
" for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n",
" plt.text(j, i, cm[i, j],\n",
" horizontalalignment=\"center\",\n",
" color=\"white\" if cm[i, j] > thresh else \"black\")\n",
"\n",
" plt.tight_layout()\n",
" plt.ylabel('True label')\n",
" plt.xlabel('Predicted label')"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f1647492e48>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"Y_pred = model.predict(X_val)\n",
"# Convert predictions classes to one hot vectors \n",
"Y_pred_classes = np.argmax(Y_pred,axis = 1) \n",
"# Convert validation observations to one hot vectors\n",
"Y_true = np.argmax(Y_val,axis = 1) \n",
"# compute the confusion matrix\n",
"confusion_mtx = confusion_matrix(Y_true, Y_pred_classes) \n",
"# plot the confusion matrix\n",
"plot_confusion_matrix(confusion_mtx, classes = range(10)) "
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"6\n"
]
}
],
"source": [
"results = model.predict(X_val)\n",
"results = np.argmax(results,axis =1)\n",
"results = pd.Series(results,name=\"Label\")\n",
"print(results[0])"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.5/dist-packages/ipykernel_launcher.py:1: DeprecationWarning: `imread` is deprecated!\n",
"`imread` is deprecated in SciPy 1.0.0, and will be removed in 1.2.0.\n",
"Use ``imageio.imread`` instead.\n",
" \"\"\"Entry point for launching an IPython kernel.\n"
]
}
],
"source": [
"x = imread(\"output.png\",mode = \"L\")"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [],
"source": [
"x = np.invert(x)"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.5/dist-packages/ipykernel_launcher.py:1: DeprecationWarning: `imresize` is deprecated!\n",
"`imresize` is deprecated in SciPy 1.0.0, and will be removed in 1.2.0.\n",
"Use ``skimage.transform.resize`` instead.\n",
" \"\"\"Entry point for launching an IPython kernel.\n"
]
}
],
"source": [
"x = imresize(x,(28,28))"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [],
"source": [
"x = x.reshape(1,28,28,1)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [],
"source": [
"results = model.predict(x)\n"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"7\n"
]
}
],
"source": [
"results = np.argmax(results,axis =1)\n",
"results = pd.Series(results,name=\"Label\")\n",
"print(results[0])"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [],
"source": [
"model.save(\"first_try.h5\")"
]
},
{
"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.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment