{ "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 os\n", "from time import time\n", "\n", "import tensorflow as tf\n", "tf.logging.set_verbosity(tf.logging.ERROR) # 过滤掉 Tensorflow 的 Warning 信息\n", "\n", "import tensorflow.examples.tutorials.mnist.input_data as input_data\n", "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1. 数据预处理" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Extracting data/train-images-idx3-ubyte.gz\n", "Extracting data/train-labels-idx1-ubyte.gz\n", "Extracting data/t10k-images-idx3-ubyte.gz\n", "Extracting data/t10k-labels-idx1-ubyte.gz\n" ] } ], "source": [ "mnist = input_data.read_data_sets('data/', one_hot=True)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "train images shape: (55000, 784)\n", "train labels shape: (55000, 10)\n", "\n", "validation images shape: (5000, 784)\n", "validation labels shape: (5000, 10)\n", "\n", "test images shape: (10000, 784)\n", "test labels shape: (10000, 10)\n" ] } ], "source": [ "print('train images shape:', mnist.train.images.shape)\n", "print('train labels shape:', mnist.train.labels.shape)\n", "print()\n", "print('validation images shape:', mnist.validation.images.shape)\n", "print('validation labels shape:', mnist.validation.labels.shape)\n", "print()\n", "print('test images shape:', mnist.test.images.shape)\n", "print('test labels shape:', mnist.test.labels.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2. 建立模型" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.1 定义 layer 函数" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def layer(output_dim, input_dim, inputs, activation=None):\n", " W = tf.Variable(tf.random_normal([input_dim, output_dim]))\n", " b = tf.Variable(tf.random_normal([1, output_dim]))\n", " result = tf.matmul(inputs, W) + b\n", " \n", " if activation is None:\n", " outputs = result\n", " else:\n", " outputs = activation(result)\n", " \n", " return outputs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.2 建立输入层" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "x = tf.placeholder('float', [None, 784])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.3 建立隐藏层" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "h1 = layer(output_dim=256, input_dim=784, inputs=x, activation=tf.nn.relu)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.4 建立输出层" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "y_predict = layer(output_dim=10, input_dim=256, inputs=h1, activation=None)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3. 定义训练方式" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 3.1 建立训练数据 label 真实值的 placeholder" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "y_label = tf.placeholder('float', [None, 10])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 3.2 定义损失函数" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "loss_function = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=y_predict, labels=y_label))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 3.3 定义优化器" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "optimizer = tf.train.AdamOptimizer(learning_rate=0.001).minimize(loss_function)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4. 定义评估模型准确率的方式" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.1 计算每一项数据是否预测正确" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "correct_prediction = tf.equal(tf.argmax(y_label, axis=1), tf.argmax(y_predict, axis=1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.2 计算预测正确结果的平均值" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "accuracy = tf.reduce_mean(tf.cast(correct_prediction, 'float'))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 5. 开始训练" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "train_epochs = 15\n", "batch_size = 100\n", "total_batch = int(mnist.train.num_examples / batch_size)\n", "epoch_list = []\n", "loss_list = []\n", "acc_list = []" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "train epoch: 01 loss: 6.757495403 acc: 0.8368\n", "train epoch: 02 loss: 4.420877934 acc: 0.8854\n", "train epoch: 03 loss: 3.375313997 acc: 0.9038\n", "train epoch: 04 loss: 2.792876720 acc: 0.91\n", "train epoch: 05 loss: 2.404265642 acc: 0.9208\n", "train epoch: 06 loss: 2.152849913 acc: 0.9242\n", "train epoch: 07 loss: 1.942529678 acc: 0.9256\n", "train epoch: 08 loss: 1.796358347 acc: 0.931\n", "train epoch: 09 loss: 1.639527202 acc: 0.9368\n", "train epoch: 10 loss: 1.564802527 acc: 0.9388\n", "train epoch: 11 loss: 1.503402591 acc: 0.9392\n", "train epoch: 12 loss: 1.392196417 acc: 0.9442\n", "train epoch: 13 loss: 1.427558780 acc: 0.9424\n", "train epoch: 14 loss: 1.377343774 acc: 0.9472\n", "train epoch: 15 loss: 1.309303880 acc: 0.9476\n", "\n", "train finished. takes 27.56218981742859 seconds\n" ] } ], "source": [ "start_time = time()\n", "sess = tf.Session()\n", "sess.run(tf.global_variables_initializer())\n", "\n", "for epoch in range(train_epochs):\n", " for i in range(total_batch):\n", " x_batch, y_batch = mnist.train.next_batch(batch_size=batch_size)\n", " sess.run(optimizer, feed_dict={x: x_batch, y_label: y_batch})\n", " \n", " loss, acc = sess.run([loss_function, accuracy], \n", " feed_dict={x: mnist.validation.images, y_label: mnist.validation.labels})\n", " epoch_list.append(epoch+1)\n", " loss_list.append(loss)\n", " acc_list.append(acc)\n", " print('train epoch:', '%02d' % (epoch + 1), 'loss:', '{:.9f}'.format(loss), 'acc:', acc)\n", "\n", "print()\n", "print('train finished. takes', time() - start_time, 'seconds')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6. 以图形显示训练过程" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "def show_train_history(x_values, y_values, title):\n", " plt.plot(x_values, y_values, label=title)\n", " plt.xlabel('Epoch')\n", " plt.ylabel(title)\n", " plt.legend([title], loc='upper left')\n", " plt.show()" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "show_train_history(epoch_list, acc_list, 'acc')" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "show_train_history(epoch_list, loss_list, 'loss')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7. 评估模型准确率" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "accuracy: 0.9424\n" ] } ], "source": [ "print('accuracy:', sess.run(accuracy, feed_dict={x: mnist.test.images, y_label: mnist.test.labels}))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 8. 进行预测" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 8.1 执行预测" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "prediction_result = sess.run(tf.argmax(y_predict, axis=1), feed_dict={x: mnist.test.images})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 8.2 预测结果" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([7, 2, 1, 0, 4, 1, 4, 9, 6, 9])" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "prediction_result[:10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 8.3 定义函数以显示10项预测结" ] }, { "cell_type": "code", "execution_count": 22, "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].reshape(28, 28), cmap='binary')\n", " title = 'lable=' + str(np.argmax(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": 23, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAArMAAAEwCAYAAACkK/nwAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3XmYVMXZ/vH7YVEQFMUhuAUmEcMiEVSM4oK7QTFqcEElaoxvorivmPgiaqIGlYBxiYj8NL5BIhEVgYgaFwwGXFBZ3YIR1BgVkGhwQcX6/dGH2FXd08tM9/RUz/dzXX1x7u6zPGemOFNzprranHMCAAAAYtSi0gUAAAAA9UVnFgAAANGiMwsAAIBo0ZkFAABAtOjMAgAAIFp0ZgEAABCtsnZmzWxNntdrzWxxHa/NMrN+DTz+RWY2P3ksNrN1ZtaxIfss8LjLzKwmWZ6TZ90fm9lWRey7IudUbk2grQw1s4VmtsjM5phZn4bsr4jjlrOtVOScyq0JtJUeZjbXzNaa2YUN2VeRxy1nW6nIOZVTE2gnZmY3mNnS5P/hTg3ZXxHHXZP8u5WZTcmz7rlmtlER+97QzCYn5/SMmdU2rNqmodJtJW1fu5jZl2Z2VCn2V8DxytZW0rY70sxcqb5GdanqO7POueucc32dc30l/ULSk865D+qzLzNrVc8ads+zyo8lFfxDp5TnBM8bkvZ2zn1X0q8kja/vjppKW1EJzwmeDySdLWl0Q3fUhNpKyc4J/3WwpO2Sx88k3VLfHZlZy2K3cc6945zL1yk6V1IxHZRTJK12znWTNFbSNcXWheyS7/E1kh4pwX6KUqa2IjPbWNI5kp4ptqZiNUpn1szam9ljZvZCcpfo8LSXW5nZXWb2splNydbzN7ODkrsGL5jZPWbWvh5lHCfpj3XUt8bMxprZkqTOTsnzs8zsejObJ+kcM+tkZvea2XPJY49kvc3N7JFk+wmSLH3facsXJ+e/wMxGJb999ZN0V3KntW2pzilWlWorzrk5zrnVSXxa0jZ11BdNWyn0nGJVwbbyvnPuOUlf5KkvprZS0DnFqII/fw6X9H8u5WlJm5rZlsG+a83slWw1WOpO/DVm9oKko81sWzN7yMyeN7PZZtYjWe9bSX2LzOzKYN+Lk+WWZjbaUn/NW2hmZ5nZ2Ur9wvOEmT1RxDndmSxPkbS/mVmO9aNSwbYiSWdJulfS+3XUFltbkVI3Ua6R9FkR29SPc65sD0lrkn9bSdokWa6RtFSpC3OtJCdpj+S12yVdmCzPUuqCXCPpr5LaJc9fLGlksjxW0vwsj58HdWyk1J2HjnXU6SQNTZZHSroprYbfpa03SdKeyXIXSS8nyzek1TQo2V9N8DU4WNIcSRsluWP6eaYdoyTnFNujqbSVZN0LJU2olraS75xiezSVtiLp8vX7rZa2ku+cYnpUup1ImrH++5rkx9K/J8lzuWpYJml4sP12yfKukh5PlqdJOjFZPiPtvGslLU6WhynV+WwVtJNl69tUkifXcU7r979Y0jZp67+evn2sjybQVraW9KRSNxh/L+moLDXG1lZ2knRv+teonN/Dev2Jqx5M0tVmNkDSV0p94zonr73lnPtbsjxRmX/q2k1SL0l/S34B3EDSXElyzp1X4PF/IOlvru4/x3+l1DdmfQ33pb02OW35AEm90n4R3ST5zWuApMFJTX82s9XKdICkO5xznyTrZa2lhOcUq4q2FTPbV6k/pe1ZxyrRtZUCzilWlb6u5BNdW6lSTb2d5KphspS6Yyhpd0n3pLWTDZN/95B0ZLL8B2X/0/8BksY5575Maq+rnQyp/2lUhUq1leslXeyc+yrPje4o2oqZtZA0RqnhTo2isTqzQyV1krSzc+4LM1smqU3ymgvWDbNJ+otz7rhwp2Y2VtK+WY53t3NuVFo+VsX9OT69ho/TlltI2s05590yL+VfWcp4TrGoWFsxsx0kTZB0sHNuVYH1Num2Us9zikWlryvFatJtpYpVqp38U9I3057fJnkulKuG9e2khaR/u9R7JbIJ91EvZjZZUvcsL41xzv2fvj6nty013ruDpGq6rlSqrfSTdHfyf75G0iFm9qVzbmqeYzbJtiLpAUm9Jc1KzmkLSdPM7DDn3LxSHD9DOW/76utb2OdIujFZ3lepL2atvr5t3j95bYKkC9JvSyvVsN6U1C15vp2k7xRRQwel/hzfLnj+MUlbJ8tO0rHJ8oi0WmfJ/1PdJEkXpeW+yb83SBqRLB+s7H8OHKjsfw6cLmnfIr+uWc8p5kel24pSf95dKmn3LK9F2VZynVPMj0q3lbQ6LlfwJ/lY20quc4r1Uel2otTQkJlKdXJ2k/Rs2muvJP/mqmGZ/D/rzpF0dLJskvoky9Mk/ShZHqbsfzo+Tdn/dLxI0reK+JqeodRdOyl1Q+VPlf4+V0NbCWr5vdKGGcTaVoJzmqUyDzNorNkM7pLUz8wWSTpR0itpr70q6Qwze1nSZgre8emcW6HUreo/mtlCpW7b9yji2D+U9Ihz7r93QpJb4N2U6hBKqd9ovpcMgN5P0i/r2NfZyXksNLOXlPqmS9IVkgaY2RKl/iz4Zrihc+4hpRrSPDObr9QYRinVcMdZcW8AyzinKlKptjJS0uaSfpd8L+ZJ0beVrOdURSrSVsxsCzN7W9L5kkaY2dtmtknMbaWuc8q3XSQqdU15UNI/lPqF8jZJp0uSpaZXS7/tnrOGNEMlnWJmCyQtUerNWFKqA3ZGcn5b17HtBKXaz8Jk++OT58dLeqiIN/X8P0mbm9lSpdrKzwvcLhaV7KtkiLytNCpLes3Nipn1lvQT59z5SV7jnKvPDAmocrQVFIq2gkKY2aGSvu2cu8FS87TOcM71rmxVaIpoK4Vrlp3ZED90UCjaCgpFW0E+dFBQKNpKbnRmAQAAEK2q/gQwAAAAVDc6swAAAIhWUfPM1tTUuNra2jKVgsa0bNkyrVy5siwfQ0g7qS7PP//8Sudcp3Lsm7ZSPbimoFBcU1CIYq4pRXVma2trNW9etc3u0zz169evbPumnVQXM1tern3TVqoH1xQUimsKClHMNYVhBgAAAIgWnVkAAABEi84sAAAAokVnFgAAANGiMwsAAIBo0ZkFAABAtOjMAgAAIFp0ZgEAABAtOrMAAACIFp1ZAAAARKuoj7MFqsXo0aMznvv000+9vHDhQi9PmTIl5z6HDRvm5f79+3v5hBNOKKZEAABQAO7MAgAAIFp0ZgEAABAtOrMAAACIFp1ZAAAARIs3gKFZGDJkiJfvueeeovdhZjlfHzdunJcfffRRL++9994Z23Tp0qXoOlB9XnvtNS937949Y50bbrjBy2eddVZZa0Lpffzxx16+6KKLvBxeQ/r16+fl8LrVtWvXElYHxIs7swAAAIgWnVkAAABEi84sAAAAosWYWVSlUoyR7dGjh5cHDhzo5X/84x9enjZtmpeXLl3q5YkTJ2Yc45JLLim6LlSfF1980cstWmTeZ9h6660bqxyUyTvvvOPl2267zcstW7b08rx587w8ffp0L5955pklrA6N5YUXXsh4bvDgwV5etmxZI1XztUceecTLPXv29PI3v/nNxiynKNyZBQAAQLTozAIAACBadGYBAAAQLcbMoiqEY8vuv//+nOv37t0747lwzGtNTY2X27dv7+XPP//cy7vuuquXFyxY4OVVq1blrAnN1/z5870ctjUpc0wdmr4VK1Z4+aSTTqpQJWhKHn744Yzn1q5dW4FKfOHPwNtvv93Ld999d2OWUxTuzAIAACBadGYBAAAQLTqzAAAAiFaTGzM7ZcoUL4fz8G211VZebtOmjZeHDh2asc8tttjCy926dWtIiWiC/vWvf3nZOeflcIxstjFLW265ZVHHHD16tJdffvnlnOsfeuihRe0f1WvRokVevvHGG7184oknNmY5KIEbbrgh47mpU6d6+bnnnmvQMWbPnu3l8DonSX369PHygAEDGnRMNNyXX37p5QcffLBCleTWr18/L48ZM8bLH3/8sZfbtWtX9poKxZ1ZAAAARIvOLAAAAKJFZxYAAADRanJjZi+66CIvF/v5xOPGjct4bpNNNvFyr169iq6r1MLPOB4+fLiXw7EryO0HP/iBl5cuXerljTfe2MsdO3Zs8DEnT57s5XDeWaAur776qpfDsWhDhgxpzHJQAueee27Gcy1btizpMe67776cWZK6dOni5T/96U9e3nnnnUtaE/J74oknvDxnzpyMdS6++OLGKqdOH3zwgZeXLFni5U8++cTLjJkFAAAASoDOLAAAAKJFZxYAAADRanJjZidMmODl8PPtw/GuL730kpdffPHFjH3OmjXLy08//bSXwzFGb775ZkG1rte6deuM52pqarwczoMa1hCOoWXMbMN07dq15Pu87rrrvPzaa6/lXH/XXXfNmdF8XXvttV6ura31Mv//m75DDjnEy9nmfF23bl2DjhH+HAnHKC5fvjxjmzfeeMPLu+yyi5e/+uqrBtWE/MJ5pI899lgvZ5vr/pJLLilrTYWYNm1apUuoN+7MAgAAIFp0ZgEAABAtOrMAAACIVpMbM7v//vvnzKGBAwfm3efq1au9HI6rDcenFfv52RtuuGHGc927d/dyjx49vBzO57btttsWdUyU34wZM7w8cuRIL69du9bLnTt39vKoUaO8vNFGG5WwOsQknC87vMaE14umNH8jUp588kkvv/LKK142s4xtip1n9rTTTvPyQQcd5OUOHTp4+fHHH8/Yx1VXXZXzGLfccouXhw0bVkyJKED4PQjnZ504cWLGNu3bty9rTdmE/ZCwjWdr000Vd2YBAAAQLTqzAAAAiBadWQAAAESLziwAAACi1eTeAFYOm222mZf322+/nOvne9NZIe69914vh29C22GHHbwcTqqMyps3b56Xwzd8hYYMGeLlvffeu+Q1IU7hGytCnTp1aqRKUKjwTXvhNXrlypVF7zP8gJ6jjjrKy5dddpmX871pNNuHw9x6661eDuscPny4lz/77DMvn3nmmV7O9qFA8E2ZMsXLDz74oJfDD0kIP8iiUq688kovh2/42meffby86aablrukeuPOLAAAAKJFZxYAAADRojMLAACAaDWLMbPl9v7772c8d/rpp3vZOeflcAL+jh07lr4wFOWII47w8sMPP5xz/ZNOOsnL4fgjYL2FCxfmfD0cx4jK++KLL7xcnzGyAwYM8PLkyZO9XFNTU3xhabKNmb3kkku8fP7553v5448/9nLY9g477DAv84E++d1zzz1eDr/GTeGDKcIx4JI0adIkL7dq5XcJR4wY4eWmPH6aO7MAAACIFp1ZAAAARIvOLAAAAKLFmNkSuPnmmzOeC8fRhvOzde/evaw1Ibd//etfGc/NmTPHy+G8suFcoOF4ovbt25eoOsRu7ty5Xr7jjju8vOOOO3r5wAMPLHtNKK9sc4eG3/eGjpEtRDjm9a677vLys88+W/Yaqt2HH37o5aeffjrn+uF7aCph/PjxGc+tWLHCy7169fJyvjn5mxLuzAIAACBadGYBAAAQLTqzAAAAiBZjZuvhqaee8vKoUaPybvPAAw94uXfv3iWtCcUZPHhwxnP55pEcOnSol5l/EXV57LHHvLx69WovDxw40Mtt2rQpe01omHXr1uV8/ZlnnmmkSnIL5zT/6quvcr4entdll13m5YkTJ5awuuoQvp/i7bff9vJxxx3XmOUU5PXXX8+7Tsz9Eu7MAgAAIFp0ZgEAABAtOrMAAACIFmNm6+HBBx/08ueff56xzgEHHODl/v37l7Um5DZt2jQvv/jii3m32Weffbz8y1/+spQloYotWLAg5+tHH310I1WC+ho3bpyXW7ZsWaFKijN9+nQvh9c6M/NyeF5XXHFFeQqrIhtvvLGX+/bt6+VFixZ5+YMPPvByx44dy1NYmnCu+3vuuSfvNnvssUe5yik77swCAAAgWnRmAQAAEC06swAAAIgWY2YL8Omnn3r5oYce8vKGG26YsU047qh169alLwx1WrVqlZevvvpqL2cb5xwKx0G1b9++4YWhKr377rtenj17tpd79Ojh5R/+8IdlrwkNM2PGjEqXkGHFihVefumllzLWCa91+dTU1HiZn1X5tW3b1svdunXz8pQpU7w8aNAgL59//vkNrmHx4sVeDueRXb58uZfDsdLZtGgR7/3NeCsHAABAs0dnFgAAANGiMwsAAIBoMWa2ANddd52Xw3n7Dj744Ixtdt9997LWhNx+85vfePnZZ5/Nu80RRxzhZeaVRaF+//vfe/m9997zcrZrBFCsq666yss333xz0fuora318p133unlLl26FL3P5u7yyy/3snPOy+H462OPPbbBx+zUqZOXwzGxK1euLHqfJ598coNqqiTuzAIAACBadGYBAAAQLTqzAAAAiBadWQAAAESLN4BlEQ7W/tWvfuXlDh06ePnSSy8te00ozpgxY4reJnwzBR+SgEKFE5SHNttss0aqBNXkkEMO8fIrr7zS4H326tXLy3vttVeD99nc9ezZ08t/+tOfvBy+aTz8gIP6OOqoo3K+ftJJJ3l54sSJefcZfhhETLgzCwAAgGjRmQUAAEC06MwCAAAgWoyZlbRq1Sovn3322V7+8ssvvRyOY+rfv395CkOjCttB69atG7S/cGx1tv198cUXXv7www9z7nP16tVeHjt2bNF1tWzZ0svXXHONlzfaaKOi99ncTZ8+Pefrhx56aCNVglIJJ75ft25dzvVnzpyZd58//elPvfzOO+8UVUM4MX59hO8JQfntuOOOOXM5fPvb3y56m0WLFnn5u9/9bqnKKTvuzAIAACBadGYBAAAQLTqzAAAAiFazHDMbjn0aOHCgl9944w0vd+vWzcvhvLOoDjvssENJ93fMMcd4ecstt8xY57333vPy3XffXdIaCtG5c2cvjxgxotFriM3s2bO9HH4fEb9hw4Z5efjw4TnXHzRoUMZz4fj0Yl8Pf1blWz+b0047rehtEL9wvHWYs4lpjGyIO7MAAACIFp1ZAAAARIvOLAAAAKLVLMfMhp+LPG/evJzrjxkzxsvbbrttyWtCaYVzAU+dOrXRawg/n7s+wrlpW7TI/fvnYYcd5uV+/frlPcaee+5ZfGHN3P333+/lcC7qcB7Jvffeu+w1obQGDx7s5WuvvdbLK1eubMxyJEk1NTVe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7Ju2Uj24pqBQXFNQiGKuKUV1ZmtrazVvXrXMt9689evXr2z7pp1UFzNbXq5901aqB9cUFIprCgpRzDWFYQYAAACIFp1ZAAAARIvOLAAAAKJFZxYAAADRojMLAACAaNGZBQAAQLTozAIAACBadGYBAAAQLTqzAAAAiBadWQAAAESLziwAAACiRWcWAAAA0aIzCwAAgGjRmQUAAEC0WlW6AAAAULzVq1dnPPfmm28WtY+uXbt6eezYsV7u3bu3l7/zne9k7KNPnz5FHRMoNe7MAgAAIFp0ZgEAABAtOrMAAACIFmNm62H69OlePuywwzKxUMvfAAAPoElEQVTWufHGG708bNgwL7ds2bL0haFO77//vpePOeaYjHV23313L//sZz/zcm1tbcnrKtaHH37o5b/+9a9eHjhwoJdbt25d9poAlMeMGTO8HP7smTVrVsY2f//734s6Rvfu3b28bNkyL69duzbvPr766quijgmUGndmAQAAEC06swAAAIgWnVkAAABEizGzBVi1apWXw/Gv2Zx11llePuWUU7zctm3bhheGOoXzL26//fZeDseeSlLnzp293BTHyO60005eXrlypZfnzZvn5e222648hTVzH330kZd//vOfe3nJkiVefvTRR73MWObm6fXXX/fyzTff7OXx48d7+dNPP/Wyc67kNb366qsl3yfQ2LgzCwAAgGjRmQUAAEC06MwCAAAgWoyZLUA4l+c///nPvNscd9xxXm7Tpk1Ja4IvHDsaziMbjns+44wzMvYRzg3cFFx55ZVefuONN7wcjrFjjGzpTZw4MeO5ESNGePnNN9/MuY9wjO3mm2/e8MIQnbffftvL119/faPX0KNHDy/37t270WtA8ZYuXerl8Gfe/fff7+VwDuIWLTLvXZ522mleDudaj+nnCXdmAQAAEC06swAAAIgWnVkAAABEizGzWYSfRR2OWyzECSec4GUza1BNyO2FF17wcrbPLE83cuTIMlZTf4sXL/by6NGjvfzDH/7Qy0OGDCl7Tc1NOK7xvPPOy1gnHK+W7/93OO/0TTfd5OWOHTsWUyIqIPyeh+Nd99xzz4xtBg4c6OUNNtjAyx06dPBy+/btvbxmzRovf//73/dytvGuu+66q5d33HFHL4dznLdr1y5jH2h8ixYt8nI4B/F9993n5RUrVjT4mE8//bSXw/mvu3fv7uWwjf/2t7/1cti+GxN3ZgEAABAtOrMAAACIFp1ZAAAARIsxs1ksXLjQy+F4zFCrVplfxoMPPrikNcH3/vvve/nee+/Nuf7tt9/u5U6dOpW8pvoIx8geeOCBOdcfPHiwlzfeeOOS19TcheOUwzmK6+Puu+/28syZM70czlsbjrGVKjserTn6+OOPvRz+31ywYIGXp06dmnef/fv39/KLL77o5draWi+H8xdvs802Xs42dyianrBPEY6HlaTJkyd7+cMPP8y5z7At7LXXXl4O29J1112XsY+dd97Zy88884yXw2vfgw8+6OU+ffp4OZy3tjHxPwEAAADRojMLAACAaNGZBQAAQLQYM5tFOJ9bPvnGOaL0LrjgAi9PnDjRyzvttJOXjz766LLXVB9PPfWUl999910vn3zyyV7+0Y9+VPaampvly5d7+Y477si7TThWrHPnzl7+y1/+knP7cDxcOE536NChGdtsscUWeetC/X3++edePv74470cjpG95JJLvHzAAQcUfcxwXGOoS5cuRe8TlXfqqad6+f777/dyIXPEhu3pu9/9rpevvvpqL7dp0ybn/ubOnZvx3C233OLl8OfN/PnzvRxeg04//XQvH3nkkV5uzPemcGcWAAAA0aIzCwAAgGjRmQUAAEC06MwCAAAgWrwBLIsnn3wy5+vh5OXhQGyUn5nlzFtvvbWXKzHh/KeffurlbO0knDw7PI/wwx5QeuGbHD766CMvDxgwIGOb8Brx2WefeXnSpEle/vWvf+3lpUuXejl849/hhx+ecczwgxY6duyYsQ4Kt2bNGi+H/z+nT5/u5fDNLBdddJGXN9pooxJWh6Ys/P9+7bXXevm2227zsnPOy9/4xjcy9jls2DAvh+2rXbt2RdeZLtuHv3z55ZdevuKKK7z8/e9/38vLli1rUA3lxJ1ZAAAARIvOLAAAAKJFZxYAAADRYsyspDlz5ng52+TC6cKxUX379i15TWiYGTNmePmggw7y8qabbpqxTThmqVizZs3KmZ9++um8+2iqH+5QzdauXevlcNzyeeedl3cf4YTlP/nJT7w8ZcoUL7/++uteDsfUZRt/WYlx39Vs6tSpXh41apSXu3bt6uXZs2d7uUOHDuUpDE1eeG2/7rrrvBz+fw7fw5Htg5m+973vNaimdevWefmtt97y8oknnpixzaBBg7y8evXqoo55wgkneDnbz9XGwp1ZAAAARIvOLAAAAKJFZxYAAADRYsyspOeee66o9Rs6thINd84553j58ccf9/I777zj5XBe0HBMkyQ98MADDaop3Gc49jKbbbfd1svMWdz4/vjHP+Z8/c9//nPGc0cccURRx5g3b15R6++2224Zz7Vv376ofSC38L0SoR133NHL22yzTTnLQUTC+VlbtmyZc/3WrVt7+ZlnnslYJxxX/8orr+TcZ9u2bb388ssv58w1NTUZ+wjnt86nc+fOXh4xYoSXw/NsTNyZBQAAQLTozAIAACBadGYBAAAQLcbMKv+Y2XDutNNPP72c5aAAO++8s5cXLVrk5fnz53v5oYce8nL4WdpS5udln3TSSUXVFM65t8MOO+TdZvfdd/dyOIYW5Xfcccd5ORw7ne36EI5nC9vf/fff7+Vw/sbwmhK+Pn78+Ixjhu2rV69eGeugcOEYxdDMmTO9HH5u/WGHHeblcIwtqtf+++/v5X333dfLf/nLX7y8fPlyL5999tlFH7NVK7+7Fo7bzaeQ8bEtWvj3NwcPHuzlG264wctbbrllUTWUE3dmAQAAEC06swAAAIgWnVkAAABEq1mOmX3qqae8PGnSpJzrh5/BzXyDTc9mm23m5XAMU5ivueaaktfwj3/8w8vhvLN9+/bN2Gb06NElrwPFOeCAA7wc/n9fuHBhxjY9e/b0cr45hQ888EAv33zzzV4+9NBDvfzaa69l7CMcrzZu3Licx0RuK1as8HL4PVy7dq2XwzGzV155pZdPO+20jGPsuuuuXn7rrbe83K1bNy9vv/32OSqWlixZ4uX+/ftnrMPPp/IL53gNx8j/+9//9vKoUaO8/Le//S1jn5tvvrmXu3Tp4uWwPS5YsMDL2eauLdapp57q5XDe83Csf1PCnVkAAABEi84sAAAAokVnFgAAANFqlmNmV61a5eVwbGMoHO8GZPPLX/7Sy+EYvGxz23bq1KmsNSG/jh07evmee+7x8lFHHZWxzYcffujl8BoSziMZjtFu06aNl8P5HH/9619nHPPhhx/28uuvv+5l5iguzoUXXujl3/zmN0Vtv27dOi+H46Dreq6UwrmxJWmfffbx8t13313WGpApHFsajpkthRNPPNHL+cbMbrLJJhnPjRkzxss//vGPvdyyZcv6FVcB3JkFAABAtOjMAgAAIFp0ZgEAABCtZjlmNhwTFwrHu/zsZz8rZzmIVNiO7rzzTi+HY5TCeQTRNIXzzk6ZMiVjnXBu6vCaEY6fDsfIhi699FIvv/zyyxnrPPDAAzmPEbY/5BaOYzzmmGO8PHToUC9/8cUXXn777be9HI6hbQzvv/9+xnPhdal3795eHjFiRFlrQnmE77kodiz0LbfckvHc8ccf36CamhLuzAIAACBadGYBAAAQLTqzAAAAiBadWQAAAESrWbwBLByoH755I7TNNtt4eZdddil5TYjfzJkzc74+aNAgL++0007lLAdlEr4hrK7nGqJt27ZeHjJkSMY64RvAnnjiCS9/8MEHXg4/DAK+cEL48Dr/2muv5dz+scce83L4BjFJuvzyy7387LPPFlFh/YQf4PH888+X/ZgovQkTJnj5yiuv9HK29pYufOPfkUceWZrCmijuzAIAACBadGYBAAAQLTqzAAAAiFazGDM7Z84cL4djikKHH354OctBlQjHzLZr187LF154YWOWgyoSTuAvSdOmTfNyOGn6TTfd5OWRI0eWvjD81/777593nfnz53s5HDPbunVrL5988sle/ulPf+rlsWPHejnf+z8Qj7BtXHDBBV7+z3/+k3P7jTfe2MvhhyRsuOGGDaiu6ePOLAAAAKJFZxYAAADRojMLAACAaDWLMbOrVq3K+XpNTY2Xzz333HKWg0iNGzfOy++++66XO3fu7GXmlUV9tWiReZ9h+PDhXp46daqXwzlNjz32WC9/5zvfKU1xKNhBBx3k5UsuucTL4Vyh48eP9/Lf//53L8+aNavoGrbeeuuit0Hjmz59upc/+uijnOuH79EIx9TvueeepSksEtyZBQAAQLTozAIAACBadGYBAAAQrWYxZvbhhx/O+fo3v/lNL3fo0KGc5SBS4ZhZM/PyIYccknP7bPMErl692stdunSpZ3Wodn379vXyr371Ky+H8xr/4he/8PLEiRO93LZt2xJWh2x69uzp5SFDhnh58uTJObd/4okncr7eqlXmj/BBgwZ5+Zprrsm5DzS+bD8Lrr322qL28aMf/cjL++yzT0NKih53ZgEAABAtOrMAAACIFp1ZAAAARKvqxsyG8/ZJ0tKlS3Nu06ZNGy+Hn5cNFCIcvxaOUQw/V12Sevfu7eU777yz9IWhKp144olevvXWW7183333eTmcs3SHHXYoT2H4r3Bc8vXXX+/lcOzk888/7+X33nvPy7W1tV4O24CUOd8wKm/NmjVeDsdSS9Lnn3+ecx99+vTxctiWmjvuzAIAACBadGYBAAAQLTqzAAAAiFbVjZnN9pnmu+yyi5eXLFni5e22266sNaF5uO2227w8YcIEL//P//xPxjaXXnppWWtC9erUqZOXH330US937drVy6NGjfLypEmTylMY6tS5c2cvz5gxw8t/+MMfvDx37lwvh+Nhv/GNb5SuOJTN448/7uV//vOfRe9jzJgxXg7f69PccWcWAAAA0aIzCwAAgGjRmQUAAEC0qm7MbMuWLTOeu+qqq7xsZl7eaaedyloTqsONN97o5csuu8zLAwYM8PKwYcO8vNlmm2Xsc4MNNihRdWjuunTp4uUDDzzQy9OmTfPySy+95OVevXqVpzAU7IQTTsiZEaf6vDdi+PDhXt5vv/1KVU5V4s4sAAAAokVnFgAAANGiMwsAAIBo0ZkFAABAtKruDWDZbLXVVl6+/fbbK1QJYrbXXnt5OZwIG2hKpkyZ4uU+ffp4eenSpV7mDWBAeXzwwQd51wk/AOPcc88tVzlViTuzAAAAiBadWQAAAESLziwAAACi1SzGzAJAc7PJJpt4+Y033qhQJUDzdv755+fMUuYHK2y55ZZlranacGcWAAAA0aIzCwAAgGjRmQUAAEC0GDMLAABQJuedd17OjIbjziwAAACiRWcWAAAA0aIzCwAAgGiZc67wlc1WSFpevnLQiLo65zqVY8e0k6pDW0EhaCcoFG0FhSi4nRTVmQUAAACaEoYZAAAAIFp0ZgEAABAtOrMAAACIFp1ZAAAARIvOLAAAAKJFZxYAAADRojMLAACAaNGZBQAAQLTozAIAACBa/x8pqqLHkV3s1QAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_images_labels_prediction(mnist.test.images, mnist.test.labels, prediction_result, 0, 10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 9. 找出预测错误" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "i=8 label=5 predict=6\n", "i=33 label=4 predict=6\n", "i=66 label=6 predict=2\n", "i=96 label=1 predict=3\n", "i=115 label=4 predict=8\n", "i=212 label=9 predict=3\n", "i=241 label=9 predict=8\n", "i=245 label=3 predict=6\n", "i=247 label=4 predict=6\n", "i=259 label=6 predict=0\n", "i=261 label=5 predict=3\n", "i=264 label=9 predict=8\n", "i=268 label=8 predict=9\n", "i=274 label=9 predict=3\n" ] } ], "source": [ "for i in range(300):\n", " label = np.argmax(mnist.test.labels[i])\n", " predict = prediction_result[i]\n", " if predict != label:\n", " print('i=' + str(i), 'label=' + str(label), 'predict=' + str(predict))" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "sess.close()" ] } ], "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 }