From 6fa668fcdf54ded2837291ce3008d4c196eb9c36 Mon Sep 17 00:00:00 2001 From: cclauss Date: Thu, 7 Sep 2017 11:11:57 +0200 Subject: [PATCH 1/4] Look for Python syntax errors or undefined names --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index b28b484..201091b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,8 +9,11 @@ python: install: - pip install -r requirements.txt - pip install coveralls + - pip install flake8 script: + # stop the build if there are Python syntax errors or undefined names + - flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics - coverage run --omit=*.virtualenvs*,*virtualenv* codes/0-welcome/code/0-welcome.py test - coverage run --omit=*.virtualenvs*,*virtualenv* codes/1-basics/basic_math_operations/code/basic_math_operation.py test @@ -20,9 +23,6 @@ script: - coverage run --omit=*.virtualenvs*,*virtualenv* codes/2-basics_in_machine_learning/logistic_regression/code/logistic_regression.py test - coverage run --omit=*.virtualenvs*,*virtualenv* codes/2-basics_in_machine_learning/multiclass_svm/code/multiclass_svm.py test - - - after_success: coveralls From 5fc011800159bf265070032caa2ff0fe13e9fee7 Mon Sep 17 00:00:00 2001 From: Amirsina Torfi Date: Mon, 18 Sep 2017 17:18:27 -0400 Subject: [PATCH 2/4] Update README.rst --- docs/tutorials/0-welcome/README.rst | 24 +----------------------- 1 file changed, 1 insertion(+), 23 deletions(-) diff --git a/docs/tutorials/0-welcome/README.rst b/docs/tutorials/0-welcome/README.rst index ca5cc12..9005623 100644 --- a/docs/tutorials/0-welcome/README.rst +++ b/docs/tutorials/0-welcome/README.rst @@ -80,27 +80,5 @@ The ``session``, which is the environment for running the operations, is execute sess.close() The ``tf.summary.FileWriter`` is defined to write the summaries into ``event files``.The command of ``sess.run()`` must be used for evaluation of any ``Tensor`` otherwise the operation won't be executed. In the end by using the ``writer.close()``, the summary writer will be closed. - --------- -Results --------- - -The results for running in the terminal is as bellow: - -.. code:: shell - - a = 5.0 - b = 10.0 - a + b = 15.0 - a/b = 0.5 - - - -If we run the Tensorboard using ``tensorboard --logdir="absolute/path/to/log_dir"`` we get the following when visualiaing the ``Graph``: - -.. figure:: https://github.com/astorfi/TensorFlow-World/blob/master/docs/_img/0-welcome/graph-run.png - :scale: 30 % - :align: center - - **Figure 1:** The TensorFlow Graph. + From 23ade1b117a04e86e2058a148ec944fb2e624536 Mon Sep 17 00:00:00 2001 From: Matthew Mulholland Date: Thu, 21 Sep 2017 10:50:55 -0400 Subject: [PATCH 3/4] Fix some issues related to cost calculation in the linear regression tutorial --- .../code/linear_regression.ipynb | 100 +++++++++++------- .../code/linear_regression.py | 13 +-- 2 files changed, 68 insertions(+), 45 deletions(-) diff --git a/codes/2-basics_in_machine_learning/linear_regression/code/linear_regression.ipynb b/codes/2-basics_in_machine_learning/linear_regression/code/linear_regression.ipynb index 4a3ac6b..2647630 100644 --- a/codes/2-basics_in_machine_learning/linear_regression/code/linear_regression.ipynb +++ b/codes/2-basics_in_machine_learning/linear_regression/code/linear_regression.ipynb @@ -12,7 +12,6 @@ "import matplotlib.pyplot as plt\n", "import tensorflow as tf\n", "import xlrd\n", - "import matplotlib.pyplot as plt\n", "import os\n", "from sklearn.utils import check_random_state" ] @@ -45,7 +44,7 @@ "## Defining flags #####\n", "#######################\n", "\n", - "num_epochs = 5" + "num_epochs = 50" ] }, { @@ -104,7 +103,7 @@ "\n", " # Making the prediction.\n", " Y_predicted = inference(X)\n", - " return tf.squared_difference(Y, Y_predicted)\n", + " return tf.reduce_sum(tf.squared_difference(Y, Y_predicted))/(2*data.shape[0])\n", "\n", "\n", "# The training function.\n", @@ -116,19 +115,62 @@ { "cell_type": "code", "execution_count": 6, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "epoch 1, loss=5.052377\n", - "epoch 2, loss=5.002597\n", - "epoch 3, loss=5.002904\n", - "epoch 4, loss=5.003245\n", - "epoch 5, loss=5.003587\n" + "epoch 1, loss=1573.599976\n", + "epoch 2, loss=1332.513916\n", + "epoch 3, loss=1128.868408\n", + "epoch 4, loss=956.848999\n", + "epoch 5, loss=811.544067\n", + "epoch 6, loss=688.804993\n", + "epoch 7, loss=585.127441\n", + "epoch 8, loss=497.550781\n", + "epoch 9, loss=423.574799\n", + "epoch 10, loss=361.087372\n", + "epoch 11, loss=308.304138\n", + "epoch 12, loss=263.718170\n", + "epoch 13, loss=226.056366\n", + "epoch 14, loss=194.243423\n", + "epoch 15, loss=167.371048\n", + "epoch 16, loss=144.671936\n", + "epoch 17, loss=125.497986\n", + "epoch 18, loss=109.301781\n", + "epoch 19, loss=95.620842\n", + "epoch 20, loss=84.064514\n", + "epoch 21, loss=74.302887\n", + "epoch 22, loss=66.057228\n", + "epoch 23, loss=59.092148\n", + "epoch 24, loss=53.208710\n", + "epoch 25, loss=48.238998\n", + "epoch 26, loss=44.041073\n", + "epoch 27, loss=40.495071\n", + "epoch 28, loss=37.499771\n", + "epoch 29, loss=34.969639\n", + "epoch 30, loss=32.832432\n", + "epoch 31, loss=31.027143\n", + "epoch 32, loss=29.502199\n", + "epoch 33, loss=28.214087\n", + "epoch 34, loss=27.126015\n", + "epoch 35, loss=26.206921\n", + "epoch 36, loss=25.430567\n", + "epoch 37, loss=24.774773\n", + "epoch 38, loss=24.220827\n", + "epoch 39, loss=23.752905\n", + "epoch 40, loss=23.357647\n", + "epoch 41, loss=23.023775\n", + "epoch 42, loss=22.741753\n", + "epoch 43, loss=22.503529\n", + "epoch 44, loss=22.302298\n", + "epoch 45, loss=22.132318\n", + "epoch 46, loss=21.988735\n", + "epoch 47, loss=21.867451\n", + "epoch 48, loss=21.764999\n", + "epoch 49, loss=21.678465\n", + "epoch 50, loss=21.605358\n" ] } ], @@ -146,12 +188,9 @@ " train_op = train(train_loss)\n", "\n", " # Step 8: train the model\n", - " for epoch_num in range(num_epochs): # run 100 epochs\n", - " for x, y in data:\n", - " train_op = train(train_loss)\n", - "\n", - " # Session runs train_op to minimize loss\n", - " loss_value,_ = sess.run([train_loss,train_op], feed_dict={X: x, Y: y})\n", + " for epoch_num in range(num_epochs):\n", + " loss_value, _ = sess.run([train_loss,train_op],\n", + " feed_dict={X: data[:,0], Y: data[:,1]})\n", "\n", " # Displaying the loss per epoch.\n", " print('epoch %d, loss=%f' %(epoch_num+1, loss_value))\n", @@ -163,15 +202,13 @@ { "cell_type": "code", "execution_count": 7, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { - "image/png": "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\nPiN+XcK4lTOpW68m3H+jewdTZ4qIeJACuht2HDrJ5B5/ZFWzbrQ+sIPp8x6h++4E55s7j7t/QHWm\niIgHKaC74FRWLq+sSCJu1XYqRLZl8tI3uG3955Szjt93KklWrcfDiYgHKaAXwVrLkoT9PD4/gd3H\nTnF9l0aMO5VA/TeWwdnBvDRZtTpTRMRDFNALkXL4JFPmbWTFloO0alCNj8b25OJmdYDOEGGVVYuI\n31FAzyczO5dXV27j9a+2UT48jMcGt2FM72giws/q8FRWLSJ+KHD70L2w9veyTfsZ+MJXvLQskavb\nX8Cypoe567bLiYgop/XFRcTvBWaG7uEZlruOZPD4/I0s3XSA5vWr8v7dF9P7+y/hXq0vLiKBw1hr\ny+xkMTExdu3ataU/UHR0wf3bUVGQnOzyYTKzc3njq+28ujKJ8DDDAwNacEefppQvF+axc4iIlJYx\nZp21Nqa4/QIzQ/fADMsVmw8wed5Gdh7JYEjHhkwY3IaGNSp59BwiImUpMAN6KWZY7jqSwdQFCSxJ\n2M9F9aow+66L6dO8rkfPISLiC4F5UzQ21tn7fbZiesEzs3N5eVkiVzz/Fd8kHuLRQa1Z+EC/goN5\nCc8hIuJLgZmhuznDcuWWA0yZt5Hkwxlc0+ECHhvclgtrVipw35KeQ0TE1wLzpqiLdh87xRPzE1i0\ncR/N6lZhyrB29GtZr8zOLyLiCcF9U7QYWTkO3vxmOy8vS8JiefiqVtzVtykVyoX7emgiIl4TdAH9\nm8RDTJoXz/aDJ7mqXQMmDmlLZK3KxX9QRCTA+f9NURdnhO5NO8W9s9czesYach2Wt+/ozhu3xSiY\ni0jI8O8M3YUZoVk5Dt5evYPpyxLJdVgeGtiSu/s1o2KEyisiElr8O0Mv5pmb3247xDUvfc1TCzfT\n+6K6LP37pfx1QAv3g7kX1oURESlrpcrQjTGDgOlAOPCmtXaaR0Z1RiGzMvcdOUHsBz8x/+c9NK5d\niRljYhjQpkHJzuHhdWFERHylxG2LxphwYCswEEgFfgRusdYmFPYZt9sW862nkh0WzqxuQ3mh72iy\nK1Xmnv4X8edLLypdeUVrtoiInyuLtsUeQJK1dnveCT8EhgOFBnS3nfXMze8bt2fSwL+wtV4Ul1XL\nZsqf+xFVp0rpz6E1W0QkSJQmoDcCdp31OhW4uHTDySev5PHUxz/wRpsraXTyMP+JOsEVfx6JMcb9\n482eff7MT63ZIiJBwutdLsaYscBYgCYlfJBy9y5XUCH1GH/pP4hK5UtYXimsVj5mDMyade7NV63Z\nIiIBqDRdLruBxme9jszbdg5rbZy1NsZaG1OvXsmm3V/RtgF/v7JVyYM5FN4x88UXEBfnrJkb4/wa\nF6cboiIScEpzU7QczpuiA3AG8h+BW621Gwv7TFmv5XKOsDAo6FqNAYej7McjIuIiV2+KljhDt9bm\nAPcBXwKbgI+LCuY+V1i5R7VyEQkSpZpYZK39wlrb0lp7kbXWv4vOWt9cRIKcf88U9aRRo1QrF5Gg\n5t9ruXjaqFEK4CIStEInQxcRCXIK6CIiQSI4A7pWTxSREBR8NXStnigiISr4MvRi1lAXEQlWwRfQ\ntXqiiISo4AvomhEqIiEq+AK6ZoSKSIgKvoCuGaEiEqKCr8sFNCNUREJS8GXoIiIhSgFdRCRIKKCL\niAQJBXQRkSChgC4iEiRK/EzREp3MmINASgk/Xhc45MHhBApdd+gJ1WvXdRcuylpbr7gDlWlALw1j\nzFpXHpIabHTdoSdUr13XXXoquYiIBAkFdBGRIBFIAT3O1wPwEV136AnVa9d1l1LA1NBFRKRogZSh\ni4hIEQIioBtjBhljthhjkowx43w9Hm8xxrxljDlgjIk/a1ttY8wSY0xi3tdavhyjNxhjGhtjVhhj\nEowxG40xD+RtD+prN8ZUNMb8YIz5Oe+6H8/bHtTXfYYxJtwY85MxZkHe66C/bmNMsjHmV2PMBmPM\n2rxtHrtuvw/oxphw4BXgaqAtcIsxpq1vR+U1M4FB+baNA5ZZa1sAy/JeB5sc4CFrbVugJ3Bv3n/j\nYL/208Dl1tpOQGdgkDGmJ8F/3Wc8AGw663WoXPdl1trOZ7Uqeuy6/T6gAz2AJGvtdmttFvAhMNzH\nY/IKa+0q4Ei+zcOBWXnfzwKuLdNBlQFr7V5r7fq879Nx/iVvRJBfu3U6kfcyIu+PJcivG8AYEwkM\nBt48a3PQX3chPHbdgRDQGwG7znqdmrctVDSw1u7N+34f0MCXg/E2Y0w00AVYQwhce17ZYQNwAFhi\nrQ2J6wZeBB4BHGdtC4XrtsBSY8w6Y8zYvG0eu+7gfMBFkLLWWmNM0LYlGWOqAv8D/matPW6M+e29\nYL12a20u0NkYUxP4zBjTPt/7QXfdxpghwAFr7TpjTP+C9gnG685zibV2tzGmPrDEGLP57DdLe92B\nkKHvBhqf9Toyb1uo2G+MaQiQ9/WAj8fjFcaYCJzBfLa19tO8zSFx7QDW2mPACpz3UIL9uvsAw4wx\nyThLqJcbY94j+K8ba+3uvK8HgM9wlpQ9dt2BENB/BFoYY5oaY8oDNwPzfDymsjQPGJP3/Rhgrg/H\n4hXGmYrPADZZa58/662gvnZjTL28zBxjTCVgILCZIL9ua+14a22ktTYa59/n5dba0QT5dRtjqhhj\nqp35HrgSiMeD1x0QE4uMMdfgrLmFA29Za2N9PCSvMMZ8APTHufrafmAyMAf4GGiCc6XKkdba/DdO\nA5ox5hLga+BXfq+p/hNnHT1or90Y0xHnTbBwnMnVx9baqcaYOgTxdZ8tr+TyD2vtkGC/bmNMM5xZ\nOTjL3e9ba2M9ed0BEdBFRKR4gVByERERFyigi4gECQV0EZEgoYAuIhIkFNBFRIKEArqISJBQQBcR\nCRIK6CIiQeL/AZbSLache2r3AAAAAElFTkSuQmCC\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -195,34 +232,25 @@ "plt.show()\n", "plt.close()" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.13" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, diff --git a/codes/2-basics_in_machine_learning/linear_regression/code/linear_regression.py b/codes/2-basics_in_machine_learning/linear_regression/code/linear_regression.py index 5533d78..10a1d75 100644 --- a/codes/2-basics_in_machine_learning/linear_regression/code/linear_regression.py +++ b/codes/2-basics_in_machine_learning/linear_regression/code/linear_regression.py @@ -1,5 +1,4 @@ import numpy as np -import matplotlib.pyplot as plt import tensorflow as tf import xlrd import matplotlib.pyplot as plt @@ -16,8 +15,7 @@ ####################### ## Defining flags ##### ####################### -tf.app.flags.DEFINE_integer( - 'num_epochs', 5, 'The number of epochs for training the model. Default=50') +tf.app.flags.DEFINE_integer('num_epochs', 50, 'The number of epochs for training the model. Default=50') # Store all elemnts in FLAG structure! FLAGS = tf.app.flags.FLAGS @@ -58,7 +56,7 @@ def loss(X, Y): # Making the prediction. Y_predicted = inference(X) - return tf.squared_difference(Y, Y_predicted) + return tf.reduce_sum(tf.squared_difference(Y, Y_predicted))/(2*data.shape[0]) # The training function. @@ -81,11 +79,8 @@ def train(loss): # Step 8: train the model for epoch_num in range(FLAGS.num_epochs): # run 100 epochs - for x, y in data: - train_op = train(train_loss) - - # Session runs train_op to minimize loss - loss_value,_ = sess.run([train_loss,train_op], feed_dict={X: x, Y: y}) + loss_value, _ = sess.run([train_loss,train_op], + feed_dict={X: data[:,0], Y: data[:,1]}) # Displaying the loss per epoch. print('epoch %d, loss=%f' %(epoch_num+1, loss_value)) From a4654c446c3509c0a7603fd6b304a016c3d88b58 Mon Sep 17 00:00:00 2001 From: jeonghwan choi Date: Tue, 31 Oct 2017 21:32:02 +0900 Subject: [PATCH 4/4] Update train_mlp.py In 224, I think 'fie-tuning ' is just simple typo, so I modified 'fie-tuning' to 'fine-tuning' --- .../3-neural_networks/multi-layer-perceptron/code/train_mlp.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/codes/3-neural_networks/multi-layer-perceptron/code/train_mlp.py b/codes/3-neural_networks/multi-layer-perceptron/code/train_mlp.py index 451083b..21da176 100755 --- a/codes/3-neural_networks/multi-layer-perceptron/code/train_mlp.py +++ b/codes/3-neural_networks/multi-layer-perceptron/code/train_mlp.py @@ -221,7 +221,7 @@ test_summary_writer = tf.summary.FileWriter(test_summary_dir) test_summary_writer.add_graph(sess.graph) - # If fie-tuning flag in 'True' the model will be restored. + # If fine-tuning flag in 'True' the model will be restored. if FLAGS.fine_tuning: saver.restore(sess, os.path.join(FLAGS.checkpoint_root, checkpoint_prefix)) print("Model restored for fine-tuning...")