{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Repeat Copy Task\n", "### Differentiable Neural Computer (DNC) using a NN Controller\n", "\n", "\"DNC\n", "\n", "**Sam Greydanus $\\cdot$ February 2017 $\\cdot$ MIT License.**\n", "\n", "Represents the state of the art in differentiable memory. Inspired by this [Nature paper](http://www.nature.com/nature/journal/v538/n7626/full/nature20101.html). Some ideas taken from [this Gihub repo](https://github.com/Mostafa-Samir/DNC-tensorflow)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import tensorflow as tf\n", "import numpy as np\n", "import sys\n", "sys.path.insert(0, '../dnc')\n", "\n", "from dnc import DNC\n", "from nn_controller import NNController\n", "\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Hyperparameters" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "xydim = 6\n", "tf.app.flags.DEFINE_integer(\"xlen\", xydim, \"Input dimension\")\n", "tf.app.flags.DEFINE_integer(\"ylen\", xydim, \"output dimension\")\n", "tf.app.flags.DEFINE_integer(\"length\", 5, \"Sequence length\")\n", "tf.app.flags.DEFINE_integer(\"reps\", 3, \"Number of repeats for copy task\")\n", "tf.app.flags.DEFINE_integer(\"batch_size\", 1, \"Size of batch in minibatch gradient descent\")\n", "\n", "tf.app.flags.DEFINE_integer(\"R\", 1, \"Number of DNC read heads\")\n", "tf.app.flags.DEFINE_integer(\"W\", 10, \"Word length for DNC memory\")\n", "tf.app.flags.DEFINE_integer(\"N\", 7, \"Number of words the DNC memory can store\")\n", "\n", "tf.app.flags.DEFINE_integer(\"print_every\", 100, \"Print training info after this number of train steps\")\n", "tf.app.flags.DEFINE_integer(\"iterations\", 10000, \"Number of training iterations\")\n", "tf.app.flags.DEFINE_float(\"lr\", 1e-4, \"Learning rate (alpha) for the model\")\n", "tf.app.flags.DEFINE_float(\"momentum\", .9, \"RMSProp momentum\")\n", "tf.app.flags.DEFINE_integer(\"save_every\", 1000, \"Save model after this number of train steps\")\n", "tf.app.flags.DEFINE_string(\"save_path\", \"nn_models/model.ckpt\", \"Where to save checkpoints\")\n", "FLAGS = tf.app.flags.FLAGS" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Data functions" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def get_sequence(length, reps, dim):\n", " X = [np.concatenate((np.random.randint(2, size=(length,dim)), np.zeros((length + 3,dim)))) for _ in range(reps)]\n", " X = np.vstack(X) ; X[:,dim-1] = 0\n", " \n", " X = np.concatenate((X[-1:,:],X[:-1,:]))\n", " y = np.concatenate((X[-(length + 2):,:],X[:-(length + 2),:]))\n", " markers = range(length+1, X.shape[0], 2*length+3)\n", " X[markers,dim-1] = 1\n", " return X, y\n", " \n", "def next_batch(batch_size, length, reps, dim):\n", " X_batch = []\n", " y_batch = []\n", " for _ in range(batch_size):\n", " X, y = get_sequence(length, reps, dim)\n", " X_batch.append(X) ; y_batch.append(y)\n", " return [X_batch, y_batch]\n", "\n", "batch = next_batch(1, FLAGS.length, FLAGS.reps, FLAGS.xlen)\n", "plt.imshow(batch[0][0].T - batch[1][0].T, interpolation='none')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Helper functions" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def binary_cross_entropy(y_hat, y):\n", " return tf.reduce_mean(-y*tf.log(y_hat) - (1-y)*tf.log(1-y_hat))\n", "\n", "def llprint(message):\n", " sys.stdout.write(message)\n", " sys.stdout.flush()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Build graph, initialize everything" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "building graph...\n", "defining loss...\n", "computing gradients...\n", "init variables... \n", "ready to train..." ] } ], "source": [ "sess = tf.InteractiveSession()\n", "\n", "llprint(\"building graph...\\n\")\n", "optimizer = tf.train.RMSPropOptimizer(FLAGS.lr, momentum=FLAGS.momentum)\n", "dnc = DNC(NNController, FLAGS, )\n", "\n", "llprint(\"defining loss...\\n\")\n", "y_hat, outputs = dnc.get_outputs()\n", "y_hat = tf.clip_by_value(tf.sigmoid(y_hat), 1e-6, 1. - 1e-6)\n", "loss = binary_cross_entropy(y_hat, dnc.y)\n", "\n", "llprint(\"computing gradients...\\n\")\n", "gradients = optimizer.compute_gradients(loss)\n", "for i, (grad, var) in enumerate(gradients):\n", " if grad is not None:\n", " gradients[i] = (tf.clip_by_value(grad, -10, 10), var)\n", " \n", "grad_op = optimizer.apply_gradients(gradients)\n", "\n", "llprint(\"init variables... \\n\")\n", "sess.run(tf.global_variables_initializer())\n", "llprint(\"ready to train...\")" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "model overview...\n", "\tvariable \"W1:0\" has 2048 parameters\n", "\tvariable \"b1:0\" has 128 parameters\n", "\tvariable \"W2:0\" has 32768 parameters\n", "\tvariable \"b2:0\" has 256 parameters\n", "\tvariable \"W_z:0\" has 12288 parameters\n", "\tvariable \"W_v:0\" has 1536 parameters\n", "\tvariable \"W_r:0\" has 60 parameters\n", "total of 49084 parameters\n" ] } ], "source": [ "# tf parameter overview\n", "total_parameters = 0 ; print \"model overview...\"\n", "for variable in tf.trainable_variables():\n", " shape = variable.get_shape()\n", " variable_parameters = 1\n", " for dim in shape:\n", " variable_parameters *= dim.value\n", " print '\\tvariable \"{}\" has {} parameters' \\\n", " .format(variable.name, variable_parameters)\n", " total_parameters += variable_parameters\n", "print \"total of {} parameters\".format(total_parameters)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "loaded model: nn_models/model.ckpt-10000\n" ] } ], "source": [ "global_step = 0\n", "saver = tf.train.Saver(tf.global_variables())\n", "load_was_success = True # yes, I'm being optimistic\n", "try:\n", " save_dir = '/'.join(FLAGS.save_path.split('/')[:-1])\n", " ckpt = tf.train.get_checkpoint_state(save_dir)\n", " load_path = ckpt.model_checkpoint_path\n", " saver.restore(sess, load_path)\n", "except:\n", " print \"no saved model to load.\"\n", " load_was_success = False\n", "else:\n", " print \"loaded model: {}\".format(load_path)\n", " saver = tf.train.Saver(tf.global_variables())\n", " global_step = int(load_path.split('-')[-1]) + 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Train loop" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [], "source": [ "loss_history = []\n", "for i in xrange(global_step, FLAGS.iterations + 1):\n", " llprint(\"\\rIteration {}/{}\".format(i, FLAGS.iterations))\n", "\n", " rlen = np.random.randint(1, FLAGS.length + 1)\n", " rreps = np.random.randint(1, FLAGS.reps + 1)\n", " X, y = next_batch(FLAGS.batch_size, rlen, rreps, FLAGS.xlen)\n", " tsteps = rreps*(2*rlen+3)\n", "\n", " fetch = [loss, grad_op]\n", " feed = {dnc.X: X, dnc.y: y, dnc.tsteps: tsteps}\n", "\n", " step_loss, _ = sess.run(fetch, feed_dict=feed)\n", " loss_history.append(step_loss)\n", " global_step = i\n", "\n", " if i % 100 == 0:\n", " llprint(\"\\n\\tloss: {:03.4f}\\n\".format(np.mean(loss_history)))\n", " loss_history = []\n", " if i % FLAGS.save_every == 0 and i is not 0:\n", " llprint(\"\\n\\tSAVING MODEL\\n\")\n", " saver.save(sess, FLAGS.save_path, global_step=global_step)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nSUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "X, y = next_batch(FLAGS.batch_size, FLAGS.length, FLAGS.reps, FLAGS.xlen)\n", "tsteps = FLAGS.reps*(2*FLAGS.length+3)\n", "\n", "feed = {dnc.X: X, dnc.y: y, dnc.tsteps: tsteps}\n", "fetch = [outputs['y_hat'], outputs['w_w'], outputs['w_r'], outputs['f'], outputs['g_a']]\n", "[_y_hat, _w_w, _w_r, _f, _g_a] = sess.run(fetch, feed)\n", "_y = y[0] ; _X = X[0]\n", "\n", "fig, ((ax1,ax2),(ax3,ax5),(ax4,ax6),) = plt.subplots(nrows=3, ncols=2)\n", "plt.rcParams['savefig.facecolor'] = \"0.8\"\n", "fs = 12 # font size\n", "fig.set_figwidth(10)\n", "fig.set_figheight(5)\n", "\n", "ax1.imshow(_X.T - _y.T, interpolation='none') ; ax1.set_title('input ($X$) and target ($y$)')\n", "ax2.imshow(_y_hat[0,:,:].T, interpolation='none') ; ax2.set_title('prediction ($\\hat y$)')\n", "\n", "ax3.imshow(_w_w[0,:,:].T, interpolation='none') ; ax3.set_title('write weighting ($w_w$)')\n", "ax4.imshow(_w_r[0,:,:,0].T, interpolation='none') ; ax4.set_title('read weighting ($w_r$)')\n", "\n", "ax5.imshow(_f[0,:,:].T, interpolation='none') ; ax5.set_title('free gate ($f$)') ; ax5.set_aspect(3)\n", "ax6.imshow(_g_a[0,:,:].T, interpolation='none') ; ax6.set_title('allocation gate ($g_a$)') ; ax6.set_aspect(3)\n", "\n", "plt.tight_layout()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "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.10" } }, "nbformat": 4, "nbformat_minor": 1 }