454 lines
106 KiB
Plaintext
454 lines
106 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Repeat Copy Task\n",
|
|
"### Differentiable Neural Computer (DNC) using a RNN Controller\n",
|
|
"\n",
|
|
"<a href=\"http://www.nature.com/nature/journal/v538/n7626/full/nature20101.html\"><img src=\"../static/dnc_schema.png\" alt=\"DNC schema\" style=\"width: 700px;\"/></a>\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 utils import *\n",
|
|
"from rnn_controller import RNNController\n",
|
|
"\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"import matplotlib as mpl\n",
|
|
"%matplotlib inline"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Hyperparameters"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"alphabet = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\"\n",
|
|
"stroke_steps = 175\n",
|
|
"tf.app.flags.DEFINE_integer(\"xlen\", len(alphabet) + 4, \"Input dimension\")\n",
|
|
"tf.app.flags.DEFINE_integer(\"ylen\", 3, \"output dimension\")\n",
|
|
"tf.app.flags.DEFINE_integer(\"stroke_steps\", stroke_steps, \"Number of time steps for stroke data\")\n",
|
|
"tf.app.flags.DEFINE_integer(\"ascii_steps\", stroke_steps/25, \"Sequence length\")\n",
|
|
"tf.app.flags.DEFINE_integer(\"data_scale\", 50, \"How to scale stroke data\")\n",
|
|
"tf.app.flags.DEFINE_integer(\"batch_size\", 16, \"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\", 100, \"Word length for DNC memory\")\n",
|
|
"tf.app.flags.DEFINE_integer(\"N\", 8, \"Number of words the DNC memory can store\")\n",
|
|
"\n",
|
|
"tf.app.flags.DEFINE_integer(\"train\", True, \"Train or sample???\")\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\", 5000000, \"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\", \"models/model.ckpt\", \"Where to save checkpoints\")\n",
|
|
"tf.app.flags.DEFINE_string(\"data_dir\", \"data/\", \"Where to save checkpoints\")\n",
|
|
"tf.app.flags.DEFINE_string(\"log_dir\", \"logs/\", \"Where to find data\")\n",
|
|
"tf.app.flags.DEFINE_string(\"alphabet\", alphabet, \"Viable characters\")\n",
|
|
"FLAGS = tf.app.flags.FLAGS"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Data functions"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def next_batch(FLAGS, dl):\n",
|
|
" X_batch = []\n",
|
|
" y_batch = []\n",
|
|
" text = []\n",
|
|
" _X_batch, _y_batch, _text, _one_hots = dl.next_batch()\n",
|
|
" for i in range(FLAGS.batch_size):\n",
|
|
" ascii_part = np.concatenate((_one_hots[i], np.zeros((FLAGS.ascii_steps, 3))), axis=1)\n",
|
|
" X_stroke_part = np.concatenate((np.zeros((FLAGS.stroke_steps, len(FLAGS.alphabet)+1)), _X_batch[i]), axis=1)\n",
|
|
" \n",
|
|
" X = np.concatenate((ascii_part, X_stroke_part), axis=0)\n",
|
|
" y = np.concatenate((np.zeros((FLAGS.ascii_steps, 3)), _y_batch[i]), axis=0)\n",
|
|
" X_batch.append(X) ; y_batch.append(y) ; text.append(_text)\n",
|
|
" return [X_batch, y_batch, text]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def line_plot(strokes, title, figsize = (20,2), save_path='.'):\n",
|
|
" plt.figure(figsize=figsize)\n",
|
|
" eos_preds = np.where(strokes[:,-1] == 1)\n",
|
|
" eos_preds = [0] + list(eos_preds[0]) + [-1] #add start and end indices\n",
|
|
" for i in range(len(eos_preds)-1):\n",
|
|
" start = eos_preds[i]+1\n",
|
|
" stop = eos_preds[i+1]\n",
|
|
" plt.plot(strokes[start:stop,0], strokes[start:stop,1],'b-', linewidth=2.0) #draw a stroke\n",
|
|
" plt.title(title, fontsize=20)\n",
|
|
" plt.gca().invert_yaxis()\n",
|
|
" plt.plot()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\tloaded dataset:\n",
|
|
"\t\t11895 individual data points\n",
|
|
"\t\t743 batches\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAABHEAAADfCAYAAABxsU/MAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xd8VHX2//HXJ5DQQxFEqqAIAioIqKACioXF3jX2taCu\nrivoWrFh17X38lNRFMvakLUg0hRRNCAoIBaqNFEg9JZ8fn+czPfOhFBCZubOTN7Px+M+5s69k8yh\nJDNz7vmc47z3iIiIiIiIiIhIassKOwAREREREREREdk2JXFERERERERERNKAkjgiIiIiIiIiImlA\nSRwRERERERERkTSgJI6IiIiIiIiISBpQEkdEREREREREJA0oiSMiIiIiIiIikgaUxBERERERERER\nSQNK4oiIiIiIiIiIpAElcURERCQjOeeKirdbSjnXM+p8j1LO31p8rjA50YqIiIhsm5I4IiIiksl8\nOc+LiIiIpAwlcURERCRtOOdmF1fIvBh2LCIiIiLJVjnsAERERETKwLOd1TPee12sEhERkYyiNzci\nIiIiIiIiImlASRwRERERERERkTSgJI6IiIgknXOukXPuXudcvnNuuXNug3NukXNuinPudefcec65\nWlGPH+2cKwJ2BRxwftR0qcg2ssRzbHE6VTKUfH7nXC/n3NvOubnFf96ZYcQlIiIi6Us9cURERCSp\nnHPdgQ+BXGL72zQo3vYCzgCWAB8Vn4vuheMovS/O9h5LJg/gnLsLuIHw4xEREZE0piSOiIiIJI1z\nLgd4A6gFrACeAkYDfwA5QEvgQODEEl96PlADGA40Aj4ABpR4zOoEhV1eJwN7A5OBh4GpQDWgY5hB\niYiISPpREkdERESS6SAsCeOBPO/9xyXOTwDedM71A6pHDnrv5wA45zYWH1ruvZ+WhHjjYW/gM+AY\n7/3GqONfhhSPiIiIpCklcURERCSZdona/2JLD/LeFwGrEh9OwjmgELioRAJHREREpMzU2FhERESS\naWHU/t9DiyJ5PDDOez8v7EBEREQk/SmJIyIiIsn0JTATq1B51Dn3jXPueufcgc657JBjS5QpYQcg\nIiIimUFJHBEREUka7/0m4BhgGlal0gW4G0vuLHfOfeycy3POZdJ7lGVhByAiIiKZIZPeIImIiEga\n8N7/hDX7PRF4EfgFS+hUBXoDrwHfOOfqhxZkfBWGHYCIiIhkBiVxREREJOm8Geq9v9h73wZoDFwA\n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\nbYKffrKETWT7/ntYvnzzxx5+OLz/PtSokfw4RUREREREKqodWU7VBRiFNTD2wIPFxwcBF3jv73fO\nVcOKEdoAAAnHSURBVAeeBeoAXwB9vPcb4hCviMTB8uUwdSr88EOQsPnhB1i3bttfe9ppMGiQRmWL\niIiIiIgkW5mTON77MWyjIbL3/jbgth0LSUTipaDAkjXTptltZFuwYPu+vnFja8wb2Tp1ghYtEhqy\niIiIiIiIbEG8GxuLSAgKCixRUzJZM3/+9n+PPfaITdjsuy/svHPiYhYREREREZGyURJHJMV5D8uW\nwZw5sdvs2cH+X39t//erVw/atw+2jh2hQweoVSthfwQRERERERGJAyVxRELmPSxeXHpyJrKtXFn2\n71u3bmyypn17aNcOGjYE57b99SIiIiIiIpJalMQRSbB16+D332Hu3M23SJJm/fod+95ZWdC0Key6\nK7RtGyRq2reHXXZRskZERERERCSTKIkjUg5FRfDHH7GJmXnzYu//8ceOf/+cHGje3JI0LVrYbWRr\n0QKaNIHK+ikWERERERGpEPTxT6SE9ettBHdBQbAtXw5Ll8YmaObNs23Dhh1/rho1Nk/ORCdsGja0\nahsRERERERERJXEkoxQWWsIlOglTWkIm+n7JYzu6tKmkrCwb0d28uW3NmgX7kfv16mnJk4iIiIiI\niGwfJXEy1LRp8Mwztt+nj23poqgIVqywiUxLl9ptyf0tnVuxInlx1qmz9QRN48aQnZ28eERERERE\nRCSzKYmToebMgccft/3HH4drr7UpSBs2WKXJ1rZKlaB+fdsaNAj2S97PzS29isR7WLs2qIiJ3pYt\nK/145NzSpVYNU1SUvL+rrCz7s9SubYmZ2rWDLfp+nTqWnIlsubnJi1FERERERERESZwMVTK5cv/9\n8X+O7OwgoVOlSrAsafly2Lgx/s+3JZUr27KkunWDrU6drSdkou/XrKklTSIiIiIiIpL6lMTJUF27\nWjJj2bLEPcfGjbBwoW3l5VxsEiY6KbOt/Ro1lIQRERERERGRzKckToaqU8eWVE2aFHs8J8eqZra0\n5eRYcmbpUliyBP7807Yt7Ufub9gQVLdsa4uulIlsNWtqCpOIiIiIiIjI1iiJk8Fq1YIePcr+dTk5\nsMsutm0P721TEkZEREREREQkcZTEkXJzTsuZRERERERERBJNtRMiFcCQIUPCDkEko+lnTCSx9DMm\n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\nkhrgN/KE1lygahm4AAAAAElFTkSuQmCC\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x11c29c910>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"logger = Logger(FLAGS)\n",
|
|
"dl = Dataloader(FLAGS, logger, limit = 500)\n",
|
|
"batch = next_batch(FLAGS, dl)\n",
|
|
"\n",
|
|
"X = batch[0][0]\n",
|
|
"strokes = np.cumsum(X[:,-3:-1],axis=0)\n",
|
|
"strokes = np.concatenate((strokes, X[:,-1:]),axis=1)\n",
|
|
"line_plot(strokes, title=batch[2][0][0], figsize = (FLAGS.ascii_steps*2,2), save_path='.')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Helper functions"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"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": 7,
|
|
"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(RNNController, FLAGS, input_steps=FLAGS.ascii_steps)\n",
|
|
"\n",
|
|
"llprint(\"defining loss...\\n\")\n",
|
|
"y_hat, outputs = dnc.get_outputs()\n",
|
|
"# TODO: fix this loss: l2 on [:,:,:2] and then do binary cross entropy on <EOS> tags\n",
|
|
"loss = tf.nn.l2_loss(dnc.y - y_hat)*100./(FLAGS.batch_size*(FLAGS.ascii_steps+FLAGS.stroke_steps))\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": 8,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"model overview...\n",
|
|
"\tvariable \"dnc_scope/basic_lstm_cell/weights:0\" has 547200 parameters\n",
|
|
"\tvariable \"dnc_scope/basic_lstm_cell/biases:0\" has 1200 parameters\n",
|
|
"\tvariable \"W_z:0\" has 122400 parameters\n",
|
|
"\tvariable \"W_v:0\" has 900 parameters\n",
|
|
"\tvariable \"W_r:0\" has 300 parameters\n",
|
|
"total of 672000 parameters\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"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": 9,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"loaded model: models/model.ckpt-34000\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# try load saved model\n",
|
|
"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": 10,
|
|
"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",
|
|
"# X, y, text = next_batch(FLAGS, dl)\n",
|
|
"# tsteps = FLAGS.ascii_steps + FLAGS.stroke_steps\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": 11,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# test_string = 'You know nothing Jon Snow'\n",
|
|
"# oh = to_one_hot(test_string, FLAGS.ascii_steps, FLAGS.alphabet)\n",
|
|
"# primer_ascii = np.concatenate((oh, np.zeros((FLAGS.ascii_steps, 3))), axis=1)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x11ca85190>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n/eTIYHL3lcADwN6E/DSU1yNFM/n5NNAZ2xHViiPDiLs/QvjdTj3eKo9HD5XXI5zK7BFNZfYoo/J6\n8A3rSrf7RyaCAAAgAElEQVS7bwbuAo5NYfE1iGOBW9qVLhkcZjaF8GV/Kn75n6ZnXk8Dnofyethp\nMj/vArYU4uwH7AbcutUSK4PGzHYBZgF/i0HK41FC5fXIpzJ75FKZPfqovB58I+H18i8AF5nZXcAd\nwOnAJOCidiZK+s7MPgf8jPB62s7A2cBm4IcxypeAT5jZg8BC4N+BJ4Art3pipaHYrm9vwt1xgD3N\n7DnAMnd/nAb56e6rzOw7wBfMbDmwGjgP+J16yRwa6uVx/DuTMJzI0zHeZwhPwq4F5fEopPJ6BFGZ\nPbKozB7ZVF6337CvdMdhCrYFziG84vAH4Hh3X9LelEk/7AJcQriztgS4mTAMwTMA7v5ZM5sEnA/M\nAG4CXubum9qUXqnvUEI7II9/n4/h3wXe0WR+nk54JfUyYDxwDfD+rZN8aUK9PH4fcDChY5YZwFOE\nwvtT8alnojweJVRejzgqs0cWldkjm8rrNhv243SLiIiIiIiIDFXDuk23iIiIiIiIyFCmSreIiIiI\niIhIi6jSLSIiIiIiItIiqnSLiIiIiIiItIgq3SIiIiIiIiItokq3iIiIiIiISIuo0i0iIiIiIiLS\nIqp0i4iIiIiIiLSIKt0iIiIiIiIiLaJKt4iIiIiIiEiLqNItIiIiIiIi0iKqdIuIiIiIiIi0iCrd\nIiIiIiIiIi2iSreIiIiIiIhIi6jSLSIiIiIiItIiqnSLiIiIiIiItIgq3SIiIiIiIiItokq3iIiI\niIiISIuo0i0iIiIiIiLSIqp0i4iIiIiIiLSIKt0iIiIiIiIiLaJKt4iIiIiIiEiLqNItIiIiIiIi\n0iKqdIuIiIiIiIi0iCrdIiIiIiIiIi2iSreIiIiIiIhIi6jSLSIiIiIiItIiqnSLiIiIiIiItIgq\n3SIiIiIiIiItokq3iIiIiIiISIuo0i0iIiIiIiLSIqp0i4iIiIiIiLSIKt0iIiIiIiIiLaJKt4iI\niIiIiEiLqNItIiIiIiIi0iKqdIuIiIiIiIi0iCrdIiIiIiIiIi2iSreIiIiIiIhIi6jSLSIiIiIi\nItIiqnSLiIiIiIiItIgq3SIiIiIiIiItokq3iIiIiIiISIuo0i0iIiIiIiLSIqp0i4iIiIiIiLSI\nKt0iIiIiIiIiLaJKt4iIiIiIiEiLqNItIiIiIiIi0iKqdIuIiIiIiIi0iCrdIiIiIiIiIi2iSreI\niIiIiIhIi6jSLSIiIiIiItIiqnSLiIiIiIiItIgq3SIiIiIiIiItokq3iIiIiIiISIuo0i0iIiIi\nIiLSIqp0i4iIiIiIiLSIKt0iIiIiIiIiLaJKt4iIiIiIiEiLqNItIiIiIiIi0iKqdIuIiIiIiIi0\niCrdIiIiIiIiIi2iSreIiIiIiIhIi6jSLSIiIiIiItIiqnSLiIiIiIiItIgq3SIiIiIiIiItokq3\niIiIiIiISIuo0i0iIiIiIiLSIqp0i4iIiIiIiLSIKt0iIiIiIiIiLaJKt4iIiIiIiEiLqNItIiIi\nIiIi0iKqdIuIiIiIiIi0iCrdIiIiIiIiIi2iSreIiIiIiIhIi6jSLSIiIiIiItIiqnSLiIiIiIiI\ntIgq3SIiIiIiIiItokq3iIiIiIiISIuo0i0iIiIiIiLSIqp0i4iIiIiIiLSIKt0iIiIiIiIiLaJK\nt4iIiIiIiEiLqNIt0g9mdoqZdZvZbu1Oy0AMdD/M7Ky4/DbtSsNgMLMzzOyeFm/j3Wb2qJmNa+V2\nRERERGRoUaVbpH88/lWY2RFmdqaZTWtTmvqj1360YvkGx2agaRgQM5sKnAF8usWbugjoBN7d4u2I\niIiIyBCiSrdI/3wPmOjuj2VhRwKfAma0J0n9UrYfrVDv2GytNNTyTqAD+GErN+LuG4HvAv/cyu2I\niIiIyNCiSrdIH5jZJAAPNhVntyFJA1JjP1qh5rHZimmo5RTgqq2UhkuBOWZ2zFbYloiIiIgMAap0\ny4hnZs+ObYZfmYXNjWF3FuJebWa3xv9Te+VnmdklZrYMuCnO69EO2czOBD4bV7MwzuvK5u9kZheY\n2dNmtsHMFpjZqa1Ke7PbrNWe2syOMbM7zWy9mf3VzE5Lx6NGUmea2UVmttzMVsTtTmjy2BSPZTru\ne9Va5wDTmi87BzgYuK5R3MHg7vOBZcBrtsb2RERERKT9xrY7ASJbwQJgBfAi4Ocx7CigG3iOmU1x\n9zVmZsARwDdinNTO+MfAA8DHqD6xLbZDvhzYFzgR+BDwTAxfYmazgduBLuA8YCnwMuA7ZjbV3c8b\n7LT3YZtlbdMPAa4GngI+Sfid+GRcR1nbayM8wX0Y+CgwF/hHYFE8ZlfUOjY10pD+L67zXdk6+5vW\n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\n2ZQ3qZ90S1oX2AX4XZUW6S7Cb4Hde1UuG5MdclPVWyT9SNKzASRtR3pKVtb1UuAKXNeTTof1uSsw\nrZbnJuCvuM4nkz0lLZJ0o6RTJD2tWLcLrmMzMzOb4iZ10A1sDgyQno6VFpG+0NvkcjlwELA3cAiw\nHXCRpA1I9Rm4rqeKTupzS+DJHIwPl8f62/nAB4DXA0cCrwPOyy2SINWj69jMzMymtGm9LoBZJSLm\nFR+vlXQlcAfwLuDG3pTKzEar1u3jOkl/Bm4B9gQu7EmhzMzMzCbYZH/SvQRYSXoiVtoSWDjxxbHx\nFBEPA38BtifVp3BdTxWd1OdCYHru9ztcHptEIuI20t/tapR617GZmZlNeZM66I6Ip4D5wF5VWm62\nuBdwWa/KZeND0oakL+f35C/rCxla17OAV+C6nnQ6rM/5wIpanh2BbYA/TFhhbdxI2hrYDLg3J7mO\nzczMbMqbCs3LTwTmSJoPXAkcAcwE5vSyUDZykk4AziU1KX8WcAzwFHBmznIS8AVJNwO3A18G7gLO\nnvDCWlu5L/72pCfaAM+VtDPwQETcSZv6jIilkr4PnCjpQeAR4GTgUo9q3R9a1XF+HUWa/mthzvc1\nUuuVeeA6NjMzs7XDpA+689RCmwPHkpokXgPsHRGLe1syG4WtgTNIT8IWA5eQpg26HyAijpc0EzgV\n2AS4GNg3Ip7sUXmttV1J/XYjv76e008HPtxhfR5B6kLyc2AGcAFw2MQU3zrQqo4PBV5CGkhtE+Ae\nUrD9pdxKqeI6NjMzsylt0s/TbWZmZmZmZtavJnWfbjMzMzMzM7N+5qDbzMzMzMzMrEscdJuZmZmZ\nmZl1iYNuMzMzMzMzsy5x0G1mZmZmZmbWJQ66zczMzMzMzLrEQbeZmZmZmZlZlzjoNjMzMzMzM+sS\nB91mZmZmZmZmXeKg28zMzMzMzKxLHHSbmZmZmZmZdYmDbjMzMzMzM7MucdBtZmZmZmZm1iUOus3M\nzMzMzMy6xEG3mZmZmZmZWZc46DYzMzMzMzPrEgfdZmZmZmZmZl3ioNvMzMzMzMysSxx0m5mZmZmZ\nmXWJg24zMzMzMzOzLnHQbWZmZmZmZtYlDrrNzMzMzMzMusRBt5mZmZmZmVmXOOg2MzMzMzMz6xIH\n3WZmZmZmZmZd4qDbzMzMzMzMrEscdJuZmZmZmZl1iYNuMzMzMzMzsy5x0G1mZmZmZmbWJQ66zczM\nzMzMzLrEQbeZmZmZmZlZlzjoNjMzMzMzM+sSB91mZmZmZmZmXeKg28zMzMzMzKxLHHSbmZmZmZmZ\ndYmDbjMzMzMzM7MucdBtZmZmZmZm1iUOus3MzMzMzMy6xEG3mZmZmZmZWZc46DYzMzMzMzPrEgfd\nZmZmZmZmZl3ioNvMzMzMzMysSxx0m5mZmZmZmXWJg24zMzMzMzOzLnHQbWZmZmZmZtYlDrrNzMzM\nzMzMusRBt5mZmZmZmVmXOOg2MzMzMzMz6xIH3WZmZmZmZmZd4qDbzMzMzMzMrEscdJuZmZmZmZl1\niYNuMzMzMzMzsy5x0G1mZmZmZmbWJQ66zczMzMzMzLrEQbeZmZmZmZlZlzjoNjMzMzMzM+sSB91m\nZmZmZmZmXeKg26wHJB0taVWPy3CQpFWSthnl9kfn7Z/WqzKMB0lHSrq+C/v9mKQ7JK073vs2MzMz\ns8nDQbdZb0R+TeYydLS9pN0lHSVpVhfKMCaSNgKOBL7ahd3PAaYDH+vCvs3MzMxsknDQbbb2+iGw\nfkT8tcvH2QP4ErBJD8swnI8AA8CZ473jiHgCOB34p/Het5mZmZlNHg66zQBJM3tdhokWyZMTcCj1\nQRmGcxBwThfLMBfYVtKeXdq/mZmZmfU5B9221in6Ir9A0hmSHgAuzuueKekHkhZKelzStZI+1LCP\nbSSdIulGScskLZE0V9JzGvK+WtIfJS2X9N+SDu6wnC/O5fz7Im12Truqlvd8SX8oPrc9j+H6U0va\nU9JVZXnb9EHfVNIcSQ9Keigfd728r6OA43O+2/PxVlbHrJehqJvnDbfPMZa13HZb4CXAb9vlHa2I\nWAA8AOzXrWOYmZmZWX+b1usCmPVA1Yf4Z8BfgM8BkrQFcAWwEjgZWALsC3xf0kYRcXKxj5cDrwR+\nAtwFbAscClwo6YUR8Thppy8C5gH3kZpYrwscnT+3cy3wEPBa4Nc57TXAKmBnSRtGxKOSBOwO/Fs+\nZqfnsUZ/akkvA84H7gG+SPob8cW8j6a+1yI9zb0V+CwwG/gHYBHpuv4CeD5wAHA4cH/ebvEwZaje\n1/f50WKfoy1r3R4534IO8o7FAuBVXT6GmZmZmfUpB922Nrs6It5ffZD0PVIQ+dKIeCgnf0fSGcDR\nkk7N/XQBfh0RZ5U7k3QucDmwP/DjnPzlvHx1RNyd851FCqhbioiQdCkp0K68Bvgl6cnpHsB/AC8F\nZpGf1gPHjeA86o4BVgB7RMSiXN65wI0tijo/IlY/vZe0Oamv9Oci4s+SFpCC7rNH0Hd72H2Osayl\nnfLytjJR0vuAnYF1I+Ifc9qrgaMi4o2S1ifV3ycj4rwOjnMr8L4Oy2RmZmZmU4ybl9vaKoBTa2nv\nAM4FBiRtVr1Ige3GpCeuaeMiaJU0LU+bdSvpyfTsnL4O8Cbgl1XAnbe9ifT0uxMXA7NzoAfwauA8\n4E8MBuPV0+9LRnoepVzevYBfVUFsLu+tpCfKTZqu48XAZpI27PAcR7zPUZa1bjNgRUQsqxIk7Qgs\nJz2hL5vjvxlYmN8/QXpi/+IOj/MgsH5T83gzMzMzm/ocdNvabPUTTklPJ42ufTCp6XP5+kHOtkWR\nfz1Jx0r6KykIW0JqMr5xfgE8HVgfuLnh2Dd1WMaLSU3Sd5f0/LzPi4GLGBp0Xx8RD4/0PGq2aFHe\nprRK/en1g3m5aYtt2mm3z9GWtZ1XAecAf0tqol/ZHbgUICJWASc0lHE41UByvZ4izszMzMx6wM3L\nbW22vHhf3YD6EWmapyb/Vbz/JvBB4BukJuUPk4KqnzK+N7OuAh4n9eu+E7gvIm6WdDHwcUnTSU+/\nfzHK8xgPK4dJH3bU8h7ts+5+YJqkDSLiMYCI+AGApHcAp+T3A8CuwCeKbddlsDl/O5sCy1o06Tcz\nMzOzKcxBt1myGHgEGIiI/9dB/v2BORFxZJUgaQZD56JeTArsd2jYfqeGtDVExFOSriQF3X9lMNC7\nGJgBvBfYkvTkezTnUbqPFOBv37Cu6Rw61Y0nvONR1qrv93YUfexzU/yXkZrxQ2pGviIiyn74z46I\nOzs8znbADR3mNTMzM7Mpxs3LzVjdZPgsYH9Jf1NfnwfyKq1kzd+fTwEDtX3OA94maetiXy8g9fXu\n1MXAK4A983si4n5S0PgZUlBbpY/0PFbL2/42l3erYpvtgX1GUN66x/Jyk5a5RmCcyvoH0pPzXWvp\n2wMPRkTVh3sHiibruX/9k/n96yUdIenfJR2WB42rmw1c1mGZzMzMzGyK8ZNus0GfJQW2V0j6LnA9\n8DRgF+D1QBmw/hp4v6SlOd/upIG9ltT2eRQpCLxE0imkZsmfID1ZfUmH5boY+F/AsxnapPki4GPA\nbRFxzyjPo+5o0g2ByyR9m/Q34rBc3p07LG/dfFJwe5ykM4GngHMiYnnrzdoaU1kj4jZJ1wJvAOYU\nq+4mDUI3LSJWkKaHKwdBO5jB0envJQ3I9peI+FYeAX81SbuQrv2vRnx2ZmZmZjYlOOg2yyLiPkm7\nkebTfjvwcVK/3+uAI2vZP0Waruo9pIDsElLwNo+iOXWeMutNwImkKa7uyvt/Jp0H3ZeRnqw/Shq1\nvHIxKQC8qMw8wvOgtu0CSfsA/wocm8t7NLBjfo1YRFwl6QvAIcDepBYC29H5QGTdLOsPgGMkzaj6\nXEfEXZK+BHxX0h2kgdXWkfR/SNfxooi4L+e9QdKnyEF4Q7/tdwJ3RMTvR3+mZmZmZjaZKcID6ppZ\na5J+CbwwIkYVeE+kkZRV0izgFuDIiDhtlMdbALw8IlbW0qcDtwPHRcQ3R7NvMzMzM5v83KfbzIao\nzyctaQfg74ALe1Oi4Y21rBGxlDT91z+P8vibATfVA+7sQ6S+3/U5x83MzMxsLeIn3WY2hKR7SH2c\nbwW2JTULXxeYHRG39K5ka5pMZTUzMzOztZP7dJtZ3fnAAcBWwBOkPuWf79MgdjKV1czMzMzWQn37\npFvSYcCnSV+m/wR8MiL+2NtSmZmZmZmZmXWuL/t0S3o38HXSdEsvIwXd81rNMWxmZmZmZmbWb/ry\nSbeky4ErIuLw/FnAncDJEXF8Le9mpGmIbgcen+CimpmZjbf1SGMUzIuI+3tcFjMzMxujvuvTLWld\nYBfguCotIkLSb4HdGzbZmzxHrpmZ2RTyXuCMXhfCzMzMxqbvgm5gc2AAWFRLXwQ0zbt7e1r8CPgO\nHPSN9PE1g0/w/3nnYwF4aNdzAPjuu64a3HruT/KbVcUuZ+TlBnlZtgZ4Ii/LGYIG8rK6nCuKdU0z\nCQ23HaQHHOWxy/JsnJezinVbpsUmRdIWeblhkbY8L5fk5f3FOa2q3j9WbFCdw8ra5zKtVP9RKj83\nnWd9Xbn/6n1ZJ0HqbfClFsceaEhbryEtmz7M+3oxqtN9qiFPo1atR8p1q1qsW8Ga6tc9Wqzr1Ej/\nBAy0zzLEuiPI+2ngXxvS210Xmzw+A3yt14XoU+Xvyo3AB2H1/zczMzObzPox6B6p3KT8BcDGsNXs\n9HHHwS/qz56duoKvXyU8fXax+SV5WQYtVc6N8rL80l9Fr2X+abVlGZ21Coaq/OWXrerYsxrSnlZb\nAmw9dFcAM/NyoyJNeVkFlyrPqXr/SJFWncOK2ucyrVQPrsrPTedZaQq6q2OV1y5I1+TFLY49rSFt\n/Ya0rBzRoNq06bKMuAdGp0F3qyB6RUNaJ/lHaiRBMYz8T8ZI9j+LNIRDnYPuqWNjmuvYhvldJItD\nvAAAIABJREFUcZcpMzOzKaAfg+4lpOhiy1r6lsDC4Tc7ArgJfv7W9PFi4A0HwBsP7EYZzczMxsFc\n4GcM3hkFWNqjspiZmVk39N3o5RHxFDAf2KtKywOp7UWag3cY3wB2g/9xTnp97WwH3GZm1ufeRQq6\nf1m8mrpZmFknJB0kaZWkbZo+96PJUMZ+IelISdeP4/4+JumOPKaUWdf0XdAt6TWkJ/CfzH+APg78\nG6nR9Jxels3MzMzM+lqwZmexnk/VI2l3SUdJmtWwui/KOB7anOdY970RcCTw1XHc7RxS58uPjeM+\nzdbQd0E3aQSx84DvkNrbnQS8BNg7Iha33tRPtqe2t/W6ANZV7+51Aazr3tnrApiZ9coepNFgN2lY\n90Ng/Yj468QWqStanedYfYQ0GNCZ47XDiHgCOB34p/Hap1mTvuvTHREXABcASDoYeGdEnNPZ1gcO\njs79b4P94z71ve+lNzvl5SuLTb5VDapWDk5W2Swvy4HUq7525YBO1WWsBu0qBySrBl5rGvq6adC0\nqhxll/ZqRLR8TuWfsSrb1kVa05+5qoiP5uV6Rf/Bx+qZyvKuqC1h8GZsObBXfYCr5cX7VgPG1a8d\nDB0BriLgkIb0EagGMq8Ggy9Pt+k3oTqlpqGMnmhIW626tk03rct+m/WRwJsG5+uWTvdflXci/lQc\n0KYM7crhQdb637sm8Fh99+/NzNZuGm5FRATw5ASWpZuGPc9xcBBwTkSM97WaCxwpac+I+P0479sM\n6M8n3WZmZmZmq0naRtIpkm6UtEzSEklzJT1nlPt7maTzJT0s6RFJv5X0ioZ8z5T0fUl3S3pc0q25\nHNM6LZeko4Dj88fbc/fJle36nXdSRklH522fJ2mOpAclPSTpB5LKeVNbXYs9JV0labmk/5Z0cLXf\nIs+Yz7O4nj+QtDBfz2slfaiDMm5Lavn6207OaSQiYgHwALDfeO/brOJHAWZmZmbW715Oaqv4E+Au\nYFvgUOBCSS+MiI6n2JP0QuAi4GFS/+AVpD69v5f02oj4Y873DOCPpCaJpwI3Ac8C/gdprKGlHZbr\nLOD5pCZdhwP356JU3SbX6NPdaRmL7eYCtwKfBWYDHyU11fxcm2vxMuB84B7gi6TY4IuktqNlmcZ8\nnpK2AK4gNe07OR9jX+D7kjaKiJNbFHWPXJ4Frc5nDBYAr+rSvs0cdJuZmZlZ3/t1RJxVJkg6F7gc\n2B/48Qj29b9J34FfFRF35H39X1JQfTzwtznfV4EtgN0i4upi+6NHUq6IuFbSAlIwenaHfbc7LWNl\nfkQcXJRhc1If6JZBN3AMKaDfIyIW5W3nAjfW8o3HeR5Han7+0oh4KKd9R9IZwNGSTs19rJvslJe3\nDXcikg4A9iTdFLgL+GxE7DRc/ppbgfd1mNdsxKZQ0H0EsDH8R/64Etj2QNjOg6uZmVm/+ml+lTxP\nt1ldGYzlpt2zSIHSQ6Qnux0F3ZLWAd4I/LIKZvP+F+bg76OSNiSNeLMfqQ/x1c17G79yjaaMEVGN\n1BOkJ/Gli4G31fI1HWcv4BdVwJ2Pc6uk84G/H+fzfAfpD96ApM2K9P8gjaY6G/jDMNtuBqyIiGXD\nnMvHSE/3XxERqyT9kMGRnjrxILC+pPVG0mrCrFN9F3RL+hzwdtIdLQGfk3RjRPyl9ZbfAGbDm/JH\n/7qYmVnfe3d+lWMPXQ2s0bXUbK2W+yd/njSY1rMYOmrpxiPY1dNJTcObvlfeQBrv6NmkptGzgOsm\nqFyjKeMNRXr9qfKDebkpg8Po1m1BGsn25oZ1Q9LGep6Snk4a6vdgmqfnilyeEcvdAE4kzXRU9UNf\nTHra3fFuinKYjbu+C7pJzUJ+RfpDchbpD96Fkl4XEU1/FMzMzMxsavsm8EHSU5bLSX2dg/TktJcD\nA/dLuVYOkz5eo4mP9TyrPD8iTdHV5L9abH8/ME3SBhHxWG3dR4BHIuKSIu1VpKbzndoUWNaiebvZ\nmPRj0H0ccCGDg0rsRPpFPYmimcuwqnt5Lx28UfX0f043/xYevB0AA78u/y5V03v9sUir32grp7pq\nmgKsWl9dznLqovrUW2W+Sjld1roNadWUYnkqrYeK6c0e2jYtFxV/U6vpw8qpw6rTrHrQPFbeyKvK\nWDYPeLy2rszf9He9mv6qaYqp+vUpLW9Iq65V0zRrTWnr1pblsYrp2B7P66tTK8f0bBrfsyrGE7XP\nQ7S6IdrumlXrW0111TRV23hMjdVqH+s2pLXKP5Y/I9WxxvPcmjRNc9epfvwzae1N5inkmv7Oma31\n9gfmRMSRVYKkGYx8PujFwDJgx4Z1LwBWAXeSmpcvBV40TuUayRPUTss4VveRvhVt37Buh9rnsZ7n\nYtK30YGI+H+jKGvVx3w74Nrauj2AS4tyrQfsXKZ1YDuGthwwG1d9N2VYRPxnRKwTEQMRMUD6g7MK\nOLLNpmZmZmY2Na1kze+tn2Lwrn9HcvPj/wD2q01ltSVwIHBxRDya587+FfAWSbPHoVzV09m2Nwk6\nLWO7/XR4nN+S+n5vVRxne2CfWvYxnWc+1lnA/pL+pl6WPPBbK38gPdnZtWHdDIY2xd8NuDEiluZ9\n7yTpWElvkXSWpJ0b9jEbuKxNGcxGra8f4UgS6Qn3JRFxfa/LY2ZmZmY98Wvg/ZKWAtcDu5MGARvJ\nYFmVLwBvAC6VdAopoDwYmM7QhzyfJw1odpGk75CehD6TNGXYq3JQ12m55pOCxuMknUlq0nJORDQ1\n+RtJGcfqaNKISJdJ+jYpNjiM9DS5DE7H4zw/S+pGeoWk7+b9PA3YBXg9MGzgHRG3SbqWdE3m1FZf\nROoHj6TpwJdJA8khaSZwBvCaiHhM0hfycVeTtEsux6+GO77ZWPV10A2cArwQz5tnZmZmtjb7FKnf\nyHtIncIuIQVg8xjh4FcRcb2k1wBfIQWC65D6Kb8nIq4q8t0j6RWkIO49pD5rdwPnkZp/d1yuiLgq\nB3yHAHvnY27HmgOgjaiMYxURCyTtA/wrcCxp8LGjSS1Ny+btYz7PiLhP0m7Al0iDJn+c1Ff7Ojq7\nkfAD4BhJM2p9r/8V+J6kz+aybEQOukkjpl+TA+7NgIciot6H553AHRHx+w7KYDYqSq1n+o+kbwJv\nId2ZGnY+w9zkZz68Ftg43X8kvWXnA+ClB67Zp/vRol/nT8/Pb8rpCPu8TzdFn262TYtNOuzTvTAv\nFzX16X6kSKuf53j36W41rkeX+nTX+yp32qf78drnISZrn+5Wmvp0t+I+3WajNxf4WS3tYXJXxF0i\nYsGEF8nM1nqSfgm8MCKa+pX3hKRZwC3AkRFx2jB5NiR9231eRCySdASwKiL+j6T3kb44XxERv8n5\npwO3A8dFxDcn4DRsLdV33yYlHQL8CymyfBQ4U9KxEXFB6y3zlGGvzR9f2p83E8zMzAa9K79KVwOv\n7kFZzGxtVJ+bWtIOwN8BjYFtr0TEUkknAP9MLpukw4DZEfGRnO3TwGnFvONnAkdK2hfYML/Kfugf\nAp5kzXnOzcZV3wXdpKfbM0gDRdwOHACcI2m3iLimlwUzMzObiiRtSpoS6O9Jg5eeBRzeMDXPcNv/\nG6m/6T9GxMldK6iZdcOtkuYAt5KeBB9Caud3Qg/L1CgijgeOL5I2ADaS9D9J7V3vi4hPFvnvBY5o\nsb9TccBtE6Afg+59SW1BzyjS1iEN6vAPbbfeIC9vHGy+vPjwNPDjQNV09aeLig2uzMuXFWlVM+uy\nGXelaofcakqXpibBnT55r6qkbF5eb1Zeb/5Oum9Xqe7fla3Fq6nCHm465vLaEtZsVt6uWW61vqmJ\nvRrSWjUrbmqS34l1h3k/jHL3j7dY37IYZTP5eh2X60Y0uGpx0HK7Vte4qQydNKVu+hPQqgl/qdU5\njfRPS1O3hNFqui7V/kdaD+OhH//MdqLpOk7Wc5lsenKd55IGMxog/cK8k/Qf9cCmzJKmAf+b9D97\nh7zdcob26TGzyeF80kOurUgTpV4GfD4ibulpqTqQg3CzvtePU4aV04WtC7yXNP3A13pbMjMzs6lH\n0k6kAZEWkUYW3od02/bd5TRCNTOBlwL/H/Ag8D5S4N3+5riZ9ZWI+EhEPDciZkbEphHx5oj4U6/L\nZTaV9F3QDSDpRZIeId1tOxV4V0Tc3ONimZmZTUVvz8v3AK8AfkyafkekZqZryFMl7ZPXrwB+SAq6\nny1p66ZtzMzM1lb92lbwRtLcgBuT5kI8U9LrIuLq3hbLzMxsytmF1B/l+cBJpA5JVV+Vz0n6ZkQ0\nzYV8Fqlv1nJSv5RppED9ZaRph9aQp+zZmzRmS1PHHjMzs8lkPdJYCPMi4v7hMvVl0B0RK0iDOQBc\nnef0+zhpkJZhHAFsDL+pdgJsdyA8t7E7mpmZWR/4aX6VGgffGDFJXwE+0yJLAC8gjQqykjRzSL0F\n3HTgE6R5e8t970IadG0xaZTjHUlPyCHNt3vuMMfcu8hnZmY2VbyXoWOSDdGXQXcpT3T/BuDa1jnz\nlGFvzB9HMx2vmZnZhHp3fpWuBl45Hjtfr30WBkjTcw4AzyMF4v8TuAq4rijk0bXtXk0ad2Vz4HKG\nfp94VYvj3Q7A9PXhebsOpt4AsDd/c9XTATj9DR9bveo7D7GGg7dMywP+fQ4AN++6fbH2nry8t0ir\nTmVGkfaKtBh4QVo+v1j1zLwsBymtvldUY7HeXqxb3DToaL4k1bio2xarqrFbdxsc/HLWHvcB8MKB\n63MR7lm9bkMeBWAdVq1OW5Xvjzyeq/nxorqfahj8shpMdnpelsNuVts+UAwge0c8B4CFt2w3mHF+\nXlbtDv9c7GRhtcdFwKeAk4GlOe2JNcoz+CNT1skGwyxh9YCYmxRJmzE0bbNi3Ua1JaSRCGCwTspD\nr1/L05QfYGY+z+l5OePJwRIOpPoZGBj8OVgnvx+Y1tmAupGzrVyZ6nfVisEBQFeuzO9XFvfGnpye\nlivy9Sl/BKv3q4q0TsbHbRcdDACfey98ZYT3z6pjr2qZq/MxfDvRrXig2+OyjmeENpqyjqR+u30t\nurb/GPn+L7oALp43JGnaskdZcd3VMPS/whr6LuiWdBxpFMW/kr51VHfpb+hZoczMzCaffwG+3SbP\nraRQav/8+dKI+KGkffLnlcA2Ddv9EPhH4FekEc4HSCHMBoAkzYiIpkgrNSlfuQJmltFTANuywexn\nATC7iBmf0bCT2TnOmDl7x5zy4mJttd8yYHsgL8voaae00Ow1s2+alxsXadWA/tVEH9PLEjXNxJFP\novpCV+6/moRk+8FAbNrsuwGYNZAu2+bFN8FN8hQkZdC9Mq9fls9peREtPrk6mhzcfxV0z8gzVJQh\n4LK87YpidpTpka/tjJ0GM96Xl3fkZRm0rt7jXaTWGi9m8Lo39SRomq1lVm1ZRswaulm5aX2SFxj8\nMSh/zDasLddrsW7YtHye61XLwR9zTVs5ZAmwzrR03QemtYs0kyrojhxsx4rBE9bqtCJKeDxXQhV0\nlz+C1fsy8ByPoHsa8MiD8ILZbTLWdBpMjzXoHulELqPR7QhqPPc/mn2NpH4n07UYIka+/9tugo02\nGZK0zuBkRS27TPVd0E36V3Q66f/susA1pH9Zjf3DzMzMbE25b9mw/csqkn4JHJc/3i3pVcB3Sd9I\nHiKHnpJuBD4TEWdHxIOSniRNLbYRKTC/kxQZtX+kt/5G8NmzBz+/s9rkok5OzczMbOK95cD0Ksy6\nYQFL3rLrMBsM6rugOyI+CiDpdGBxRHxa0oUj31Hx/qq0ePmlFwPwx++XXdaqu7pl6/XqVml1q728\nTNUt7vJW4rTastU8waVWl7/cR3XMauLtsu3TBmtmr4pd3oGuDvV4bQkMvZNcP2Y1Z3PZVK1KK89p\nWi1tWsO6prmeW12zcr7oTubsbjpmQ5uRphZtTVVRra+uVdMzmyGqc2/6vtm0bmWLdZ0cp6nQ5XWq\nn3tTfXWqqe1N0890J+ta6XS7pqdK47n/8TTSMvazqXQu3dD0N240JvbnNCJulHQ5qXXZ20l9tFcB\nZzLYaQtSv+09gbPzPN1PJz1HfDMp+F6PNMXnimGecg9a/gh8db+yFKRpgp81DmdkZmbWBef+BM49\nc0jS0kcb+kA16LugG0DSAaT5P9vfNjAzM7Ox+ijp7vMA6Y7gz4HDSU+6qzugqxjszbs1g42w/53B\nOwUbkvp4m5mZWdZ3QXee3/Mk4A0R8VS7/GZmZjZmfyneHw5cSRqhdBpwS04/HtiL1J/7QdLjaeXX\nquL9rpL2jIjfNxwn9aIdmAbL6k8HbuexBY8BsKD4738va1qQx65atuCmnFJ23GwaSK16XzZxujEt\nIt8veKxY9WBelt9CqkNUY4M9Waxr7IQ6bWhSuf+qb/TNgy2cVixIiUsH0uVeUgyk9vgEDaS2dHWL\nOngycsuWW5YNZrwzL6uu2kPaM5QDqW1MGmWtCwOptWoIWPazr+qubNnX5YHUIg+kFsVAaqvy+5Uj\nHEhtVR4srey/Hf00kNpGm8INC9pkrPFAap3r9UBqI6nftWkgtTtvg0eG/u9atezR6m3LwUsV0WmT\n1okhaT/gF6Rfk+rO+QDpyqwEZkRRaEmzgfnwWmDjweFeVjE4ZdhNKfvLL019xf44UDYvr4befLBI\ne1ptOZbm5U81pNW3K/85Nv3Vr5p/VwOLbFmsy++3KpK2zsvyn0n1T6fqGb+orPfq/SNFWr15ealf\nm5c3Xcfy53+doYds17y80nHz8kqr36lWo3uU61Y0pLXKX9+uaf1Ympc35W/VBHa8mtkOZ7TNy826\naTQ/92ey5pRhS4GLAXaJiBF+qx09SX8hjWD+AOkfz8OkJuTHRsTRkv4LeHpEPEOSgE+T+oIvJv3D\nfAJYBrwFuC4iljcc4z14yjAzM5t63hsRk2rKsJeTvs2XZXsCmAt8NYa9S1CbMszfxc3MrO8dkF+l\nq1k9ndXE+gLwo1raUuBb9YwREZL+jnQ3s7oTPJ10d/jQiPjwMMeYR5rL9HbajPRqZmY2CaxHmhRy\nXqtM/Rh0P0XqV7YXg4/SzgLujwhPG2ZmZtYFETFX0ubAkaS+2bcCn4yIxTnLfOA5Rf6/LbeXdBSw\nX4uAuxpRfdgnAWZmZpPQZe0y9GPQDWnk0+qfPJLct9vMzKzLIuIU4JRh1n2ozbbHAMd0o1xmZmaT\nWb8G3TtIupvU9OwPwAcj4s422wzvrvTA/I8/eW36XM5ScvYO+c3tReIL8nJRbQlD+z1XqmnHqj7X\nS4t1Vf6m+wbr15blPsqqqY/kMWtw1YZ5uXmRfeOGXVTN7asuzuWgAau7Cjf1oa4v6/nqmqZZq9Ia\nBphpOf1VK+1GxqjKW7ZezNdvRUNf5Gp3Tdes5aGaeju0GgGkqd92q/222ke7PhTjOaXXSPN3ep+s\nVZ9+s8lmpPeHuz32gZmZmfWDddpnmXCXAwcBewOHANsBF0naoNVGZmZmZmZmZv2m7550R0TZCf1a\nSVcCdwDvAk7rTanMzMzMzMzMRq4fn3QPEREPk+YP3b51ziOAt8Jv8ut3b4VbfzIBJTQzMxutM4G3\n116f7mmJuknSYZJuk7Rc0uWSXt7rMtnoSDpK0qra6/panmMl3SNpmaTfSGrzXc56RdJrJJ0j6e5c\nl29tyNOyPiXNkPQtSUskPSLp55K2qO/HJl67+pV0WsPv83m1PK7fMei7J911kjYkBdw/bJ3TU4aZ\nmdlk01dThnWVpHcDXwcOBq4k3S2fJ+n5EbGkp4Wz0arPNrP625ekzwCfAD5AGjjnX0j1/YKIeHKC\ny2ntbQBcA3wf+EV9ZYf1eRKwL7A/g9MNngW8ptuFt7Za1m92PqmLb/X7/ERtvet3DPou6JZ0AmnY\n9fcDrwc2AlYB1/WyXGZmZjYmRwCnRsQPASQdArwZ+DBwfC8LZqM2ZLaZmsOBL0fErwEkfYA0Mu3b\ngLkTVD7rUERcAFwAIKlp9NSW9SlpFul3+YCI+M+c50PADZJ2i4grJ+A0bBgd1C/AE8P9Prt+x64f\nm5dvB/wMeCuwHDgX+BBDhxc3MzOzSULSusAuwO+qtIgI4LfA7r0ql43ZDrm56i2SfiTp2QCStgO2\nYmh9LwWuwPU96XRYn7uSHuaVeW4C/orrfLLYU9IiSTdKOkXS04p1u+D6HZO+e9IN3AxcGhGvG9Ne\nygYR+6Qplt574PcA+PH7ymZ7O+XluUXaurVlMUXXasuL9w/WlmXb9mUNadW0Mk37r6a4Kn/OqznA\nNkqLacUNqk3ycsMieye1Wu5j9axU5dRlVdmapsBpartfz1feRJtWW5bvq7nLmm66ldPprF9bV+6r\nxXRWZbYZeblew7pKeWoDwyzLfCvLY1dTeXU6DVqr6YKapiLrpM9Ep1MWjXSqtk7zjXRqscpIp05q\nuj7Wv9zfx9ic9Fd0US19EbDjxBfHxkE128xNwDOAo0mzzbyIFKAFzfW91cQV0cZJJ/W5JfBkDsaH\ny2P963xSU/HbgOcBXwHOk7R7vkG6Fa7fMenHoPstwAWS5gKvA+4GTomI7/W2WGZmZmYGbWebubE3\npTKz0YiIssvHdZL+DNwC7Alc2JNCTTH92Lz8ucDHSXdO3wR8GzhZ0vt7WiozMzMbrSWkdlVb1tK3\nBBZOfHFsvNVmm1lIavrk+p4aOqnPhcD03Pd3uDw2SUTEbaS/29UI9a7fMerHoHsdYH5EfDEi/hQR\n3wW+CxzS43KZmZnZKETEU8B80kjXwOrBfPYiDZ5qk1wx28w9+Qv7QobW9yzSsPyu70mmw/qcT+pL\nVObZEdgG+MOEFdbGhaStgc2Ae3OS63eM+rF5+b3ADbW0G4B3tN7sCGBj+E3+uAJ4zoHpZWZm1pfO\nBH5aS6t3mZsyTgTmSJrP4JRhM4E5vSyUjU6ebeZcUpPyZwHHkAYWOTNnOQn4gqSbSYPhfhm4Czh7\nwgtrbUnagHTTpBqc5bmSdgYeiIg7aVOfEbFU0veBEyU9CDwCnEwap8kjW/dYq/rNr6NIfboX5nxf\nI7VcmQeu3/HQj0H35sA/SPpokSYG77QMozZP92NdKZuZmdk4Wnvm6Y6IuZI2B44lNUm8Bti7xZRT\n1t+2Bs4gPQ1bDFwCvDIi7geIiOMlzQROJQ37ejGwr+fo7lu7kvruRn59PaefDny4w/o8gtSN5Oek\n4WsvAA6bmOJbG63q91DgJaQ52DcB7iEF21/KrZQqrt8x6Megez/gPOAE0t2ztwGfB77Ty0KZmZnZ\n2ETEKcApvS6HjV1EtG1KGBFHk0Y1tz6X515u2e20XX1GxBPAJ/PL+kgH9btPB/tw/Y5B3wXdEfE7\nSW8Hvgr8E2lurkX5F71zS4r3u6TFp6d9DIAff2bl4LqvXZLf3F1ssH5tWaqmvilv/NSnOyrXNeWv\nLK8tYbBZ4QNFWlW2PI3YimI6sbu2TsuHijJUA/eXtftolb+aaqksTzXVWdmksdOppyrV8afVPsPg\nNVBDWtNxnqrlaVee6lhlfeX3K4q0FTPTsmoF0TSDWZPHmxKbpqyq0lY2rGvS6pw6mZatXf6RGumf\ng06m+erFn5h+mZ6q7/682qQx0r+/ZmZm1s/6cSA1IuK8iHgJaYLqVaS24x34SRdLZb33770ugHXV\n3PZZbJJzHZuZmdnapy+D7sLbSYH36Z1ld9A9tZ3X6wJYV/2s1wWwrnMdm5mZ2dqn34PuDwPnR4Tn\nfzMzMzMzM7NJp287HUraBngDaSC1DhwB3AS/eWv6uAzY6sD0MjMz60tzWbMFwMO9KIiZmZl1Sd8G\n3aSn3IvouE3xN4Cj4Y3npI93dKdQZmZm4+dd+VW6Gnh1D8piZmZm3dCXQbckAQcBcyJiVZvs66XF\nDcDDsGRB+lgOxJ1H7L4h8ujSCxcUK2/Ky3Ia8OqyzGg4XDUydTlCcv0yrmh432pE5XL79RqOXb3f\nOC9nFevy9KYri31Uo22Xu109i2I1wnZZnupilZObj3QE6OpgAw0Hr+cpNR2nSltZS3sEuL7Ffpuu\nWZlWG42+HIC83U/ZGlqNXt7pzlqNUNw0AnqrOul0xPRWBtpnGaKTPx8j2efDpGBjrMbjWoyHkV7P\ntcF41fFUV/1fWv0PwczMzCYxRTQFD70l6Y2kCdd3jIib2+R9D/DjCSmYmZnZxHlvRJzR60KYmZnZ\n2PRl0D0SkjYD9gZuZ5gZlc3MzCaR9YBtgXkRcX+Py2JmZmZjNOmDbjMzMzMzM7N+1e9ThpmZmZmZ\nmZlNWg66zczMzMzMzLrEQbeZmZmZmZlZlzjoNjMzMzMzM+uSKRF0SzpM0m2Slku6XNLLe10mGzlJ\nR0laVXtdX8tzrKR7JC2T9BtJ2/eqvNaapNdIOkfS3bku39qQp2V9Spoh6VuSlkh6RNLPJW0xcWdh\nrbSrY0mnNfxOn1fL4zo2MzOzKW3SB92S3g18HTgKeBnwJ2CepM17WjAbrWuBLYGt8uvV1QpJnwE+\nARwM7AY8Rqrr6T0op7W3AXANcCiwxjQJHdbnScCbgf2B1wLPBM7qbrFtBFrWcXY+Q3+nD6ytdx2b\nmZnZlDbppwyTdDlwRUQcnj8LuBM4OSKO72nhbEQkHQXsFxGzh1l/D3BCRHwjf54FLAI+GBFzJ66k\nNlKSVgFvi4hzirSW9Zk/LwYOiIhf5jw7AjcAr4yIKyf6PGx4w9TxacDGEfGOYbZxHZuZmdmUN6mf\ndEtaF9gF+F2VFukuwm+B3XtVLhuTHXJT1Vsk/UjSswEkbUd6SlbW9VLgClzXk06H9bkrMK2W5ybg\nr7jOJ5M9JS2SdKOkUyQ9rVi3C65jMzMzm+ImddANbA4MkJ6OlRaRvtDb5HI5cBCwN3AIsB1wkaQN\nSPUZuK6nik7qc0vgyRyMD5fH+tv5wAeA1wNHAq8DzsstkiDVo+vYzMzMprRpvS6AWSUi5hUfr5V0\nJXAH8C7gxt6UysxGq9bt4zpJfwZuAfYELuxJoczMzMwm2GR/0r0EWEl6IlbaElg48cVQ5zQZAAAB\n+0lEQVSx8RQRDwN/AbYn1adwXU8VndTnQmB67vc7XB6bRCLiNtLf7WqUetexmZmZTXmTOuiOiKeA\n+cBeVVputrgXcFmvymXjQ9KGpC/n9+Qv6wsZWtezgFfgup50OqzP+cCKWp4dgW2AP0xYYW3cSNoa\n2Ay4Nye5js3MzGzKmwrNy08E5kiaD1wJHAHMBOb0slA2cpJOAM4lNSl/FnAM8BRwZs5yEvAFSTcD\ntwNfBu4Czp7wwlpbuS/+9qQn2gDPlbQz8EBE3Emb+oyIpZK+D5wo6UHgEeBk4FKPat0fWtVxfh1F\nmv5rYc73NVLrlXngOjYzM7O1w6QPuvPUQpsDx5KaJF4D7B0Ri3tbMhuFrYEzSE/CFgOXkKYNuh8g\nIo6XNBM4FdgEuBjYNyKe7FF5rbVdSf12I7++ntNPBz7cYX0eQepC8nNgBnABcNjEFN860KqODwVe\nQhpIbRPgHlKw/aXcSqniOjYzM7MpbdLP021mZmZmZmbWryZ1n24zMzMzMzOzfuag28zMzMzMzKxL\nHHSbmZmZmZmZdYmDbjMzMzMzM7MucdBtZmZmZmZm1iUOus3MzMzMzMy6xEG3mZmZmZmZWZc46DYz\nMzMzMzPrEgfdZmZmZmZmZl3ioNvMzMzMzMysSxx0m5mZmZmZmXWJg24zMzMzMzOzLvn/ATbtp1Bd\nrn6AAAAAAElFTkSuQmCC\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x11f279450>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"X, y, text = next_batch(FLAGS, dl)\n",
|
|
"tsteps = FLAGS.ascii_steps + FLAGS.stroke_steps\n",
|
|
"\n",
|
|
"feed = {dnc.X: X, 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",
|
|
"strokes = np.cumsum(_y_hat[0,:,-3:-1],axis=0)\n",
|
|
"eos_thresh = 0.15\n",
|
|
"eos_flags = (_y_hat[0,:,-1:] > eos_thresh).astype(np.int32)\n",
|
|
"strokes = np.concatenate((strokes, eos_flags),axis=1)\n",
|
|
"line_plot(strokes, title=text[0][0], figsize = (FLAGS.ascii_steps*2,2), save_path='.')\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(_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$)') ; ax3.set_aspect(3)\n",
|
|
"ax4.imshow(_w_r[0,:,:,0].T, interpolation='none') ; ax4.set_title('read weighting ($w_r$)') ; ax4.set_aspect(3)\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
|
|
}
|