{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import warnings\n", "warnings.simplefilter(action='ignore')" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import tensorflow as tf\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import pandas as pd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1. 数据预处理" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "x_train_flatten = x_train.reshape(x_train.shape[0], 28, 28, 1).astype('float32')\n", "x_test_flatten = x_test.reshape(x_test.shape[0], 28, 28, 1).astype('float32')" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "x_train_normalize = x_train_flatten / 255.0\n", "x_test_normalize = x_test_flatten / 255.0" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "y_train_one_hot = tf.keras.utils.to_categorical(y_train)\n", "y_test_one_hot = tf.keras.utils.to_categorical(y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2. 建立模型" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.1 建立 Sequential 模型" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "model = tf.keras.models.Sequential([\n", " \n", " # 卷积层1与池化层1\n", " tf.keras.layers.Conv2D(input_shape=(28, 28, 1), filters=16, kernel_size=(5, 5), padding='same', activation='relu'),\n", " tf.keras.layers.MaxPooling2D(pool_size=(2, 2)),\n", " \n", " # 卷积层2与池化层2\n", " tf.keras.layers.Conv2D(filters=36, kernel_size=(5, 5), padding='same', activation='relu'),\n", " tf.keras.layers.MaxPooling2D(pool_size=(2, 2)),\n", " \n", " tf.keras.layers.Dropout(0.25),\n", " \n", " # 平坦层\n", " tf.keras.layers.Flatten(),\n", " \n", " # 隐藏层(128个神经元)\n", " tf.keras.layers.Dense(128, activation='relu'),\n", " tf.keras.layers.Dropout(0.5),\n", " \n", " # 输出层\n", " tf.keras.layers.Dense(10, activation='softmax')\n", "])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.2 查看模型的摘要" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "conv2d (Conv2D) (None, 28, 28, 16) 416 \n", "_________________________________________________________________\n", "max_pooling2d (MaxPooling2D) (None, 14, 14, 16) 0 \n", "_________________________________________________________________\n", "conv2d_1 (Conv2D) (None, 14, 14, 36) 14436 \n", "_________________________________________________________________\n", "max_pooling2d_1 (MaxPooling2 (None, 7, 7, 36) 0 \n", "_________________________________________________________________\n", "dropout (Dropout) (None, 7, 7, 36) 0 \n", "_________________________________________________________________\n", "flatten (Flatten) (None, 1764) 0 \n", "_________________________________________________________________\n", "dense (Dense) (None, 128) 225920 \n", "_________________________________________________________________\n", "dropout_1 (Dropout) (None, 128) 0 \n", "_________________________________________________________________\n", "dense_1 (Dense) (None, 10) 1290 \n", "=================================================================\n", "Total params: 242,062\n", "Trainable params: 242,062\n", "Non-trainable params: 0\n", "_________________________________________________________________\n", "None\n" ] } ], "source": [ "print(model.summary())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3. 训练模型" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train on 48000 samples, validate on 12000 samples\n", "Epoch 1/20\n", " - 57s - loss: 0.4985 - acc: 0.8430 - val_loss: 0.0989 - val_acc: 0.9692\n", "Epoch 2/20\n", " - 53s - loss: 0.1389 - acc: 0.9587 - val_loss: 0.0664 - val_acc: 0.9793\n", "Epoch 3/20\n", " - 52s - loss: 0.1027 - acc: 0.9690 - val_loss: 0.0539 - val_acc: 0.9829\n", "Epoch 4/20\n", " - 52s - loss: 0.0846 - acc: 0.9740 - val_loss: 0.0556 - val_acc: 0.9834\n", "Epoch 5/20\n", " - 53s - loss: 0.0696 - acc: 0.9793 - val_loss: 0.0438 - val_acc: 0.9876\n", "Epoch 6/20\n", " - 52s - loss: 0.0625 - acc: 0.9811 - val_loss: 0.0379 - val_acc: 0.9886\n", "Epoch 7/20\n", " - 51s - loss: 0.0554 - acc: 0.9832 - val_loss: 0.0377 - val_acc: 0.9894\n", "Epoch 8/20\n", " - 51s - loss: 0.0497 - acc: 0.9849 - val_loss: 0.0346 - val_acc: 0.9900\n", "Epoch 9/20\n", " - 52s - loss: 0.0457 - acc: 0.9867 - val_loss: 0.0394 - val_acc: 0.9889\n", "Epoch 10/20\n", " - 51s - loss: 0.0410 - acc: 0.9872 - val_loss: 0.0357 - val_acc: 0.9889\n", "Epoch 11/20\n", " - 51s - loss: 0.0382 - acc: 0.9877 - val_loss: 0.0344 - val_acc: 0.9909\n", "Epoch 12/20\n", " - 52s - loss: 0.0376 - acc: 0.9880 - val_loss: 0.0319 - val_acc: 0.9913\n", "Epoch 13/20\n", " - 51s - loss: 0.0364 - acc: 0.9881 - val_loss: 0.0309 - val_acc: 0.9908\n", "Epoch 14/20\n", " - 51s - loss: 0.0338 - acc: 0.9895 - val_loss: 0.0320 - val_acc: 0.9902\n", "Epoch 15/20\n", " - 52s - loss: 0.0315 - acc: 0.9898 - val_loss: 0.0292 - val_acc: 0.9918\n", "Epoch 16/20\n", " - 51s - loss: 0.0291 - acc: 0.9905 - val_loss: 0.0308 - val_acc: 0.9922\n", "Epoch 17/20\n", " - 51s - loss: 0.0266 - acc: 0.9912 - val_loss: 0.0303 - val_acc: 0.9916\n", "Epoch 18/20\n", " - 51s - loss: 0.0247 - acc: 0.9919 - val_loss: 0.0316 - val_acc: 0.9919\n", "Epoch 19/20\n", " - 51s - loss: 0.0249 - acc: 0.9920 - val_loss: 0.0303 - val_acc: 0.9916\n", "Epoch 20/20\n", " - 51s - loss: 0.0254 - acc: 0.9921 - val_loss: 0.0352 - val_acc: 0.9909\n" ] } ], "source": [ "train_history = model.fit(x=x_train_normalize, y=y_train_one_hot, validation_split=0.2,\n", " epochs=20, batch_size=300, verbose=2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4. 以图形显示训练过程" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "def show_train_history(train_history, train, validation):\n", " plt.plot(train_history.history[train])\n", " plt.plot(train_history.history[validation])\n", " plt.title('Train History')\n", " plt.xlabel('Epoch')\n", " plt.ylabel(train)\n", " plt.legend(['train', 'validation'], loc='upper left')\n", " plt.show()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "show_train_history(train_history, 'acc', 'val_acc')" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "show_train_history(train_history, 'loss', 'val_loss')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 5. 评估模型的准确率" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10000/10000 [==============================] - 5s 452us/step\n", "\n", "accuracy: 0.9923\n" ] } ], "source": [ "scores = model.evaluate(x_test_normalize, y_test_one_hot)\n", "print()\n", "print('accuracy:', scores[1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6. 进行预测" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 6.1 执行预测" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "predictions = model.predict_classes(x_test_normalize)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 6.2 预测结果" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([7, 2, 1, ..., 4, 5, 6])" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "predictions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 6.3 定义函数以显示10项预测结果" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "def plot_images_labels_prediction(images, labels, predictions, idx, num=10):\n", " \"\"\"\n", " images: 数字图像数组\n", " labels: 真实值数组\n", " predictions: 预测结果数据\n", " idx: 开始显示的数据index\n", " num: 要显示的数据项数, 默认为10, 不超过25\n", " \"\"\"\n", " fig = plt.gcf()\n", " fig.set_size_inches(12, 14)\n", " if num > 25:\n", " num = 25\n", " for i in range(0, num):\n", " ax = plt.subplot(5, 5, i+1)\n", " ax.imshow(images[idx], cmap='binary')\n", " title = 'lable=' + str(labels[idx])\n", " if len(predictions) > 0:\n", " title += ',predict=' + str(predictions[idx])\n", " ax.set_title(title, fontsize=10)\n", " ax.set_xticks([])\n", " ax.set_yticks([])\n", " idx += 1\n", " plt.show()" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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T58+3eSLLrqogNWhvrz++uspz/Xt29fkFStW1FM1//XUU0+ZvOeee5r87W9/uz7LyQt3ZgEAABAsOrMAAAAIFp1ZAAAABIsxs6gI/tiyKVOmZFy/a9euKc/5Y16rqqpMbtmypclffvmlyfvvv7/JCxYsMHnt2rUZa0LDNX/+fJP9tialjqlD+Vu9erXJZ511VokqQTl58sknU57btGlTCSqx/J+B999/v8kTJkyoz3Lywp1ZAAAABIvOLAAAAIJFZxYAAADBKrsxs5MnTzbZn4dv5513NrlZs2Ym9+/fP2WfO+64o8kdO3asS4koQ//4xz9MjqLIZH+MbLoxSzvttFNexxw+fLjJb775Zsb1jzvuuLz2j8q1aNEik++8806TBwwYUJ/loABGjRqV8tzUqVNNfvXVV+t0jNmzZ5vsX+ckqVu3bib36tWrTsdE3X399dcmP/744yWqJLMePXqYPGLECJM/++wzk1u0aFH0mnLFnVkAAAAEi84sAAAAgkVnFgAAAMEquzGzV199tcn5fj7x6NGjU55r1aqVyV26dMm7rkLzP+N40KBBJvtjV5DZj3/8Y5OXL19u8rbbbmtymzZt6nzMiRMnmuzPOwvU5K233jLZH4vWr1+/+iwHBXDZZZelPNe4ceOCHuPRRx/NmCWpffv2Jv/pT38yed999y1oTcju+eefN3nOnDkp61xzzTX1VU6N1q1bZ/KSJUtM/ve//20yY2YBAACAAqAzCwAAgGDRmQUAAECwym7M7NixY032P9/eH++6dOlSk994442Ufc6aNcvkl156yWR/jNH777+fU61bNG3aNOW5qqoqk/15UP0a/DG0jJmtmw4dOhR8n7fffrvJb7/9dsb1999//4wZDddtt91mcnV1tcn8/y9/xx57rMnp5nzdvHlznY7h/xzxxyiuXLkyZZv33nvP5P3228/kb775pk41ITt/HunTTjvN5HRz3Q8ePLioNeVi2rRppS6h1rgzCwAAgGDRmQUAAECw6MwCAAAgWGU3ZvaII47ImH29e/fOus/169eb7I+r9cen5fv52VtvvXXKc506dTK5c+fOJvvzue222255HRPFN2PGDJOHDh1q8qZNm0xu166dycOGDTN5m222KWB1CIk/X7Z/jfGvF+U0fyMSXnjhBZOXLVtmsnMuZZt855k9//zzTT766KNNbt26tcnPPfdcyj5uvvnmjMe45557TB44cGA+JSIH/vfAn5913LhxKdu0bNmyqDWl4/dD/Daerk2XK+7MAgAAIFh0ZgEAABAsOrMAAAAIFp1ZAAAABKvs3gBWDNtvv73Jhx9+eMb1s73pLBePPPKIyf6b0Pbaay+T/UmVUXrz5s0z2X/Dl69fv34mH3LIIQWvCWHy31jha9u2bT1Vglz5b9rzr9Fr1qzJe5/+B/ScfPLJJl933XUmZ3vTaLoPh7n33ntN9uscNGiQyV988YXJF110kcnpPhQI1uTJk01+/PHHTfY/JMH/IItSuemmm0z23/B16KGHmrzddtsVu6Ra484sAAAAgkVnFgAAAMGiMwsAAIBgNYgxs8W2atWqlOcuuOACk6MoMtmfgL9NmzaFLwx5OfHEE01+8sknM65/1llnmeyPPwK2WLhwYcbX/XGMKL2vvvrK5NqMke3Vq5fJEydONLmqqir/wpKkGzM7ePBgk6+44gqTP/vsM5P9tnf88cebzAf6ZDdp0iST/a9xOXwwhT8GXJLGjx9vcpMmtks4ZMgQk8t5/DR3ZgEAABAsOrMAAAAIFp1ZAAAABIsxswVw9913pzznj6P152fr1KlTUWtCZv/4xz9SnpszZ47J/ryy/lyg/niili1bFqg6hG7u3LkmP/DAAybvvffeJh911FFFrwnFlW7uUP/7Xtcxsrnwx7w+/PDDJr/yyitFr6HSbdiwweSXXnop4/r+e2hKYcyYMSnPrV692uQuXbqYnG1O/nLCnVkAAAAEi84sAAAAgkVnFgAAAMFizGwtvPjiiyYPGzYs6zaPPfaYyV27di1oTchP3759U57LNo9k//79TWb+RdTk2WefNXn9+vUm9+7d2+RmzZoVvSbUzebNmzO+/vLLL9dTJZn5c5p/8803GV/3z+u6664zedy4cQWsrjL476f44IMPTD799NPrs5ycvPPOO1nXCblfwp1ZAAAABIvOLAAAAIJFZxYAAADBYsxsLTz++OMmf/nllynrHHnkkSb37NmzqDUhs2nTppn8xhtvZN3m0EMPNfmGG24oZEmoYAsWLMj4+imnnFJPlaC2Ro8ebXLjxo1LVEl+pk+fbrJ/rXPOmeyf169//eviFFZBtt12W5O7d+9u8qJFi0xet26dyW3atClOYUn8ue4nTZqUdZsDDzywWOUUHXdmAQAAECw6swAAAAgWnVkAAAAEizGzOfj8889NfuKJJ0zeeuutU7bxxx01bdq08IWhRmvXrjX5lltuMTndOGefPw6qZcuWdS8MFenjjz82efbs2SZ37tzZ5J/85CdFrwl1M2PGjFKXkGL16tUmL126NGUd/1qXTVVVlcn8rMquefPmJnfs2NHkyZMnm9ynTx+Tr7jiijrXsHjxYpP9eWRXrlxpsj9WOp1GjcK9vxlu5QAAAGjw6MwCAAAgWHRmAQAAECzGzObg9ttvN9mft++YY45J2eaAAw4oak3I7Le//a3Jr7zyStZtTjzxRJOZVxa5evDBB03+5JNPTE53jQDydfPNN5t89913572P6upqkx966CGT27dvn/c+G7rrr7/e5CiKTPbHX5922ml1Pmbbtm1N9sfErlmzJu99nn322XWqqZS4MwsAAIBg0ZkFAABAsOjMAgAAIFh0ZgEAABAs3gCWhj9Y+8YbbzS5devWJl977bVFrwn5GTFiRN7b+G+m4EMSkCt/gnLf9ttvX0+VoJIce+yxJi9btqzO++zSpYvJBx98cJ332dDtueeeJv/pT38y2X/TuP8BB7Vx8sknZ3z9rLPOMnncuHFZ9+l/GERIuDMLAACAYNGZBQAAQLDozAIAACBYjJmVtHbtWpMvueQSk7/++muT/XFMPXv2LE5hqFd+O2jatGmd9uePrU63v6+++srkDRs2ZNzn+vXrTR45cmTedTVu3NjkW2+91eRtttkm7302dNOnT8/4+nHHHVdPlaBQ/InvN2/enHH9mTNnZt3nueeea/JHH32UVw3+xPi14b8nBMW39957Z8zF8N3vfjfvbRYtWmTy97///UKVU3TcmQUAAECw6MwCAAAgWHRmAQAAEKwGOWbWH/vUu3dvk9977z2TO3bsaLI/7ywqw1577VXQ/Z166qkm77TTTinrfPLJJyZPmDChoDXkol27diYPGTKk3msIzezZs032v48I38CBA00eNGhQxvX79OmT8pw/Pj3f1/2fVdnWT+f888/PexuEzx9v7ed0Qhoj6+POLAAAAIJFZxYAAADBojMLAACAYDXIMbP+5yLPmzcv4/ojRowwebfddit4TSgsfy7gqVOn1nsN/udz14Y/N22jRpl//zz++ONN7tGjR9ZjHHTQQfkX1sBNmTLFZH8uan8eyUMOOaToNaGw+vbta/Jtt91m8po1a+qzHElSVVWVyXvuuWfKOvfdd5/J6cbqo/L5cxIXYo7icsadWQAAAASLziwAAACCRWcWAAAAwWoQY2ZXrlxp8tFHH51x/eHDh5vM56qH59FHHzXZH+/25Zdf5r3PpUuXmpzvnLDnnHNOynMdOnTIuM1JJ51kcroxciiuf//73ynPzZw5M+M2p5xyism1mR8UpeX/35w4caLJ/jj8O+64o+g1/e///q/JF110UdGPiTB98cUXWddp3rx5PVRSP7gzCwAAgGDRmQUAAECw6MwCAAAgWA1izOy9995rsj+G1ufPCVnp87M1BNk+V702xo8fX/B9ovz4c/1K0nbbbWfyCSecYPKll15a1JpQ/3r16pUxp3svxpgxY0yePn26yT/+8Y9NPu+880yOosjkLl265FYsGrwHHnjAZP+aJUlDhw6tr3KKjjuzAAAACBadWQAAAASLziwAAACCVXFjZmfPnp3y3F133VWCSgBUgnRjZufOnVuCSlDOevfundNzQH3Yb7/9TL788stT1jn88MPrq5yi484sAAAAgkVnFgAAAMGiMwsAAIBg0ZkFAABAsCruDWAvvvhiynP/+te/Mm7TsWNHk1u2bFnQmgAAAOqL/wEdlY47swAAAAgWnVkAAAAEi84sAAAAglVxY2Zz0b17d5OfffZZk9u0aVOf5QAAAKCWuDMLAACAYNGZBQAAQLDozAIAACBYFTdm9le/+lVOzwEAACB83JkFAABAsOjMAgAAIFh0ZgEAABAsF0VR7is7t1rSyuKVg3rUIYqitsXYMe2k4tBWkAvaCXJFW0Eucm4neXVmAQAAgHLCMAMAAAAEi84sAAAAgkVnFgAAAMGiMwsAAIBg0ZkFAABAsOjMAgAAIFh0ZgEAABAsOrMAAAAIFp1ZAAAABIvOLAAAAIJFZxYAAADBojMLAACAYNGZBQAAQLDozAIAACBYdGYBAAAQLDqzAAAACBadWQAAAASLziwAAACCRWcWAAAAwaIzCwAAgGDRmQUAAECw6MwCAAAgWHRmAQAAECw6swAAAAgWnVkAAAAEi84sAAAAgkVnFgAAAMEqamfWObcxy+vVzrnFNbw2yznXo47H7+ycm+uc2+Scu6ou+8rzuCucc1Xx8pws6/7MObdzHvsuyTkVW6nbStK+9nPOfe2cO7kQ+8vheBvjf3d2zk3Osu5lzrltanGMk5xzUaG+RqVW6rbinNveOTfFObfQOfeKc65rXfaXx3GLeV0pyTkVUxm0k0Odcxucc/Pjx9C67C+P4xaznZTknIqtDNoK15Q6qvQ7s+skXSJpeF135JxrUpvtoig6IMsqP5OUcwNRAc8JlnOusaRbJT1VgP3kJYqij6IoytaBvkxSXp1Z59y2ki6V9HK+NaFGgyXNj6JoL0kDJP2utjsqo+tKwc4JxuwoirrHjxtqu5MyaidSgc4JBteUOqqXzqxzrqVz7lnn3OvOuUXOuROSXm7inHvYOfemc25yujtPzrmj47uRrzvnJjnnWuZy3CiKVkVR9Kqkr7LUt9E5N9I5tySus238/Czn3B3OuXmSLnXOtXXOPeKcezV+HBivt4Nz7ql4+7GSXPK+k5avic9/gXNuWHz3r4ekh+PfcpsX6pxCVaq2ErtY0iOSVtVQW7Vzblm6GuLfcG91zr0u6RTn3G7OuSecc68552Y75zrH630nrm+Rc+4mb9+L4+XGzrnhzrnF8W+1FzvnLlHiQvK8c+75PM7pRiU66F/ksU0QSthWukh6TpKiKFomqdo51y7N/oO5ruR6TiEq8TUll/pCaicVjWvKf5bDu6ZEUVS0h6SN8b9NJLWKl6skLVfii1gtKZJ0YPza/ZKuipdnKfHFq5L0F0kt4uevkTQ0Xh4paX6axy+9Oq7fst8a6owk9Y+Xh0q6K6mG3yetN17SQfFye0lvxsujkmrqE++vyvsaHCNpjqRt4twm+TyTjlGQcwrtUeq2ImkXSS8o8Qveg5JOTlNjphpWSBqUtO6zknaPl/eX9Fy8PE3SgHj5wqTzrpa0OF4eKGmypCZeW1mxpV3FeWIN57Rl//tIeiRdOwv5UQZt5RZJI+PlH0j6WtK+aeoM5rqS6zmF9CiDdnKopLWSFkiaKel7NdQZUjvJ6ZxCe5RBW+GaUtfvYT01kKaS7pK0MD7ZzyXtGDeQ95PWP1zSVK+BHCdpTdIXaqmk/5dnHdcrc2d2s/7bcfiuErfGt9RwSNJ6q7xv2oeSWsbL301ab12aBvJbSeemObZpIIU6p9AepW4rkiZJ+mG8/KBq7szWVMMKSR3i5ZZx3cltZcvFZK2kpvFyK6XvzD4i6ag0x1+hpM5slvNpFH9dquvSzsrxUQZtpZWkB+Lt/iDpVUnd06wXzHUl13MK6VEm7aRlvHyspL/VsF5o7STrOYX2KJO2wjWlDo9aja2ohf6S2irRK//KObdCUrP4tchb189O0tNRFJ3u79Q5N1LSYWmONyGKomF1qDe5hs+Slhsp0eExf7J1zqlQinhOoShVW+khaUL8vaySdKxz7usoiqZmOWa6ttJI0j+jKOqe5njp9lErzrmJkjqleWmEpMckdZU0Kz6nHSVNc84dH0XRvEIcvwyUpK1EUfSppLPjdZ2k9yS9m0O9ZXtdqcM5haCU7SSx0yh63Dn3e+dcVRRFa7LUW+7tJFFkfucUCq4pOSq7a0o9/bZzqaQ74+XDlPgGVOu/t+57xq+NlXSl99tOW0nvS+oYP99C0h551nG9vLuYSvwZeJd4OZJ0Wrw8JKnWWbK31cdLujopd4//HSVpSLx8jNLfuu+t9Lfup0s6rBZf25RzCvlRLm0l3u5BJd2ZlbQs/jdTDStkhwDMkXRKvOwkdYuXp0k6I14eqPR3Zs9X+mEGiyR9p5ZfX9OWQ36Uuq1I2k7SVvHyuZL+L+m1IK8rmc4p1EcZtJMdJbl4+QfxfrbkUNtJjecU8qMM2grXlLp+D+upgVRJmqvED+MHJL2Z1ECWSRoXP/dI0hfwP98cJW7pv6rErf+Fko7P8fg7SvpA0qeS/hkvt1Lit5aVkppvqVOJu1mLlRiw3LaGBlKlxDjFhUr8CWF0/PwOSrwDfomk++J9mwYSL/8y3m6+pFvi506S9Fb8XPPanlMxv4/18Sh1W/FqeVBxZzau5614OVMNK2Q7s9+R9IQSY8uW6r/jlL6TdH43KX1ntkncHpfG218UP39x3Faer8U5mbYc8qPUbUVST0lvx9+LRyVtHz8f8nUl7TmF/CiDdnJR/L1bIOklSQdUQDtJe06hP8qgrXBNqeNjy29YDYpLzHf28yiKrojzxiiKCvoOVVQG59xxSowxGuWcq5Y0I4qi4OfgROFxXUEuaCfIFW0ldw2yM+ujgSAXdGaRD64ryAXtBLmirdSMziwAAACCVemfAAYAAIAKRmcWAAAAwcprntmqqqqourq6SKWgPq1YsUJr1qwp3KRzSWgnleW1115bE0VR22Lsm7ZSObimIFdcU5CLfK4peXVmq6urNW9epcy33rD16NGjaPumnVQW59zKYu2btlI5uKYgV1xTkIt8rikMMwAAAECw6MwCAAAgWHRmAQAAECw6swAAAAgWnVkAAAAEi84sAAAAgkVnFgAAAMGiMwsAAIBg0ZkFAABAsOjMAgAAIFh0ZgEAABAsOrMAAAAIFp1ZAAAABIvOLAAAAILVpNQFAACA/K1fvz7luffffz+vfXTo0MHkkSNHmty1a1eT99hjj5R9dOvWLa9jAoXGnVkAAAAEi84sAAAAgkVnFgAAAMFizGwtTJ8+3eTjjz8+ZZ0777zT5IEDB5rcuHHjwheGGq1atcrkU089NWWdAw44wORf/OIXJldXVxe8rnxt2LDB5L/85S8m9+7d2+SmTZsWvSYAxTFjxgyT/Z89s2bNStnmb3/7W17H6NSpk8krVqzNqhodAAAPFElEQVQwedOmTVn38c033+R1TKDQuDMLAACAYNGZBQAAQLDozAIAACBYjJnNwdq1a032x7+mc/HFF5t8zjnnmNy8efO6F4Ya+fMvfu973zPZH3sqSe3atTO5HMfI7rPPPiavWbPG5Hnz5pm8++67F6ewBu7TTz81+Ze//KXJS5YsMfmZZ54xmbHMDdM777xj8t13323ymDFjTP78889NjqKo4DW99dZbBd8nUN+4MwsAAIBg0ZkFAABAsOjMAgAAIFiMmc2BP5fnhx9+mHWb008/3eRmzZoVtCZY/thRfx5Zf9zzhRdemLIPf27gcnDTTTeZ/N5775nsj7FjjGzhjRs3LuW5IUOGmPz+++9n3Ic/xnaHHXaoe2EIzgcffGDyHXfcUe81dO7c2eSuXbvWew3I3/Lly032f+ZNmTLFZH8O4kaNUu9dnn/++Sb7c62H9POEO7MAAAAIFp1ZAAAABIvOLAAAAILFmNk0/M+i9sct5uLMM8802TlXp5qQ2euvv25yus8sTzZ06NAiVlN7ixcvNnn48OEm/+QnPzG5X79+Ra+pofHHNV5++eUp6/jj1bL9//bnnb7rrrtMbtOmTT4logT877k/3vWggw5K2aZ3794mb7XVVia3bt3a5JYtW5q8ceNGk3/0ox+ZnG686/7772/y3nvvbbI/x3mLFi1S9oH6t2jRIpP9OYgfffRRk1evXl3nY7700ksm+/Nfd+rUyWS/jf/ud78z2W/f9Yk7swAAAAgWnVkAAAAEi84sAAAAgsWY2TQWLlxosj8e09ekSeqX8ZhjjiloTbBWrVpl8iOPPJJx/fvvv9/ktm3bFrym2vDHyB511FEZ1+/bt6/J2267bcFrauj8ccr+HMW1MWHCBJNnzpxpsj9vrT/GVirteLSG6LPPPjPZ/7+5YMECk6dOnZp1nz179jT5jTfeMLm6utpkf/7iXXfd1eR0c4ei/Ph9Cn88rCRNnDjR5A0bNmTcp98WDj74YJP9tnT77ben7GPfffc1+eWXXzbZv/Y9/vjjJnfr1s1kf97a+sT/BAAAAASLziwAAACCRWcWAAAAwWLMbBr+fG7ZZBvniMK78sorTR43bpzJ++yzj8mnnHJK0WuqjRdffNHkjz/+2OSzzz7b5DPOOKPoNTU0K1euNPmBBx7Iuo0/Vqxdu3YmP/300xm398fD+eN0+/fvn7LNjjvumLUu1N6XX35p8k9/+lOT/TGygwcPNvnII4/M+5j+uEZf+/bt894nSu+8884zecqUKSbnMkes356+//3vm3zLLbeY3KxZs4z7mzt3bspz99xzj8n+z5v58+eb7F+DLrjgApNPOukkk+vzvSncmQUAAECw6MwCAAAgWHRmAQAAECw6swAAAAgWbwBL44UXXsj4uj95uT8QG8XnnMuYd9llF5NLMeH8559/bnK6duJPnu2fh/9hDyg8/00On376qcm9evVK2ca/RnzxxRcmjx8/3uTf/OY3Ji9fvtxk/41/J5xwQsox/Q9aaNOmTco6yN3GjRtN9v9/Tp8+3WT/zSxXX321ydtss00Bq0M58/+/33bbbSbfd999JkdRZPK3vvWtlH0OHDjQZL99tWjRIu86k6X78Jevv/7a5F//+tcm/+hHPzJ5xYoVdaqhmLgzCwAAgGDRmQUAAECw6MwCAAAgWIyZlTRnzhyT000unMwfG9W9e/eC14S6mTFjhslHH320ydttt13KNv6YpXzNmjUrY37ppZey7qNcP9yhkm3atMlkf9zy5ZdfnnUf/oTlP//5z02ePHmyye+8847J/pi6dOMvSzHuu5JNnTrV5GHDhpncoUMHk2fPnm1y69ati1MYyp5/bb/99ttN9v8/++/hSPfBTD/4wQ/qVNPmzZtN/vvf/27ygAEDUrbp06ePyevXr8/rmGeeeabJ6X6u1hfuzAIAACBYdGYBAAAQLDqzAAAACBZjZiW9+uqrea1f17GVqLtLL73U5Oeee87kjz76yGR/XlB/TJMkPfbYY3Wqyd+nP/Yynd12281k5iyuf3/84x8zvv7nP/855bkTTzwxr2PMmzcvr/V/+MMfpjzXsmXLvPaBzPz3Svj23ntvk3fddddiloOA+POzNm7cOOP6TZs2Nfnll19OWccfV79s2bKM+2zevLnJb775ZsZcVVWVsg9/futs2rVrZ/KQIUNM9s+zPnFnFgAAAMGiMwsAAIBg0ZkFAABAsBgzq+xjZv250y644IJiloMc7LvvviYvWrTI5Pnz55v8xBNPmOx/lraU+nnZZ511Vl41+XPu7bXXXlm3OeCAA0z2x9Ci+E4//XST/bHT6a4P/ng2v/1NmTLFZH/+Rv+a4r8+ZsyYlGP67atLly4p6yB3/hhF38yZM032P7f++OOPN9kfY4vKdcQRR5h82GGHmfz000+bvHLlSpMvueSSvI/ZpIntrvnjdrPJZXxso0b2/mbfvn1NHjVqlMk77bRTXjUUE3dmAQAAECw6swAAAAgWnVkAAAAEq0GOmX3xxRdNHj9+fMb1/c/gZr7B8rP99tub7I9h8vOtt95a8Breffddk/15Z7t3756yzfDhwwteB/Jz5JFHmuz/f1+4cGHKNnvuuafJ2eYUPuqoo0y+++67TT7uuONMfvvtt1P24Y9XGz16dMZjIrPVq1eb7H8PN23aZLI/Zvamm24y+fzzz085xv7772/y3//+d5M7duxo8ve+970MFUtLliwxuWfPninr8POp+Pw5Xv0x8v/85z9NHjZsmMl//etfU/a5ww47mNy+fXuT/fa4YMECk9PNXZuv8847z2R/3nN/rH854c4sAAAAgkVnFgAAAMGiMwsAAIBgNcgxs2vXrjXZH9vo88e7AenccMMNJvtj8NLNbdu2bdui1oTs2rRpY/KkSZNMPvnkk1O22bBhg8n+NcSfR9Ifo92sWTOT/fkcf/Ob36Qc88knnzT5nXfeMZk5ivNz1VVXmfzb3/42r+03b95ssj8OuqbnCsmfG1uSDj30UJMnTJhQ1BqQyh9b6o+ZLYQBAwaYnG3MbKtWrVKeGzFihMk/+9nPTG7cuHHtiisB7swCAAAgWHRmAQAAECw6swAAAAhWgxwz64+J8/njXX7xi18UsxwEym9HDz30kMn+GCV/HkGUJ3/e2cmTJ6es489N7V8z/PHT/hhZ37XXXmvym2++mbLOY489lvEYfvtDZv44xlNPPdXk/v37m/zVV1+Z/MEHH5jsj6GtD6tWrUp5zr8ude3a1eQhQ4YUtSYUh/+ei3zHQt9zzz0pz/30pz+tU03lhDuzAAAACBadWQAAAASLziwAAACCRWcWAAAAwWoQbwDzB+r7b97w7brrribvt99+Ba8J4Zs5c2bG1/v06WPyPvvsU8xyUCT+G8Jqeq4umjdvbnK/fv1S1vHfAPb888+bvG7dOpP9D4OA5U8I71/n33777YzbP/vssyb7bxCTpOuvv97kV155JY8Ka8f/AI/XXnut6MdE4Y0dO9bkm266yeR07S2Z/8a/k046qTCFlSnuzAIAACBYdGYBAAAQLDqzAAAACFaDGDM7Z84ck/0xRb4TTjihmOWgQvhjZlu0aGHyVVddVZ/loIL4E/hL0rRp00z2J02/6667TB46dGjhC8N/HHHEEVnXmT9/vsn+mNmmTZuafPbZZ5t87rnnmjxy5EiTs73/A+Hw28aVV15p8r/+9a+M22+77bYm+x+SsPXWW9ehuvLHnVkAAAAEi84sAAAAgkVnFgAAAMFqEGNm165dm/H1qqoqky+77LJiloNAjR492uSPP/7Y5Hbt2pnMvLKorUaNUu8zDBo0yOSpU6ea7M9petppp5m8xx57FKY45Ozoo482efDgwSb7c4WOGTPG5L/97W8mz5o1K+8adtlll7y3Qf2bPn26yZ9++mnG9f33aPhj6g866KDCFBYI7swCAAAgWHRmAQAAECw6swAAAAhWgxgz++STT2Z8/dvf/rbJrVu3LmY5CJQ/ZtY5Z/Kxxx6bcft08wSuX7/e5Pbt29eyOlS67t27m3zjjTea7M9r/Ktf/crkcePGmdy8efMCVod09txzT5P79etn8sSJEzNu//zzz2d8vUmT1B/hffr0MfnWW2/NuA/Uv3Q/C2677ba89nHGGWeYfOihh9alpOBxZxYAAADBojMLAACAYNGZBQAAQLAqbsysP2+fJC1fvjzjNs2aNTPZ/7xsIBf++DV/jKL/ueqS1LVrV5MfeuihwheGijRgwACT7733XpMfffRRk/05S/faa6/iFIb/8Mcl33HHHSb7Yydfe+01kz/55BOTq6urTfbbgJQ63zBKb+PGjSb7Y6kl6csvv8y4j27dupnst6WGjjuzAAAACBadWQAAAASLziwAAACCVXFjZtN9pvl+++1n8pIlS0zefffdi1oTGob77rvP5LFjx5r8P//zPynbXHvttUWtCZWrbdu2Jj/zzDMmd+jQweRhw4aZPH78+OIUhhq1a9fO5BkzZpj8hz/8weS5c+ea7I+H/da3vlW44lA0zz33nMkffvhh3vsYMWKEyf57fRo67swCAAAgWHRmAQAAECw6swAAAAhWxY2Zbdy4ccpzN998s8nOOZP32WefotaEynDnnXeafN1115ncq1cvkwcOHGjy9ttvn7LPrbbaqkDVoaFr3769yUcddZTJ06ZNM3np0qUmd+nSpTiFIWdnnnlmxoww1ea9EYMGDTL58MMPL1Q5FYk7swAAAAgWnVkAAAAEi84sAAAAgkVnFgAAAMGquDeApbPzzjubfP/995eoEoTs4IMPNtmfCBsoJ5MnTza5W7duJi9fvtxk3gAGFMe6deuyruN/AMZll11WrHIqEndmAQAAECw6swAAAAgWnVkAAAAEq0GMmQWAhqZVq1Ymv/feeyWqBGjYrrjiioxZSv1ghZ122qmoNVUa7swCAAAgWHRmAQAAECw6swAAAAgWY2YBAACK5PLLL8+YUXfcmQUAAECw6MwCAAAgWHRmAQAAECwXRVHuKzu3WtLK4pWDetQhiqK2xdgx7aTi0FaQC9oJckVbQS5ybid5dWYBAACAcsIwAwAAAASLziwAAACCRWcWAAAAwaIzCwAAgGDRmQUAAECw6MwCAAAgWHRmAQAAECw6swAAAAgWnVkAAAAE6/8DMREeGQncZfkAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_images_labels_prediction(x_test, y_test, predictions, idx=0, num=10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7. 显示混淆矩阵" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 7.1 建立混淆矩阵" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
predict0123456789
label
0976100002100
10113410000000
22010250100310
30001004020130
4000098000002
5100608831001
6430021948000
70120000102311
8213011329583
9320091020992
\n", "
" ], "text/plain": [ "predict 0 1 2 3 4 5 6 7 8 9\n", "label \n", "0 976 1 0 0 0 0 2 1 0 0\n", "1 0 1134 1 0 0 0 0 0 0 0\n", "2 2 0 1025 0 1 0 0 3 1 0\n", "3 0 0 0 1004 0 2 0 1 3 0\n", "4 0 0 0 0 980 0 0 0 0 2\n", "5 1 0 0 6 0 883 1 0 0 1\n", "6 4 3 0 0 2 1 948 0 0 0\n", "7 0 1 2 0 0 0 0 1023 1 1\n", "8 2 1 3 0 1 1 3 2 958 3\n", "9 3 2 0 0 9 1 0 2 0 992" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.crosstab(y_test, predictions, rownames=['label'], colnames=['predict'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 7.2 建立真实值与预测 DataFrame" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
labelpredict
077
122
\n", "
" ], "text/plain": [ " label predict\n", "0 7 7\n", "1 2 2" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.DataFrame({'label': y_test, 'predict': predictions})\n", "df[:2]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 7.3 查询真实值是 \"5\" 但预测值是 \"2\" 的数据" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
labelpredict
\n", "
" ], "text/plain": [ "Empty DataFrame\n", "Columns: [label, predict]\n", "Index: []" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[(df.label==5)&(df.predict==2)]" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_images_labels_prediction(x_test, y_test, predictions, idx=340, num=1)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIgAAACTCAYAAABVq1EKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAB8BJREFUeJzt3W1oU1cYB/D/UzqctRSZiZYNXPBloBOZrFTnC9OBoptsiAoOP1gLww8O1FVpQfGTil82p6s68e2Llo1ZUAYOq87q0A6UYV+0jom0xQ3ZusGGc4LOsw89untO0idNm5sm6f8Hoee5uS/nJn/OPU3TRIwxIOpNwWB3gLIbA0IqBoRUDAipGBBSMSCkCjUgInI/yf0xEWnr5b5GESkb4PHnisifInLd3rYOZH8pHLdDRCK2fSXJuhUi8mIK+87oORWGufMs8Z0xZvFAdyIihcaYx6luZ4yZmWSVCgBtAH5JYbdpOae+yMglRkSKReS8iPwgIq0i8l7g7kIROS4i7SJyQkSKEmy/QESa7PZfiUhxmvt3X0R2icgN28+oXd4oIp+KyDUA60QkKiL1InLV3mbZ9UaJSIPd/hAACe470K62598sIjtFZBmAMgDH7WgwPJ3nlRbGmNBuAO7bn4UASmw7AuA2eh7EGAADYJa97wiAjbbdiJ4HLwLgEoARdnk1gK22vQvA9QS3Gnv/XAC/A2gG8A2AV3vppwGw0ra3AqgN9GFfYL06ALNteyyAdtveE+jTO3Z/Ee8xWATgCoAiW78QPM/AMdJyTml7DjMUkOcA1AJosSf7D4BSG5CuwPpvATjpBWQxgO7AA3UTwOE+Hr8EQLFtvw3gp17W+xdAoW2PA3A90Ic3A+v96j1pPwMotu1xgfX+SBCQjwF8kODYTkDSdU7pumVqDrISQBTA68aYRyLSAeB5e5//xyC/FgBnjTHv+zsVkV0A5iU43hfGmJ3GmL+e7dSY0yKyT0QixpjuJP0N9uHvQLsAwAxjzEOvH0l213chnlP/ZGgEWQfgM9ueh54nIIb/LzFv2PsOAajyRpAogC4AE+zyEQBe6ePxSwGIbZfb/TytzwN4ybYNgBW2vSXQ10a4w38dgE2B+jX7cw+ALba9CIkvMQuR+BLzNYB5KTymvZ5TKM9hhgISAdAEoBXAUQDtgYDcAnDMLqsPPIDPnhz0XHquoucS1QLg3T4e/0MAN9Bzvf4ewEy7vABAJ4DhT/sJ4BP0/DbxLYBoLwGJAPjS9uEmgM/t8lEAGuyxDtp9OwGx7Rq73XUAO+yypQB+tMuG9/ecwro9TeKQIiJTAFQaYz6y9X1jTFp/M8oXQzIgPgakdwwIqfi3GFIxIKRiQEiV0gtlkUjExGKxkLpCmdTR0YHu7u6kr/ClFJBYLIZr1671v1eUNcrK+vZOCl5iSMWAkIoBIRUDQioGhFQMCKkYEFIxIKRiQEjFgJCKASEVA0IqBoRUDAipGBBSMSCkYkBIxYCQigEhFQNCKgaEVAwIqYbCh9gNiseP3c+7q66uduphw4Y59Y4dO0LvU39wBCEVA0IqBoRUnIP0gz+/OHfuXNw627Ztc+orV9wPXK6oqEh7v8LAEYRUDAipGBBScQ6SQGtrq1PX19c7dWNjo1NfunQp5WOsWbMm5W0GA0cQUjEgpGJASJV3c5DTp0/HLfNfp7h165ZTt7e3O/Xdu3ed2n/doy8f3j9x4kSn3r9/v1NPnz496T6yAUcQUjEgpGJASJV3c5AlS5bELXv06FFajzFnzhynrqysjFtnxYoVTu2//yNXcAQhFQNCKgaEVAwIqfJukproC5L8F7bKy8udetmyZU69fPlypx47dmyaepd7OIKQigEhFQNCqrybg0yaNClu2ZgxY5y6oaFhQMfo7na/5DoSiQxof9mMIwipGBBSMSCkyrs5SEtLS9yyDRs2OPW9e/ec+uzZs07tv0m5s7PTqf03FE2ZMiXumLt373bqqVOn9tLj7MYRhFQMCKkYEFLl/BykL69p+HOG1atXO/WZM2fU7f2/7/h/27l48WLcNjNmzHBqf95TUlKiHjNbcAQhFQNCKgaEVDk/B3nw4EHSdU6cOKHeH41GnXrp0qVO7b8fpK2tzanr6uri9vnw4UOnPnjwoFNXVVWpfcoWHEFIxYCQigEhVc7PQU6dOpV0Hf91iwULFjh1bW2tU48fPz6lPmzcuDFu2bRp05z68uXLTs05COUFBoRUDAipcn4OcufOHacuKIjP/Pbt2526pqYm1D4B8fOe0tLS0I8ZBo4gpGJASMWAkIoBIVXOT1K7urqcetWqVXHrhD0pPXnyZNJ1Ro4cGWofwsIRhFQMCKkYEFLl/BzkwIEDTj179uzQj+m/GSjRG4b8Ocf69etD7VNYOIKQigEhFQNCqpyfg/hv/smEtWvXOvXt27fj1vG/YWL06NGh9iksHEFIxYCQigEhVc7PQTLB/6enI0eOOPX8+fPjtvH/eTtXcQQhFQNCKgaEVJyDJOB/8/bmzZudesKECU599OjRuH0UFRWlv2ODgCMIqRgQUjEgpOIcBEBzc7NTL1y40Kn9LwNoampy6uLi4nA6lgU4gpCKASEVA0KqITkHOXbsmFNv2rTJqZ88eeLU/v+95POcw8cRhFQMCKkYEFIxIKQakpPUCxcuOPXkyZOdeu/evU6d6qce5hOOIKRiQEjFgJBqSM5BDh8+PNhdyBkcQUjFgJCKASEVA0IqBoRUDAipGBBSif+t0urKIr8B6AyvO5RBLxtjoslWSikgNPTwEkMqBoRUDAipGBBSMSCkYkBIxYCQigEhFQNCqv8Arz+H6ns8x58AAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_images_labels_prediction(x_test, y_test, predictions, idx=1289, num=1)" ] } ], "metadata": { "kernelspec": { "display_name": "tensorflow-keras-practice", "language": "python", "name": "tensorflow-keras-practice" }, "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.5" } }, "nbformat": 4, "nbformat_minor": 2 }