diff --git a/talks/tensorflow/oiwi_pytreat_tensorflow_notes.ipynb b/talks/tensorflow/oiwi_pytreat_tensorflow_notes.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..a25ecec16b2dc5011406c2b56d5a79a00411bb8d --- /dev/null +++ b/talks/tensorflow/oiwi_pytreat_tensorflow_notes.ipynb @@ -0,0 +1,476 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"img/copyright_infringement.png\" width=\"500\">\n", + "See [https://www.tensorflow.org/](https://www.tensorflow.org/)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Project Overview\n", + "* **[TensorFlow](https://www.tensorflow.org/)**<sup>TM</sup> is a software library for numerical computation on computation graphs.\n", + "* It was open-sourced in 2015 and is currently very popular for Deep Learning.\n", + "* Backed by \n", + "**<span style=\"color:blue\">G</span><span style=\"color:red\">o</span><span style=\"color:yellow\">o</span><span style=\"color:blue\">g</span><span style=\"color:green\">l</span><span style=\"color:red\">e</span>**." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<div class=\"myimages\">\n", + " <div style=\"float:left;margin-right:5px;\">\n", + " <img class=\"middle-img\" src=\"img/so_hot_right_now.jpg\"/ width=\"300\"/>\n", + " </div>\n", + " <div style=\"float:left;margin-right:5px;\">\n", + " <img src=\"img/fchollet_popularity_2017.jpg\" width=\"400\">\n", + " </div>\n", + "</div>\n", + "\n", + "<p>[https://imgflip.com/memegenerator/](https://imgflip.com/memegenerator/48288540/So-hot-right-now)</p>" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Another view: [http://nicodjimenez.github.io/2017/10/08/tensorflow.html](http://nicodjimenez.github.io/2017/10/08/tensorflow.html)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Motivating Problem\n", + "####Â Given:\n", + "$\n", + "\\mathcal{L}(w) = w^2 - 10 w + 25 \n", + "$\n", + "####Â Find:\n", + "$\n", + "\\underset{w}{\\mathrm{argmin}} \\, \\mathcal{L}(w)\n", + "$\n", + "#### Hint:\n", + "Answer = 5" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<matplotlib.figure.Figure at 0x1118aea90>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Actually, let's graph this function.\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "def loss(w):\n", + " return [w**2 - 10*w + 25 for w in w]\n", + "w = list(range(-10,10))\n", + "plt.plot(w,loss(w)); plt.plot([5],loss([5]),'x')\n", + "plt.xlabel('w'); plt.ylabel('loss(w)')\n", + "plt.show(); del w, loss" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Computational Graphs\n", + "Artificial neural networks are graphs. So is our loss function $\\mathcal{L}(w)$.\n", + "<img src=\"img/cg/cg1.png\" width=\"400\">" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import tensorflow as tf" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Set up variables\n", + "w = tf.Variable(0,dtype=tf.float32)\n", + "loss = w**2 - 10 * w + 25\n", + "# Equivalently:\n", + "#loss = tf.add(tf.add(w**2,tf.multiply(-10.,w)),25)\n", + "train = tf.train.RMSPropOptimizer(0.01).minimize(loss)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Itiomatic: run session, initialise variables\n", + "init = tf.global_variables_initializer()\n", + "session = tf.Session()\n", + "session.run(init)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0\n" + ] + } + ], + "source": [ + "# Check initial value of w\n", + "print(session.run(w))" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0302891\n" + ] + } + ], + "source": [ + "# Take one gradient step (check updated w)\n", + "session.run(train)\n", + "print(session.run(w))" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5.0\n" + ] + } + ], + "source": [ + "# Take 1000 gradient steps (relish result)\n", + "for _ in range(1000): session.run(train)\n", + "print(session.run(w))" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Close the door behind you\n", + "session.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Key Concepts (Interm Summary)\n", + "* Computation Graph\n", + "* Variables\n", + "* Sessions\n", + "* Modularity (try replacing trainer, e.g. s/GradientDescentOptimizer/RMSPropOptimizer/)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Passing numpy arrays into the graph as data\n", + "import numpy as np\n", + "data = np.array([[1.],[-10.],[25.]])\n", + "w = tf.Variable(0,dtype=tf.float32)\n", + "x = tf.placeholder(tf.float32, [3,1])\n", + "loss = x[0][0]*w**2 + x[1][0]*w + x[2][0]\n", + "train = tf.train.RMSPropOptimizer(0.01).minimize(loss)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5.0\n" + ] + } + ], + "source": [ + "# Initialise variables + run session + train\n", + "init = tf.global_variables_initializer()\n", + "with tf.Session() as session:\n", + " session.run(init)\n", + " for _ in range(1000): session.run(train, feed_dict={x:data})\n", + " print(session.run(w))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "### Bonus: Interactive Sessions\n", + "If you are using jupyter notebook, you can use an interactive session." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sess = tf.InteractiveSession()\n", + "a = tf.constant(1)\n", + "b = tf.constant(2)\n", + "c = a + b\n", + "# instead of sess.run(c)\n", + "c.eval()" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a.eval()" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Close the sess when you are done.\n", + "sess.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img src=\"img/what_leo_needs.png\" width=\"500\">\n", + "###Â Models in the wild\n", + "* CNNs.\n", + "* RNNs.\n", + "* VAEs.\n", + "* GANs.\n", + "\n", + "(*And many other fine acronyms!*)\n", + "\n", + "Demo1 [here](demos/convolutional_network_demo.ipynb).\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### TensorBoard\n", + "\n", + "* TensorBoard can be used to visualise the network graph, training accuracy, loss, inputs, and model internal representations--including feature embeddings. \n", + "* These visualisations can be used for decoding and understanding the model.\n", + "\n", + "Demo2 [here](demos/tensorboard_demo.ipynb)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Discussion: Big Data, Big Models, Big Computing..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<div class=\"myimages\">\n", + " <div style=\"float:left;margin-right:5px;\">\n", + " <img class=\"middle-img\" src=\"img/how_big_is_your_data.png\"/ width=\"400\"/>\n", + " </div>\n", + " <div style=\"float:left;margin-right:5px;\">\n", + " <img src=\"img/model_zoo.png\" width=\"300\">\n", + " </div>\n", + "</div>" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<img class=\"middle-img\" src=\"img/multiple_devices.png\"/ width=\"400\"/>\n", + "\n", + "Demo multi GPU computing (*internet/time permitting*)\n", + "\n", + "**Warning**: the following won't run unless you are running on a system with at least 2 GPUs (+1 CPU)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Multi GPU computing\n", + "# import numpy as np\n", + "# import tensorflow as tf\n", + "import datetime\n", + "\n", + "# Example: compute A^n + B^n on 2 GPUs\n", + "\n", + "#Processing Units logs\n", + "log_device_placement = True\n", + "\n", + "#num of multiplications to perform\n", + "n = 10\n", + "\n", + "# Create random large matrix\n", + "A = np.random.rand(10000, 10000).astype('float32')\n", + "B = np.random.rand(10000, 10000).astype('float32')\n", + "\n", + "# Create a graph to store results\n", + "g = []\n", + "\n", + "# Define matrix power\n", + "def matpow(M, n):\n", + " if n < 1: #Abstract cases where n < 1\n", + " return M\n", + " else:\n", + " return tf.matmul(M, matpow(M, n-1))\n", + "\n", + "# GPU:0 computes A^n\n", + "with tf.device('/gpu:0'):\n", + " #compute A^n and store result in g\n", + " a = tf.constant(A)\n", + " g.append(matpow(a, n))\n", + "\n", + "#GPU:1 computes B^n\n", + "with tf.device('/gpu:1'):\n", + " #compute B^n and store result in g\n", + " b = tf.constant(B)\n", + " g.append(matpow(b, n))\n", + "\n", + "with tf.device('/cpu:0'):\n", + " s = tf.add_n(g) #Add all elements in g, i.e. A^n + B^n\n", + "\n", + "t1 = datetime.datetime.now()\n", + "with tf.Session(config=tf.ConfigProto(log_device_placement=log_device_placement)) as sess:\n", + " # Runs the op.\n", + " sess.run(s)\n", + "\n", + "t2 = datetime.datetime.now()\n", + "print(t1, t2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [conda env:tensorflow]", + "language": "python", + "name": "conda-env-tensorflow-py" + }, + "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.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}