{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### 선형회귀 모델에 대한 GrandientDescentOptimizer 활용" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 1개의 값씩 훈련을 시키는 코드" ] }, { "cell_type": "code", "execution_count": 88, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Iteration: 0, w: 1.09470880032, b: 1.11628854275\n", "Iteration: 100, w: 3.0098092556, b: 5.07469415665\n", "Iteration: 200, w: 2.9991941452, b: 5.44047451019\n", "Iteration: 300, w: 2.88800668716, b: 5.54555082321\n", "Iteration: 400, w: 2.80619549751, b: 5.65400075912\n", "Iteration: 500, w: 2.69381070137, b: 5.66528463364\n", "Iteration: 600, w: 2.60500907898, b: 5.70556545258\n", "Iteration: 700, w: 2.51092100143, b: 5.74172258377\n", "Iteration: 800, w: 2.43069624901, b: 5.77385377884\n", "Iteration: 900, w: 2.39865279198, b: 5.81740093231\n", "Iteration: 1000, w: 2.32709956169, b: 5.79252147675\n", "Iteration: 1100, w: 2.29714798927, b: 5.85363101959\n", "Iteration: 1200, w: 2.25430893898, b: 5.8688378334\n", "Iteration: 1300, w: 2.21425652504, b: 5.87602186203\n", "Iteration: 1400, w: 2.19013786316, b: 5.89815664291\n", "Iteration: 1500, w: 2.16285729408, b: 5.90386295319\n", "Iteration: 1600, w: 2.14729189873, b: 5.9225025177\n", "Iteration: 1700, w: 2.12831473351, b: 5.92874097824\n", "Iteration: 1800, w: 2.11293983459, b: 5.9376168251\n", "Iteration: 1900, w: 2.09764838219, b: 5.94460248947\n", "Predicted model: 2.08598470688x + 5.95239257812\n" ] } ], "source": [ "import tensorflow as tf\n", "import numpy as np\n", "\n", "# Our real model of y = 2 * x + 6\n", "def y_real(x):\n", " return tf.mul(x, 2) + 6\n", "\n", "# Our model of y = w * x + b\n", "def y_model(x, w, b):\n", " return tf.mul(x, w) + b \n", "\n", "# x and y are placeholders for our training data\n", "x = tf.placeholder(\"float\")\n", "\n", "# w and b are the variables storing our values. It is initialised with starting \"guesses\"\n", "w = tf.Variable(1.0, name=\"w\")\n", "b = tf.Variable(1.0, name=\"b\")\n", "\n", "# Our error is defined as the square of the differences\n", "error = tf.square(y_real(x) - y_model(x, w, b))\n", "\n", "# The Gradient Descent Optimizer does the heavy lifting\n", "train_op = tf.train.GradientDescentOptimizer(0.01).minimize(error)\n", "\n", "# Normal TensorFlow - initialize values, create a session and run the model\n", "model = tf.initialize_all_variables()\n", "\n", "errors = []\n", "with tf.Session() as session:\n", " session.run(model)\n", " for i in range(2000):\n", " x_value = np.random.rand()\n", " _, error_value = session.run([train_op, error], feed_dict={x: x_value})\n", " errors.append(error_value)\n", " if i % 100 == 0:\n", " print \"Iteration: {0}, w: {1}, b: {2}\".format(i, w.eval(), b.eval())\n", " \n", " print \"Predicted model: {0}x + {1}\".format(w.eval(), b.eval()) " ] }, { "cell_type": "code", "execution_count": 89, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "309\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "error_list = [errors[i] for i in range(len(errors))]\n", "num = 0\n", "for error in error_list:\n", " if error < 0.00001:\n", " print num\n", " break\n", " num += 1 \n", "plt.plot(error_list)\n", "plt.show()\n", "plt.savefig(\"errors.png\") " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- batch 입력을 적용하여 n개의 값씩 훈련시키는 코드" ] }, { "cell_type": "code", "execution_count": 90, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Iteration: 0, w: [ 1.3002646], b: [ 1.24757564]\n", "Iteration: 100, w: [ 2.02603269], b: [ 5.91983938]\n", "Iteration: 200, w: [ 2.00092173], b: [ 5.99856377]\n", "Iteration: 300, w: [ 2.00000954], b: [ 5.99998379]\n", "Iteration: 400, w: [ 1.99999988], b: [ 5.99999619]\n", "Iteration: 500, w: [ 1.99999976], b: [ 5.99999619]\n", "Iteration: 600, w: [ 2.00000048], b: [ 5.99999619]\n", "Iteration: 700, w: [ 2.00000024], b: [ 5.99999619]\n", "Iteration: 800, w: [ 1.99999976], b: [ 5.99999619]\n", "Iteration: 900, w: [ 2.], b: [ 5.99999619]\n", "Iteration: 1000, w: [ 2.00000048], b: [ 5.99999619]\n", "Iteration: 1100, w: [ 1.99999988], b: [ 5.99999619]\n", "Iteration: 1200, w: [ 1.99999988], b: [ 5.99999619]\n", "Iteration: 1300, w: [ 2.], b: [ 5.99999619]\n", "Iteration: 1400, w: [ 1.99999976], b: [ 5.99999619]\n", "Iteration: 1500, w: [ 2.00000024], b: [ 5.99999619]\n", "Iteration: 1600, w: [ 1.99999917], b: [ 5.99999619]\n", "Iteration: 1700, w: [ 1.99999988], b: [ 5.99999619]\n", "Iteration: 1800, w: [ 1.9999994], b: [ 5.99999619]\n", "Iteration: 1900, w: [ 2.], b: [ 5.99999619]\n", "Predicted model: [ 1.99999988]x + [ 5.99999619]\n" ] } ], "source": [ "# Our real model of y = 2 * x + 6\n", "def y_real(x):\n", " return tf.mul(x, 2) + 6\n", "\n", "# Our model of y = w * x + b\n", "def y_model(x, w, b):\n", " return tf.mul(x, w) + b \n", "\n", "# Batch\n", "batch_size = 2\n", "\n", "# x and y are placeholders for our training data\n", "x = tf.placeholder(\"float\", [None, 1])\n", "\n", "# w and b are the variables storing our values. It is initialised with starting \"guesses\"\n", "w = tf.Variable([1.0], name=\"w\")\n", "b = tf.Variable([1.0], name=\"b\")\n", "\n", "# Our error is defined as the square of the differences\n", "error = tf.reduce_sum(tf.square(y_real(x) - y_model(x, w, b)))\n", "\n", "# The Gradient Descent Optimizer does the heavy lifting\n", "train_op = tf.train.GradientDescentOptimizer(0.01).minimize(error)\n", "\n", "# Normal TensorFlow - initialize values, create a session and run the model\n", "model = tf.initialize_all_variables()\n", "\n", "errors = []\n", "with tf.Session() as session:\n", " session.run(model)\n", " for i in range(2000):\n", " x_value = np.random.randn(batch_size, 1)\n", " _, error_value = session.run([train_op, error], feed_dict={x: x_value})\n", " errors.append(error_value)\n", " if i % 100 == 0:\n", " print \"Iteration: {0}, w: {1}, b: {2}\".format(i, w.eval(), b.eval())\n", " \n", " print \"Predicted model: {0}x + {1}\".format(w.eval(), b.eval()) " ] }, { "cell_type": "code", "execution_count": 91, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "150\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "error_list = [errors[i] for i in range(len(errors))]\n", "num = 0\n", "for error in error_list:\n", " if error < 0.0001:\n", " print num\n", " break\n", " num += 1 \n", "plt.plot(error_list)\n", "plt.show()\n", "plt.savefig(\"errors.png\") " ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [Root]", "language": "python", "name": "Python [Root]" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.12" } }, "nbformat": 4, "nbformat_minor": 0 }