519 lines
536 KiB
Text
519 lines
536 KiB
Text
|
|
{
|
||
|
|
"cells": [
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 55,
|
||
|
|
"id": "91e25d02",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"from keras.models import Sequential\n",
|
||
|
|
"from keras.layers import Convolution2D\n",
|
||
|
|
"from keras.layers import MaxPooling2D\n",
|
||
|
|
"from keras.layers import Flatten\n",
|
||
|
|
"from keras.layers import Dense, Dropout\n",
|
||
|
|
"from sklearn import metrics\n",
|
||
|
|
"from keras import optimizers\n",
|
||
|
|
"import numpy as np\n",
|
||
|
|
"from keras.preprocessing.image import ImageDataGenerator\n",
|
||
|
|
"import matplotlib.pyplot as plt\n",
|
||
|
|
"import matplotlib.pyplot as plt\n",
|
||
|
|
"%matplotlib inline"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 40,
|
||
|
|
"id": "1be79149",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"Python 3.6.13 :: Anaconda, Inc.\r\n"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"!python --version"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 41,
|
||
|
|
"id": "2e4a9f0d",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"def model_maker():\n",
|
||
|
|
"\n",
|
||
|
|
" # Initialing the CNN\n",
|
||
|
|
" classifier = Sequential()\n",
|
||
|
|
"\n",
|
||
|
|
" # Step 1 - Convolution Layer \n",
|
||
|
|
" classifier.add(Convolution2D(32, 3, 3, input_shape = (64, 64, 3), activation = 'relu'))\n",
|
||
|
|
" #classifier.add(Activation = 'relu')\n",
|
||
|
|
" #step 2 - Pooling\n",
|
||
|
|
" classifier.add(MaxPooling2D(pool_size =(2,2)))\n",
|
||
|
|
"\n",
|
||
|
|
" # Adding second convolution layer\n",
|
||
|
|
" classifier.add(Convolution2D(32, 3, 3, activation = 'relu'))\n",
|
||
|
|
" classifier.add(MaxPooling2D(pool_size =(2,2)))\n",
|
||
|
|
"\n",
|
||
|
|
" #Adding 3rd Concolution Layer\n",
|
||
|
|
" classifier.add(Convolution2D(64, 3, 3, activation = 'relu'))\n",
|
||
|
|
" classifier.add(MaxPooling2D(pool_size =(2,2)))\n",
|
||
|
|
"\n",
|
||
|
|
"\n",
|
||
|
|
" #Step 3 - Flattening\n",
|
||
|
|
" classifier.add(Flatten())\n",
|
||
|
|
"\n",
|
||
|
|
" #Step 4 - Full Connection\n",
|
||
|
|
" classifier.add(Dense(256, activation = 'relu'))\n",
|
||
|
|
" classifier.add(Dropout(0.5))\n",
|
||
|
|
" classifier.add(Dense(26, activation = 'softmax'))\n",
|
||
|
|
"\n",
|
||
|
|
" #Compiling The CNN\n",
|
||
|
|
" classifier.compile(\n",
|
||
|
|
" optimizer = optimizers.SGD(lr = 0.01),\n",
|
||
|
|
" loss = 'categorical_crossentropy',\n",
|
||
|
|
" metrics = ['accuracy'])\n",
|
||
|
|
" \n",
|
||
|
|
" return classifier\n"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 42,
|
||
|
|
"id": "a1495543",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stderr",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"/home/priyatham/miniconda3/envs/tf1/lib/python3.6/site-packages/ipykernel_launcher.py:7: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(32, (3, 3), input_shape=(64, 64, 3..., activation=\"relu\")`\n",
|
||
|
|
" import sys\n",
|
||
|
|
"/home/priyatham/miniconda3/envs/tf1/lib/python3.6/site-packages/ipykernel_launcher.py:13: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(32, (3, 3), activation=\"relu\")`\n",
|
||
|
|
" del sys.path[0]\n",
|
||
|
|
"/home/priyatham/miniconda3/envs/tf1/lib/python3.6/site-packages/ipykernel_launcher.py:17: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(64, (3, 3), activation=\"relu\")`\n"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"classifier = model_maker()"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 43,
|
||
|
|
"id": "717d49e1",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"Found 45500 images belonging to 26 classes.\n",
|
||
|
|
"Found 6500 images belonging to 26 classes.\n"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"\n",
|
||
|
|
"train_datagen = ImageDataGenerator(\n",
|
||
|
|
" rescale=1./255,\n",
|
||
|
|
" shear_range=0.2,\n",
|
||
|
|
" zoom_range=0.2,\n",
|
||
|
|
" horizontal_flip=True)\n",
|
||
|
|
"\n",
|
||
|
|
"test_datagen = ImageDataGenerator(rescale=1./255)\n",
|
||
|
|
"\n",
|
||
|
|
"training_set = train_datagen.flow_from_directory(\n",
|
||
|
|
" 'mydata/training_set',\n",
|
||
|
|
" target_size=(64, 64),\n",
|
||
|
|
" batch_size=32,\n",
|
||
|
|
" class_mode='categorical')\n",
|
||
|
|
"\n",
|
||
|
|
"test_set = test_datagen.flow_from_directory(\n",
|
||
|
|
" 'mydata/test_set',\n",
|
||
|
|
" target_size=(64, 64),\n",
|
||
|
|
" batch_size=32,\n",
|
||
|
|
" class_mode='categorical')\n"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 44,
|
||
|
|
"id": "5c65cbcf",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"Epoch 1/2\n",
|
||
|
|
"800/800 [==============================] - 595s 743ms/step - loss: 2.0503 - acc: 0.3796 - val_loss: 0.5859 - val_acc: 0.8481\n",
|
||
|
|
"Epoch 2/2\n",
|
||
|
|
"800/800 [==============================] - 626s 783ms/step - loss: 0.7068 - acc: 0.7628 - val_loss: 0.3196 - val_acc: 0.9162\n"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"\n",
|
||
|
|
"model = classifier.fit_generator(\n",
|
||
|
|
" training_set,\n",
|
||
|
|
" steps_per_epoch=800,\n",
|
||
|
|
" epochs=2,\n",
|
||
|
|
" validation_data = test_set,\n",
|
||
|
|
" validation_steps = 6500\n",
|
||
|
|
" )"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 45,
|
||
|
|
"id": "4b333146",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"text/plain": [
|
||
|
|
"keras.engine.sequential.Sequential"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"execution_count": 45,
|
||
|
|
"metadata": {},
|
||
|
|
"output_type": "execute_result"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"type(classifier)"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 46,
|
||
|
|
"id": "3307904e",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"image/png": "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
|
||
|
|
"text/plain": [
|
||
|
|
"<Figure size 432x288 with 1 Axes>"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"metadata": {
|
||
|
|
"needs_background": "light"
|
||
|
|
},
|
||
|
|
"output_type": "display_data"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"\n",
|
||
|
|
"# summarize history for accuracy\n",
|
||
|
|
"plt.plot(model.history['acc'])\n",
|
||
|
|
"plt.plot(model.history['val_acc'])\n",
|
||
|
|
"plt.title('model accuracy')\n",
|
||
|
|
"plt.ylabel('accuracy')\n",
|
||
|
|
"plt.xlabel('epoch')\n",
|
||
|
|
"plt.legend(['train', 'test'], loc='upper left')\n",
|
||
|
|
"plt.show()\n"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 47,
|
||
|
|
"id": "b3fbf640",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEWCAYAAAB8LwAVAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deXhV5bn+8e+TgYQhjGEMMwRFsYJGBAUEBEWtQ2tr1WrVWrHWCU9rT9vT1tOe4WdtT0VxRMVqW1GrtaUVB5DJCSEgKiqSgGASREKAQMicPL8/9sJuwk5IIDs7w/25rn1lr/lZCeTOet+13m3ujoiISE1xsS5ARESaJwWEiIhEpIAQEZGIFBAiIhKRAkJERCJSQIiISEQKCJFGYGZ/MLP/rue6W8xs2tHuRyTaFBAiIhKRAkJERCJSQEibETTt3G5m75vZfjN7zMx6m9lLZrbPzBabWbew9S8wsw/NbI+ZLTOzkWHLxpjZ2mC7Z4DkGsf6qpmtC7Z9y8y+coQ1X2dm2Wa2y8wWmFm/YL6Z2d1mtsPM9prZB2Y2Klh2rpl9FNSWZ2Y/OqJvmLR5Cghpay4GpgMjgPOBl4CfAT0J/X+4BcDMRgDzgVnBsoXAP8ysnZm1A/4G/BHoDvwl2C/BtmOAecD1QA/gYWCBmSU1pFAzmwr8P+ASoC+wFXg6WHwWMCk4jy7BOgXBsseA6909BRgFLGnIcUUOUEBIWzPH3b9w9zzgdeAdd3/X3UuBF4AxwXrfAl5090XuXgH8DmgPnAaMAxKB2e5e4e7PAavDjjETeNjd33H3Knd/AigLtmuIbwPz3H2tu5cBPwXGm9lgoAJIAY4FzN0/dvfPg+0qgOPMrLO773b3tQ08rgiggJC254uw9yURpjsF7/sR+osdAHevBnKAtGBZnh880uXWsPeDgB8GzUt7zGwPMCDYriFq1lBE6Cohzd2XAPcB9wM7zGyumXUOVr0YOBfYambLzWx8A48rAiggRGqzjdAveiDU5k/ol3we8DmQFsw7YGDY+xzgf9y9a9irg7vPP8oaOhJqssoDcPd73f1k4DhCTU23B/NXu/uFQC9CTWHPNvC4IoACQqQ2zwLnmdmZZpYI/JBQM9FbwNtAJXCLmSWa2deBsWHbPgJ838xODTqTO5rZeWaW0sAa5gPXmNnooP/ifwk1iW0xs1OC/ScC+4FSoDroI/m2mXUJmsb2AtVH8X2QNkwBIRKBu38CXAHMAXYS6tA+393L3b0c+DpwNbCLUH/FX8O2zQSuI9QEtBvIDtZtaA2LgV8AzxO6ahkGXBos7kwoiHYTaoYqAH4bLLsS2GJme4HvE+rLEGkw0wcGiYhIJLqCEBGRiBQQIiISkQJCREQiUkCIiEhECbEuoDGlpqb64MGDY12GiEiLsWbNmp3u3jPSslYVEIMHDyYzMzPWZYiItBhmtrW2ZWpiEhGRiBQQIiISkQJCREQialV9EJFUVFSQm5tLaWlprEuJquTkZPr3709iYmKsSxGRVqLVB0Rubi4pKSkMHjyYgwffbD3cnYKCAnJzcxkyZEisyxGRVqLVNzGVlpbSo0ePVhsOAGZGjx49Wv1Vkog0rVYfEECrDocD2sI5ikjTahMBcThf7C2lqKwy1mWIiDQrbT4gqqqr2bW/nM35RWzOL2J/IwfFnj17eOCBBxq83bnnnsuePXsatRYRkYZo8wERHxfHMb1T6NulPaUV1Wxq5KCoLSAqK+ve/8KFC+natWuj1CAiciRa/V1M9REXZ/RMSaJHx3YU7C8nf18Zm/KL6JSUQO/OyXRMOvJv009+8hM2bdrE6NGjSUxMJDk5mW7durFhwwY2btzIRRddRE5ODqWlpdx6663MnDkT+NewIUVFRZxzzjlMmDCBt956i7S0NP7+97/Tvn37xjp9EZGIohYQZjYAeBLoDTgw193vqbGOAfcA5wLFwNXuvjZYdhXw82DV/3b3J462pl/940M+2ra3XutWVFVTUeW4O/FxRruEOOIidAQf168zd5x/fK37ufPOO1m/fj3r1q1j2bJlnHfeeaxfv/7L21HnzZtH9+7dKSkp4ZRTTuHiiy+mR48eB+0jKyuL+fPn88gjj3DJJZfw/PPPc8UVVzTgzEVEGi6aVxCVwA/dfW3wYe1rzGyRu38Uts45QHrwOhV4EDjVzLoDdwAZhMJljZktcPfdUaz3IInxcSTGHwiKakrKq+oMivoaO3bsQc8q3HvvvbzwwgsA5OTkkJWVdUhADBkyhNGjRwNw8skns2XLliM+vohIfUUtINz9c0IftI677zOzj4E0IDwgLgSe9NAHY680s65m1heYDCxy910AZrYImAHMP5qa6vpLvy5V1U5BURn5RWVUVTudkxPp1TmJDu0a/u3r2LHjl++XLVvG4sWLefvtt+nQoQOTJ0+O+CxDUlLSl+/j4+MpKSk5ovMQEWmIJumDMLPBwBjgnRqL0oCcsOncYF5t8yPteyYwE2DgwIGNUm9N8XFGr87J9OjUjoKicvKLysjeUUHn5ER6d06ifR1BkZKSwr59+yIuKywspFu3bnTo0IENGzawcuXKqNQvInIkoh4QZtYJeB6Y5e716wBoAHefC8wFyMjI8Mbef7j4uLgvg2JnUTk7i8rI2lFBl/aJ9EpJpn27+EO26dGjB6effjqjRo2iffv29O7d+8tlM2bM4KGHHmLkyJEcc8wxjBs3Lprli4g0SFQDwswSCYXDn939rxFWyQMGhE33D+blEWpmCp+/LDpVNlx8XBy9w64odu4ro7BkXygoOifTPvHgoHjqqaci7icpKYmXXnop4rID/QypqamsX7/+y/k/+tGPGuckREQOI2rPQQR3KD0GfOzuv69ltQXAdyxkHFAY9F28ApxlZt3MrBtwVjCvWUkIguKYPin0SkmmqLSSrC/2sbVgP6UVVbEuT0TkqETzCuJ04ErgAzNbF8z7GTAQwN0fAhYSusU1m9BtrtcEy3aZ2X8Bq4Ptfn2gw7o5SoiPo0+XZFLDmp4KS/bRNbiiSE48tOlJRKS5i+ZdTG8Add4PGty9dGMty+YB86JQWtQcHBRl7CwqZ0/JPrq2b0evzkkKChFpUfQkdRSEgqI9qZ2SyC8qo6ConMKScrp0aEfvlCSSFBQi0gIoIKIoIT6Ovl3a0zM8KIrL6dqhHb0UFCLSzCkgmsCBoEjtlET+vjJ27S9nT3EFXTuEHrhLSlBQiEjz0+ZHc4228NFcE+Pj6Ne1Pcf0SaFHp3YUllSwcXsRubuKKa889K6n2bNnU1xc3NQli4gACoioizTcd82g2F1SwSfbi8jdfXBQKCBEJJbUxBRl4cN9T58+nV69evHss89SVlbG1772NX71q1/RwSq5+JvfJDc3l6qqav7txz+hdO9utm3bxpQpU0hNTWXp0qWxPhURaWPaVkC89BPY/kHj7rPPCXDOnbUuDh/u+9VXX+W5555j1apVuDsXXHABK1asID8/n6GDBvDSwoXk7ytj6/Z8Ujp34e67f88ri16jX59ejVuziEg9qImpCb366qu8+uqrjBkzhpNOOokNGzaQlZXFCSecwKJFi/jFf/yUzeszyUjvT/cOiVS7k51fRN7uEsorq2Ndvoi0MW3rCqKOv/Sbgrvz05/+lOuvv/6QZWvXrmXhwoX8/Oc/58wzz+SXv/wlifFxdG2fwK795ewqLqd7x9DtsYnxynURiT79pomy8OG+zz77bObNm0dRUREAeXl57Nixg23bttGhQweuuOIKbr/9dtauXfvltinxVRzTpxPdOiSyq6icDdv3sW1PCRVVuqIQkehqW1cQMRA+3Pc555zD5Zdfzvjx4wHo1KkTf/rTn8jOzub2228nLi6OxMREHnzwQQBmzpzJjBkz6NevH0uXLqVnShU79oYeuNu1P3RF0VNXFCISJRYaDql1yMjI8MzMzIPmffzxx4wcOTJGFUVHWUUVO/aVsae4HDOjR8d2pKYkkb3xk1Z3riISXWa2xt0zIi3TFUQLlJQYz4DuHeiVksSOfWXsLCqjYH85RSUVFBSV0aNT0uF3IiJyGGq
|
||
|
|
"text/plain": [
|
||
|
|
"<Figure size 432x288 with 1 Axes>"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"metadata": {
|
||
|
|
"needs_background": "light"
|
||
|
|
},
|
||
|
|
"output_type": "display_data"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"plt.plot(model.history['loss'])\n",
|
||
|
|
"plt.plot(model.history['val_loss'])\n",
|
||
|
|
"plt.title('model loss')\n",
|
||
|
|
"plt.ylabel('loss')\n",
|
||
|
|
"plt.xlabel('epoch')\n",
|
||
|
|
"plt.legend(['train', 'test'], loc='upper left')\n",
|
||
|
|
"plt.show()"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 48,
|
||
|
|
"id": "985d5874",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"test_steps_per_epoch = np.math.ceil(test_set.samples / test_set.batch_size)\n",
|
||
|
|
"predictions = classifier.predict_generator(test_set, steps=test_steps_per_epoch)\n"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 49,
|
||
|
|
"id": "f20397c4",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"true_classes = test_set.classes\n",
|
||
|
|
"class_labels = list(test_set.class_indices.keys())\n",
|
||
|
|
"predicted_classes = np.argmax(predictions, axis=1)"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 58,
|
||
|
|
"id": "8c7ecda6",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
" precision recall f1-score support\n",
|
||
|
|
"\n",
|
||
|
|
" A 0.03 0.03 0.03 250\n",
|
||
|
|
" B 0.04 0.04 0.04 250\n",
|
||
|
|
" C 0.03 0.03 0.03 250\n",
|
||
|
|
" D 0.03 0.03 0.03 250\n",
|
||
|
|
" E 0.01 0.01 0.01 250\n",
|
||
|
|
" F 0.02 0.02 0.02 250\n",
|
||
|
|
" G 0.04 0.04 0.04 250\n",
|
||
|
|
" H 0.03 0.02 0.02 250\n",
|
||
|
|
" I 0.04 0.04 0.04 250\n",
|
||
|
|
" J 0.01 0.01 0.01 250\n",
|
||
|
|
" K 0.05 0.05 0.05 250\n",
|
||
|
|
" L 0.04 0.04 0.04 250\n",
|
||
|
|
" M 0.03 0.02 0.03 250\n",
|
||
|
|
" N 0.04 0.04 0.04 250\n",
|
||
|
|
" O 0.04 0.04 0.04 250\n",
|
||
|
|
" P 0.02 0.02 0.02 250\n",
|
||
|
|
" Q 0.03 0.03 0.03 250\n",
|
||
|
|
" R 0.05 0.05 0.05 250\n",
|
||
|
|
" S 0.04 0.06 0.04 250\n",
|
||
|
|
" T 0.05 0.04 0.04 250\n",
|
||
|
|
" U 0.06 0.06 0.06 250\n",
|
||
|
|
" V 0.05 0.05 0.05 250\n",
|
||
|
|
" W 0.06 0.06 0.06 250\n",
|
||
|
|
" X 0.03 0.03 0.03 250\n",
|
||
|
|
" Y 0.04 0.04 0.04 250\n",
|
||
|
|
" Z 0.04 0.04 0.04 250\n",
|
||
|
|
"\n",
|
||
|
|
" accuracy 0.04 6500\n",
|
||
|
|
" macro avg 0.04 0.04 0.04 6500\n",
|
||
|
|
"weighted avg 0.04 0.04 0.04 6500\n",
|
||
|
|
"\n"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"report = metrics.classification_report(true_classes, predicted_classes, target_names=class_labels)\n",
|
||
|
|
"print(report)"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 112,
|
||
|
|
"id": "d149d3b9",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"image/png": "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
|
||
|
|
"text/plain": [
|
||
|
|
"<Figure size 720x720 with 2 Axes>"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"metadata": {
|
||
|
|
"needs_background": "light"
|
||
|
|
},
|
||
|
|
"output_type": "display_data"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
" cm = metrics.confusion_matrix(y_true=true_classes, y_pred=predicted_classes) \n",
|
||
|
|
"cmd = metrics.ConfusionMatrixDisplay(cm, display_labels=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'])\n",
|
||
|
|
"fig, ax = plt.subplots(figsize=(10,10))\n",
|
||
|
|
"cx = cmd.plot(ax=ax)"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 101,
|
||
|
|
"id": "9b3238aa",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"image/png": "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
|
||
|
|
"text/plain": [
|
||
|
|
"<Figure size 720x720 with 2 Axes>"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"metadata": {
|
||
|
|
"needs_background": "light"
|
||
|
|
},
|
||
|
|
"output_type": "display_data"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"fig, ax = plt.subplots(figsize=(10,10))\n",
|
||
|
|
"labels=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']\n",
|
||
|
|
"cx=ax.matshow(cm)\n",
|
||
|
|
"ax.set_xticklabels(labels)\n",
|
||
|
|
"ax.set_yticklabels(labels)\n",
|
||
|
|
"for i in range(cm.shape[0]):\n",
|
||
|
|
" for j in range(cm.shape[1]):\n",
|
||
|
|
" ax.text(x=j, y=i,s=cm[i, j], va='center', ha='center', size='large')\n",
|
||
|
|
"plt.colorbar(cx)\n",
|
||
|
|
"plt.show()"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 104,
|
||
|
|
"id": "5b134cca",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"def plot_confusion_matrix(cm,\n",
|
||
|
|
" target_names,\n",
|
||
|
|
" title='Confusion matrix',\n",
|
||
|
|
" cmap=None,\n",
|
||
|
|
" normalize=True):\n",
|
||
|
|
" \"\"\"\n",
|
||
|
|
" given a sklearn confusion matrix (cm), make a nice plot\n",
|
||
|
|
"\n",
|
||
|
|
" Arguments\n",
|
||
|
|
" ---------\n",
|
||
|
|
" cm: confusion matrix from sklearn.metrics.confusion_matrix\n",
|
||
|
|
"\n",
|
||
|
|
" target_names: given classification classes such as [0, 1, 2]\n",
|
||
|
|
" the class names, for example: ['high', 'medium', 'low']\n",
|
||
|
|
"\n",
|
||
|
|
" title: the text to display at the top of the matrix\n",
|
||
|
|
"\n",
|
||
|
|
" cmap: the gradient of the values displayed from matplotlib.pyplot.cm\n",
|
||
|
|
" see http://matplotlib.org/examples/color/colormaps_reference.html\n",
|
||
|
|
" plt.get_cmap('jet') or plt.cm.Blues\n",
|
||
|
|
"\n",
|
||
|
|
" normalize: If False, plot the raw numbers\n",
|
||
|
|
" If True, plot the proportions\n",
|
||
|
|
"\n",
|
||
|
|
" Usage\n",
|
||
|
|
" -----\n",
|
||
|
|
" plot_confusion_matrix(cm = cm, # confusion matrix created by\n",
|
||
|
|
" # sklearn.metrics.confusion_matrix\n",
|
||
|
|
" normalize = True, # show proportions\n",
|
||
|
|
" target_names = y_labels_vals, # list of names of the classes\n",
|
||
|
|
" title = best_estimator_name) # title of graph\n",
|
||
|
|
"\n",
|
||
|
|
" Citiation\n",
|
||
|
|
" ---------\n",
|
||
|
|
" http://scikit-learn.org/stable/auto_examples/model_selection/plot_confusion_matrix.html\n",
|
||
|
|
"\n",
|
||
|
|
" \"\"\"\n",
|
||
|
|
" import matplotlib.pyplot as plt\n",
|
||
|
|
" import numpy as np\n",
|
||
|
|
" import itertools\n",
|
||
|
|
"\n",
|
||
|
|
" accuracy = np.trace(cm) / np.sum(cm).astype('float')\n",
|
||
|
|
" misclass = 1 - accuracy\n",
|
||
|
|
"\n",
|
||
|
|
" if cmap is None:\n",
|
||
|
|
" cmap = plt.get_cmap('Blues')\n",
|
||
|
|
"\n",
|
||
|
|
" plt.figure(figsize=(10, 10))\n",
|
||
|
|
" plt.imshow(cm, interpolation='nearest', cmap=cmap)\n",
|
||
|
|
" plt.title(title)\n",
|
||
|
|
" plt.colorbar()\n",
|
||
|
|
"\n",
|
||
|
|
" if target_names is not None:\n",
|
||
|
|
" tick_marks = np.arange(len(target_names))\n",
|
||
|
|
" plt.xticks(tick_marks, target_names, rotation=45)\n",
|
||
|
|
" plt.yticks(tick_marks, target_names)\n",
|
||
|
|
"\n",
|
||
|
|
" if normalize:\n",
|
||
|
|
" cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]\n",
|
||
|
|
"\n",
|
||
|
|
"\n",
|
||
|
|
" thresh = cm.max() / 1.5 if normalize else cm.max() / 2\n",
|
||
|
|
" for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n",
|
||
|
|
" if normalize:\n",
|
||
|
|
" plt.text(j, i, \"{:0.4f}\".format(cm[i, j]),\n",
|
||
|
|
" horizontalalignment=\"center\",\n",
|
||
|
|
" color=\"white\" if cm[i, j] > thresh else \"black\")\n",
|
||
|
|
" else:\n",
|
||
|
|
" plt.text(j, i, \"{:,}\".format(cm[i, j]),\n",
|
||
|
|
" horizontalalignment=\"center\",\n",
|
||
|
|
" color=\"white\" if cm[i, j] > thresh else \"black\")\n",
|
||
|
|
"\n",
|
||
|
|
"\n",
|
||
|
|
" plt.tight_layout()\n",
|
||
|
|
" plt.ylabel('True label')\n",
|
||
|
|
" plt.xlabel('Predicted label\\naccuracy={:0.4f}; misclass={:0.4f}'.format(accuracy, misclass))\n",
|
||
|
|
" plt.show()"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 105,
|
||
|
|
"id": "0a14c2c5",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"image/png": "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
|
||
|
|
"text/plain": [
|
||
|
|
"<Figure size 720x720 with 2 Axes>"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"metadata": {
|
||
|
|
"needs_background": "light"
|
||
|
|
},
|
||
|
|
"output_type": "display_data"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"plot_confusion_matrix(cm,labels)"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"metadata": {
|
||
|
|
"kernelspec": {
|
||
|
|
"display_name": "tf1",
|
||
|
|
"language": "python",
|
||
|
|
"name": "tf1"
|
||
|
|
},
|
||
|
|
"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.13"
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"nbformat": 4,
|
||
|
|
"nbformat_minor": 5
|
||
|
|
}
|