{ "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=1000, input_dim=784, inputs=x, activation=tf.nn.relu) # 隐藏层的神经元增大为1000" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.4 建立输出层" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "y_predict = layer(output_dim=10, input_dim=1000, 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: 9.910659790 acc: 0.8862\n", "train epoch: 02 loss: 6.398650646 acc: 0.9122\n", "train epoch: 03 loss: 5.056443214 acc: 0.9276\n", "train epoch: 04 loss: 4.601753712 acc: 0.9248\n", "train epoch: 05 loss: 3.620224953 acc: 0.9388\n", "train epoch: 06 loss: 3.622395992 acc: 0.9406\n", "train epoch: 07 loss: 2.953754187 acc: 0.9474\n", "train epoch: 08 loss: 2.867266178 acc: 0.948\n", "train epoch: 09 loss: 2.808548927 acc: 0.9466\n", "train epoch: 10 loss: 2.648730993 acc: 0.9514\n", "train epoch: 11 loss: 2.724977016 acc: 0.9482\n", "train epoch: 12 loss: 2.598264694 acc: 0.9518\n", "train epoch: 13 loss: 2.520519495 acc: 0.9532\n", "train epoch: 14 loss: 2.709043980 acc: 0.9508\n", "train epoch: 15 loss: 2.382934809 acc: 0.9562\n", "\n", "train finished. takes 74.44282412528992 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.9542\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, 4, 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": "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5ClTpph8xRVX5LA6VJf3338/4bGePXuavHTp0mqq5hcvvviiyW3btjV51113rc5yssKdWQAAAASLziwAAACCRWcWAAAAwWLMLEqCP7Zs4sSJKddv3759wmP+mNeysjKTGzZsaPKGDRtMPuCAA0yeO3euyatWrUpZE2quOXPmmOy3NZHEMXUofitWrDD5vPPOK1AlKCYvvPBCwmPr168vQCWW/zvw0UcfNXns2LHVWU5WuDMLAACAYNGZBQAAQLDozAIAACBYRTdmdsKECSb78/DttNNOJterV8/k3r17J+xzhx12MLlVq1ZVKRFF6F//+pfJzjmT/TGyycYs7bjjjlkdc8iQISYvWrQo5frHH398VvtH6Zo/f77J999/v8l9+vSpznKQA8OHD094bNKkSSa/++67VTrGjBkzTPavcyIiHTp0MLlr165VOiaqbuPGjSY/99xzBaoktc6dO5s8dOhQk7///nuTGzRokPeaMsWdWQAAAASLziwAAACCRWcWAAAAwSq6MbM33nijydl+PvGIESMSHmvUqJHJ7dq1y7quXPM/47hfv34m+2NXkNoJJ5xg8pIlS0zedtttTW7atGmVjzlu3DiT/XlngYp89NFHJvtj0Xr16lWd5SAHrrnmmoTHateundNjPPPMMymziEiLFi1Mfuqpp0zed999c1oT0nvttddMnjlzZsI6N910U3WVU6HVq1ebvHDhQpN/+OEHkxkzCwAAAOQAnVkAAAAEi84sAAAAglV0Y2ZHjRplsv/59v541w8//NDkDz74IGGf06dPN/mtt94y2R9j9Pnnn2dU6xZ169ZNeKysrMxkfx5UvwZ/DC1jZqumZcuWOd/nvffea/LHH3+ccv0DDjggZUbNdc8995hcXl5uMv//i99xxx1ncrI5Xzdt2lSlY/i/R/wxisuWLUvY5rPPPjN5v/32M3nz5s1Vqgnp+fNIn3nmmSYnm+u+f//+ea0pE5MnTy50CZXGnVkAAAAEi84sAAAAgkVnFgAAAMEqujGzRx11VMrs6969e9p9rlmzxmR/XK0/Pi3bz8/eeuutEx5r3bq1yW3atDHZn89tt912y+qYyL+pU6eaPHDgQJPXr19vcvPmzU0eNGiQydtss00Oq0NI/Pmy/WuMf70opvkbEfP666+bvHjxYpNVNWGbbOeZvfTSS00+5phjTG7cuLHJr776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p1Ou/+ijj5rcrFmznNdUGf4Y2aOPPjrl+j179jR52223zXlNNZ0/Ttmfo7gyxo4da/K0adNM9uet9cfYihR2PFpN9P3335vs/9+cO3euyZMmTUq7zy5dupj8wQcfmFxeXm6yP3/xLrvsYnKyuUNRfPw+hT8eVkRk3LhxJq9duzblPv22cOihh5rst6V77703YR/77ruvyW+//bbJ/rXvueeeM7lDhw4m+/PWVif+JwAAACBYdGYBAAAQLDqzAAAACBZjZpPw53NLJ904R+Te9ddfb/Lo0aNN7tSpk8mnn3563muqjDfeeMPkb775xuQLLrjA5HPOOSfvNdU0y5YtM/mxxx5Lu40/Vqx58+Ymv/TSSym398fD+eN0e/funbDNDjvskLYuVN6GDRtMPvvss032x8j279/f5G7dumV9TH9co69FixZZ7xOFd8kll5g8ceJEkzOZI9ZvT3vttZfJd999t8n16tVLub9Zs2YlPPbQQw+Z7P++mTNnjsn+Neiyyy4z+dRTTzW5Ot+bwp1ZAAAABIvOLAAAAIJFZxYAAADBojMLAACAYPEGsCRef/31lM/7k5f7A7GRf6qaMu+8884mF2LC+R9//NHkZO3EnzzbPw//wx6Qe/6bHL777juTu3btmrCNf4346aefTB4zZozJf/zjH01esmSJyf4b/0466aSEY/oftNC0adOEdZC5devWmez//5wyZYrJ/ptZbrzxRpO32WabHFaHYub/f7/nnntMfuSRR0x2zpn8q1/9KmGfffv2NdlvXw0aNMi6znjJPvxl48aNJt92220m//a3vzV56dKlVaohn7gzCwAAgGDRmQUAAECw6MwCAAAgWIyZFZGZM2eanGxy4Xj+2KiOHTvmvCZUzdSpU00+5phjTN5uu+0StvHHLGVr+vTpKfNbb72Vdh/F+uEOpWz9+vUm++OWr7322rT78Ccs/93vfmfyhAkTTP7kk09M9sfUJRt/WYhx36Vs0qRJJg8aNMjkli1bmjxjxgyTGzdunJ/CUPT8a/u9995rsv//2X8PR7IPZtp///2rVNOmTZtM/uKLL0zu06dPwjY9evQwec2aNVkd89xzzzU52e/V6sKdWQAAAASLziwAAACCRWcWAAAAwWLMrIi8++67Wa1f1bGVqLqrr77a5FdffdXkr7/+2mR/XlB/TJOIyLPPPlulmvx9+mMv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\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=4\n", "i=38 label=2 predict=3\n", "i=125 label=9 predict=4\n", "i=149 label=2 predict=9\n", "i=151 label=9 predict=8\n", "i=241 label=9 predict=8\n", "i=245 label=3 predict=5\n", "i=247 label=4 predict=6\n", "i=257 label=8 predict=1\n", "i=259 label=6 predict=0\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 }