{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# MNIST-Neural Network-Two Hidden Layers with Modules (and Backward Propagation)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# coding: utf-8\n", "import sys, os\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import math\n", "\n", "sys.path.append(os.pardir)\n", "from deeplink.mnist import *\n", "from deeplink.networks import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Multilayer Neural Network Model" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "data = mnist_data(\"/Users/yhhan/git/aiclass/0.Professor/data/MNIST_data/.\")\n", "(img_train, label_train), (img_validation, label_validation), (img_test, label_test) = data.load_mnist(flatten=True, normalize=True, one_hot_label=True)\n", "\n", "input_size=784\n", "hidden_layer1_size=128\n", "hidden_layer2_size=128\n", "output_size=10\n", "\n", "network = MultiLayerNet(input_size, \n", " [hidden_layer1_size, hidden_layer2_size], \n", " output_size, \n", " activation='ReLU', \n", " initializer='N2',\n", " optimizer='SGD',\n", " learning_rate=0.1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Learning and Validation" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch: 0, Train Error: 2.30132, Validation Error: 2.30100 - Test Accuracy: 0.11350\n", "Epoch: 1, Train Error: 2.29954, Validation Error: 2.29909 - Test Accuracy: 0.11350\n", "Epoch: 2, Train Error: 2.29462, Validation Error: 2.29401 - Test Accuracy: 0.11350\n", "Epoch: 3, Train Error: 2.26639, Validation Error: 2.26552 - Test Accuracy: 0.22400\n", "Epoch: 4, Train Error: 1.94810, Validation Error: 1.94571 - Test Accuracy: 0.34400\n", "Epoch: 5, Train Error: 1.13778, Validation Error: 1.11439 - Test Accuracy: 0.64440\n", "Epoch: 6, Train Error: 0.74804, Validation Error: 0.69582 - Test Accuracy: 0.76010\n", "Epoch: 7, Train Error: 0.63823, Validation Error: 0.57519 - Test Accuracy: 0.79880\n", "Epoch: 8, Train Error: 0.57787, Validation Error: 0.51073 - Test Accuracy: 0.82620\n", "Epoch: 9, Train Error: 0.53000, Validation Error: 0.46092 - Test Accuracy: 0.84390\n", "Epoch: 10, Train Error: 0.48749, Validation Error: 0.41557 - Test Accuracy: 0.85720\n", "Epoch: 11, Train Error: 0.45482, Validation Error: 0.37893 - Test Accuracy: 0.87010\n", "Epoch: 12, Train Error: 0.42858, Validation Error: 0.35104 - Test Accuracy: 0.87720\n", "Epoch: 13, Train Error: 0.40488, Validation Error: 0.32823 - Test Accuracy: 0.88440\n", "Epoch: 14, Train Error: 0.38301, Validation Error: 0.30900 - Test Accuracy: 0.89130\n", "Epoch: 15, Train Error: 0.36259, Validation Error: 0.29245 - Test Accuracy: 0.89790\n", "Epoch: 16, Train Error: 0.34413, Validation Error: 0.27802 - Test Accuracy: 0.90310\n", "Epoch: 17, Train Error: 0.32763, Validation Error: 0.26542 - Test Accuracy: 0.90850\n", "Epoch: 18, Train Error: 0.31285, Validation Error: 0.25442 - Test Accuracy: 0.91170\n", "Epoch: 19, Train Error: 0.29934, Validation Error: 0.24462 - Test Accuracy: 0.91410\n", "Epoch: 20, Train Error: 0.28681, Validation Error: 0.23572 - Test Accuracy: 0.91730\n", "Epoch: 21, Train Error: 0.27489, Validation Error: 0.22745 - Test Accuracy: 0.91950\n", "Epoch: 22, Train Error: 0.26363, Validation Error: 0.21964 - Test Accuracy: 0.92210\n", "Epoch: 23, Train Error: 0.25300, Validation Error: 0.21222 - Test Accuracy: 0.92470\n", "Epoch: 24, Train Error: 0.24271, Validation Error: 0.20531 - Test Accuracy: 0.92760\n", "Epoch: 25, Train Error: 0.23295, Validation Error: 0.19870 - Test Accuracy: 0.93040\n", "Epoch: 26, Train Error: 0.22366, Validation Error: 0.19246 - Test Accuracy: 0.93340\n", "Epoch: 27, Train Error: 0.21491, Validation Error: 0.18647 - Test Accuracy: 0.93600\n", "Epoch: 28, Train Error: 0.20668, Validation Error: 0.18083 - Test Accuracy: 0.93720\n", "Epoch: 29, Train Error: 0.19904, Validation Error: 0.17549 - Test Accuracy: 0.93920\n", "Epoch: 30, Train Error: 0.19195, Validation Error: 0.17050 - Test Accuracy: 0.94090\n", "Epoch: 31, Train Error: 0.18531, Validation Error: 0.16574 - Test Accuracy: 0.94320\n", "Epoch: 32, Train Error: 0.17904, Validation Error: 0.16126 - Test Accuracy: 0.94530\n", "Epoch: 33, Train Error: 0.17316, Validation Error: 0.15701 - Test Accuracy: 0.94680\n", "Epoch: 34, Train Error: 0.16754, Validation Error: 0.15305 - Test Accuracy: 0.94720\n", "Epoch: 35, Train Error: 0.16216, Validation Error: 0.14933 - Test Accuracy: 0.94910\n", "Epoch: 36, Train Error: 0.15692, Validation Error: 0.14588 - Test Accuracy: 0.95050\n", "Epoch: 37, Train Error: 0.15203, Validation Error: 0.14260 - Test Accuracy: 0.95150\n", "Epoch: 38, Train Error: 0.14745, Validation Error: 0.13951 - Test Accuracy: 0.95210\n", "Epoch: 39, Train Error: 0.14304, Validation Error: 0.13667 - Test Accuracy: 0.95320\n", "Epoch: 40, Train Error: 0.13893, Validation Error: 0.13396 - Test Accuracy: 0.95420\n", "Epoch: 41, Train Error: 0.13488, Validation Error: 0.13145 - Test Accuracy: 0.95490\n", "Epoch: 42, Train Error: 0.13115, Validation Error: 0.12904 - Test Accuracy: 0.95580\n", "Epoch: 43, Train Error: 0.12736, Validation Error: 0.12679 - Test Accuracy: 0.95590\n", "Epoch: 44, Train Error: 0.12374, Validation Error: 0.12469 - Test Accuracy: 0.95650\n", "Epoch: 45, Train Error: 0.12021, Validation Error: 0.12268 - Test Accuracy: 0.95660\n", "Epoch: 46, Train Error: 0.11689, Validation Error: 0.12074 - Test Accuracy: 0.95740\n", "Epoch: 47, Train Error: 0.11372, Validation Error: 0.11896 - Test Accuracy: 0.95850\n", "Epoch: 48, Train Error: 0.11067, Validation Error: 0.11721 - Test Accuracy: 0.95900\n", "Epoch: 49, Train Error: 0.10777, Validation Error: 0.11559 - Test Accuracy: 0.96020\n" ] } ], "source": [ "import math\n", "\n", "num_epochs = 50\n", "train_size = img_train.shape[0]\n", "batch_size = 1000\n", "learning_rate = 0.1\n", "\n", "train_error_list = []\n", "validation_error_list = []\n", "\n", "test_accuracy_list = []\n", "epoch_list = []\n", "\n", "num_batch = math.ceil(train_size / batch_size)\n", "\n", "for i in range(num_epochs):\n", "# batch_mask = np.random.choice(train_size, batch_size)\n", "# x_batch = img_train[batch_mask]\n", "# t_batch = label_train[batch_mask]\n", "# network.learning(learning_rate, x_batch, t_batch)\n", " for j in range(num_batch):\n", " x_batch = img_train[j * batch_size : j * batch_size + batch_size]\n", " t_batch = label_train[j * batch_size : j * batch_size + batch_size]\n", " network.learning(x_batch, t_batch)\n", "\n", " epoch_list.append(i)\n", " \n", " train_loss = network.loss(x_batch, t_batch)\n", " train_error_list.append(train_loss)\n", " \n", " validation_loss = network.loss(img_validation, label_validation)\n", " validation_error_list.append(validation_loss) \n", " \n", " test_accuracy = network.accuracy(img_test, label_test)\n", " test_accuracy_list.append(test_accuracy) \n", " \n", " print(\"Epoch: {0:5d}, Train Error: {1:7.5f}, Validation Error: {2:7.5f} - Test Accuracy: {3:7.5f}\".format(\n", " i,\n", " train_loss,\n", " validation_loss,\n", " test_accuracy\n", " ))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Analysis with Graph" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABJIAAAFACAYAAADnI1acAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xt8VdWd///XJyERSMI1EDkBAS2KtPUa0bFWQ1GLtkr1\na1u0tl+tlqJVexk79es4re20HXsZf9rRamm9TC/K2FqVjihKxyPasQoqIhfRiBCSIPdbgBiSfH5/\n7BM4hFxOICfrnOT9fDz2Y++99lr7fM46AsfPWWttc3dEREREREREREQ6khM6ABERERERERERyQ5K\nJImIiIiIiIiISEqUSBIRERERERERkZQokSQiIiIiIiIiIilRIklERERERERERFKiRJKIiIiIiIiI\niKREiSQREREREREREUmJEkkiIiIiIiIiIpISJZJERERERERERCQlfUIH0FnFxcU+ZsyYTrfbuXMn\nBQUFXR+QpET9H5b6Pyz1f1jq/7AOpv9fffXVje4+LE0hyUE6mO9g+vMXlvo/PH0GYan/w1L/h5XO\n72BZl0gaM2YMCxcu7HS7eDxOeXl51wckKVH/h6X+D0v9H5b6P6yD6X8zW52eaORQHMx3MP35C0v9\nH54+g7DU/2Gp/8NK53cwTW0TEREREREREZGUKJEkIiIiIiIiIiIpUSJJRERERERERERSknVrJImI\niISwZ88eqqqqqKurCx1KVhk4cCDLly9v9Vrfvn0ZOXIkeXl53RyViIiIiBwsJZJERERSUFVVRVFR\nEWPGjMHMQoeTNXbs2EFRUdEB5e7Opk2bqKqqYuzYsQEiExEREZGDoaltIiIiKairq2Po0KFKInUR\nM2Po0KEa4SUiIiKSZZRIEhERSZGSSF1L/SkiIiKSfZRIEhERERERERGRlGiNJBERkSywadMmJk+e\nDMD7779Pbm4uw4YNA+CVV14hPz+/w3tceeWV3HTTTRxzzDFpjVVEREREDk5DA+zeDXV10b55az43\ng/LysDEqkZSw5Ln/YvmSOAOLihk4YBgDB5YwaEiMgcWl9B1SgvXvH31iIiIiAQwdOpRFixYBcOut\nt1JYWMiNN964Xx13x93JyWl9wPEDDzyQ9jil+5jZFOBOIBf4jbvf1uL6YOB+4CigDviyuy9JXFsF\n7AAagQZ3L+vG0EVERNrlHiVUPvgA6uuhsTEqa96a67Q8bmiItj179t8nHyffK7lta/eqr4+2PXv2\n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\nGSmTgd9Ftg2mufv2GIUsIiLSKd18M0RyOh1m/Hj41a/aV/fBBx9k9uzZVFdXM2XKFO69917q6+u5\n9tprWblyJe7OrFmzyMrKYuXKlXzpS18iNTW1TSOZPosSSSIi0qES4hKimqhqrt7rqaqt2pt8aloq\naip44803OPLoI6mqraKytpKqusi2tpLKihKqKkqpLN9DVVUZVVXlVFWXU1ldTlVNBVU1jXVK6qsp\nqq+mur6WKq+himqqbQ9VVh+UeMcbcj4OVEXKZ6x3/lkS640k4knyOJIsgSTiSYxLIMkSSYpLJCk+\nSGglRkpSYjKJCZGSlExSYiqJSakkJqWQlJBMYlwiifGJe7cNCaum51q7PTL3SFISUg7tC0p7TQLW\nu/sGADN7DJgJNE0kzQT+5O4OvG5mPcysn7tvjn24IiIicqhWr17NggULWLx4MQkJCcyaNYvHHnuM\nI444gu3bt7Nq1SoAdu3aRXx8PPfffz/33nsv48eP79A4lEgSEZFOLc7iSE1MJTUxtcXrNRtqmDpy\natTjcHfqvI6q2iqqK8uoKt1Fdeluqkt3U1W6m+qyPVSV76G6vITqilKqKkqpqSqnurKM6uoKqqrK\nqa6uoLqmMii1VVTVVVJTW0NNXTXVkdFX1fWV1FBPdTxUx0NNPFRFtuVxsCuyXxPXeL262XFNHNR2\nwPrmq696nbHDJ3/2jRINA9h3qN0m9h1tdKB7BgCbCdKdL5pZHXCfu89t6UPMbBYwCyAvL4+CgoI2\nBVlaWtrmOtJx1P7h028QLrV/uDpz+2dnZ1NSUgLA7bdH5zMij/9MVVVVJCYmUlJSwsKFC1myZAkT\nJ04EoKKigj59+jBlyhTWrVvHDTfcwJlnnslpp51GXV0ddXV1lJWV7f0uTVVWVrb791EiSUREpAOY\nGQmWQEJSAulJ6ZDVJ3ofVlcHlZVQXh6UsjKoqAhKeXnjtul+w7YsuM8ryqktL6O6qoyaqgpqqsqp\nqaqgurqC2upKaqorqamtoqamkpq4IPnUkIRq2A4+Ly5631Gi7WR3LzSzPsALZrbO3V9pflMkwTQX\nID8/36dOndqmDykoKKCtdaTjqP3Dp98gXGr/cHXm9l+7di2ZmbEZXf9ZkpOTSU5OJjMzk+TkZK67\n7jpubyG7tWrVKp577jkeeOABnnvuOe666y7i4+NJT09v8bukpKQwYcKEdsWkRJKIiEhnEx/fuAh4\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "[7 2 1 ..., 4 5 6]\n", "[7 2 1 ..., 4 5 6]\n", "Total Test Image: 10000, Number of False Prediction: 398\n", "Test Accuracy: 0.9602\n", "False Prediction Index: 8, Prediction: 6, Ground Truth: 5\n", "False Prediction Index: 33, Prediction: 6, Ground Truth: 4\n", "False Prediction Index: 124, Prediction: 4, Ground Truth: 7\n", "False Prediction Index: 151, Prediction: 8, Ground Truth: 9\n", "False Prediction Index: 233, Prediction: 7, Ground Truth: 8\n" ] }, { "data": { "image/png": "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\nwz8MeoQJY6+99ipmpa3g77rrrjGahg984APF7G//9m87Hm/687jnnntGPROjs+OOOxazd7/73cXs\nrLPOKmZPPvnkqGZi8F71qlcVsyOOOKKYLV68uJhdccUVxeziiy8uZk3fty5YsKCYlTRtcd/k5z//\neTFr+ju/2267FbOtt966mNkinpG66qqritk222zTx0nGv8MPP7yYffWrXy1mixYtGotxquKZQAAA\nAAAtYBEIAAAAoAUsAgEAAAC0gEUgAAAAgBawCAQAAADQAhaBAAAAAFrAFvEj0O026jvvvHMx23//\n/bua5fvf/34x23XXXTseb9qCc8sttyxmCxcuLGYrVqwoZlC7nXbaqZhtttlmfZxkYttnn31GfM6p\np546BpMQEfHUU08Vs4022qjj8b//+78vnjN//vxi9swzzwx/MGKDDTYoZjNmzChmJ598cjHbcMMN\ni9kf/uEfFrP3vve9xYzx4eqrry5mU6ZMKWbf/va3i9lxxx03qpl65bzzzitmTTPee++9xeyoo44q\nZt/97neL2T/+4z8Ws/e///3FDDpZd911Bz3ChLHDDjsUszlz5hSzWbNmFbPLL7+8mD300EPDG6wC\nngkEAAAA0AIWgQAAAABawCIQAAAAQAtYBAIAAABoAYtAAAAAAC1gEQgAAACgBVa7RXxK6aKIeHtE\nLM457zR0bIOI+HJEbB0RCyLioJzzk2M3Zv+8/OUvL2ZXXHFFMWvaBv6MM84oZjfddNPwBhuBpq3g\nS8bTlnas1LZujoU/+7M/K2brrbdeV9dcunRpt+OMa5MnTy5mkyZNKmbPPvtsx+Pf+c53Rj3ToNTe\nzUMOOaSYXXPNNR2PN225vP322xezT3ziE8XskUceKWYPP/xwMavFlltuWcx23333YvbWt761mO25\n557FbJttthneYCPwF3/xFz2/Zs1q72Y3/uiP/qiYbbXVVn2cpL8WLlxYzD7+8Y8Xs6bPZRdccEFX\ns2y22WZdncfvTMRuduuBBx4oZk19bzJv3rxidthhhxWz9ddfv5h9/vOf73i8af6m7+2uv/76YtZk\n6tSpxey8884rZltssUUxO+2004pZ0+eeyy67rJjVZjjPBLokIt7yomPHRcTNOeftI+Lmod8D/XVJ\n6CbU6JLQTajRJaGbUKNLQjehb1a7CJRz/k5EPPGiw9Mj4tKhty+NiHf0eC5gNXQT6qSbUCfdhDrp\n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\nIhZFxKdL75hSOiKldEdK6Y4u7wUMn25CnXQT6qSbUCfdhDHS1SJQzvnRnPPynPOKiDg/InZveN9Z\nOedpOedp3Q4JDI9uQp10E+qkm1An3YSx09UiUEpp01V+u39EzO3NOMBo6CbUSTehTroJddJNGDvD\n2SL+ixGxV0RsFBGPRsTJQ7/fJSJyRCyIiCNzzotWe7NKtuz71Kc+VcyOOeaYPk4y/j322GPFrGn7\n3He+851jME39eryd5oTr5pvf/OZidvrppxezXXfdtZjNnz+/mO25557FbNGi8sPWtMXl2muvXcy6\n8cILLxSzSZMmdXXNpUuXFrOmrwndbhHftEXngQceOOI5xoJu0skOO+xQzO69996urvnrX/+6mE2f\nPr2Yfe973+vqfuOdbo6Npq8fTV9Tmz6fb7zxxqOaqVeavh6dc845xazpY/vf//3fYrbmmmsWs499\n7GPF7GUvK/+/+OOPP76Y1UI3J77111+/mN10000djzd9/mj6O79ixYpitsUWWxSzhx9+uJi11XC6\nWf6s9buLzOhw+MKuJgJ6RjehTroJddJNqJNuQn+NZncwAAAAAMYJi0AAAAAALWARCAAAAKAFLAIB\nAAAAtIBFIAAAAIAWWO3uYBPRcccdV8y+/OUvF7MrrriimDVtD9m0rV3TVnnjwdSpU4tZaevniIgT\nTzyxmH384x8f1UyMX03bIzdtOdlk8uTJxeyEE07o6ppNfT/yyCNHfL2mLeebtrp97WtfO+J7RUQc\ncsghxey6664rZvvuu29X92vaErvfW8HDSHz0ox/t6rynn366mJ188snFrK3bwNN/L7zwQjG77bbb\nitnOO+9czD7wgQ8Us2222WZ4g73Ic8891/H4aaedVjynqX9Llizpao4my5YtK2ZNW8RfeeWVxazp\n4zvppJOGNxiM0lNPPVXMbr311o7Hm743bdoG3veD/TW+VyAAAAAAGBaLQAAAAAAtYBEIAAAAoAUs\nAgEAAAC0gEUgAAAAgBawCAQAAADQAqmf27GllFq599ub3vSmYjZp0qRidsoppxSzP/3TPx3NSAN3\nzTXXFLP999+/j5P0V865vBf4ANXSzUcffbSYTZ06tY+T1GP+/PnFbPLkycWsaRvcHXfcsZjdeeed\nxazpz2DLLbcsZrvvvnsxu+OOO4pZP+lmu02ZMqXj8abPSWussUYxO/HEE4vZmWeeOfzB0E0mrKuu\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "# Draw Graph about Error Values & Accuracy Values\n", "def draw_error_values_and_accuracy(epoch_list, train_error_list, validation_error_list, test_accuracy_list):\n", " # Draw Error Values and Accuracy\n", " fig = plt.figure(figsize=(20, 5))\n", " plt.subplot(121)\n", " plt.plot(epoch_list[1:], train_error_list[1:], 'r', label='Train')\n", " plt.plot(epoch_list[1:], validation_error_list[1:], 'g', label='Validation')\n", " plt.ylabel('Total Error')\n", " plt.xlabel('Epochs')\n", " plt.grid(True)\n", " plt.legend(loc='upper right')\n", "\n", " plt.subplot(122)\n", " plt.plot(epoch_list[1:], test_accuracy_list[1:], 'b', label='Test')\n", " plt.ylabel('Accuracy')\n", " plt.xlabel('Epochs')\n", " plt.yticks(np.arange(0.0, 1.0, 0.05))\n", " plt.grid(True)\n", " plt.legend(loc='lower right')\n", " plt.show()\n", "\n", "draw_error_values_and_accuracy(epoch_list, train_error_list, validation_error_list, test_accuracy_list)\n", " \n", "def draw_false_prediction(diff_index_list):\n", " fig = plt.figure(figsize=(20, 5))\n", " for i in range(5):\n", " j = diff_index_list[i]\n", " print(\"False Prediction Index: %s, Prediction: %s, Ground Truth: %s\" % (j, prediction[j], ground_truth[j]))\n", " img = np.array(img_test[j])\n", " img.shape = (28, 28)\n", " plt.subplot(150 + (i+1))\n", " plt.imshow(img, cmap='gray')\n", " \n", "prediction = np.argmax(network.predict(img_test), axis=1)\n", "ground_truth = np.argmax(label_test, axis=1)\n", " \n", "print(prediction)\n", "print(ground_truth)\n", "\n", "diff_index_list = []\n", "for i in range(len(img_test)):\n", " if (prediction[i] != ground_truth[i]):\n", " diff_index_list.append(i)\n", "\n", "print(\"Total Test Image: {0}, Number of False Prediction: {1}\".format(len(img_test), len(diff_index_list)))\n", "print(\"Test Accuracy:\", float(len(img_test) - len(diff_index_list)) / float(len(img_test)))\n", "draw_false_prediction(diff_index_list)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "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.6.0" } }, "nbformat": 4, "nbformat_minor": 1 }