{ "metadata": { "name": "", "signature": "sha256:8fd379cf484cf6a9ddb0a2cbdafbbcd9552f169605a08aa092cfe4de445f0ca1" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "This code implements the GPstruct learning algorithm:\n", "- in the chain case, as presented in our [arXiv paper](http://arxiv.org/abs/1307.3846)\n", "- in the grid case, as presented in our [ICML 2014 paper](http://jmlr.org/proceedings/papers/v32/bratieres14.html)\n", "\n", "### Requirements ###\n", "\n", "The code has been tested with Python 2.7.8 and 3.4.1, Numpy 1.8.1, Numba 0.13.3, on Ubuntu 12.04.\n", "\n", "#### Source code files ####\n", "\n", "There are basically two groups of code files:\n", "- first group deals with the core MCMC loop, in which both training and prediction is carried out (by default at each MCMC iteration, cf param prediction_thinning). The ESS algo sits there too. And this deals with the GP aspect of GPstruct: kernel matrices, kernel functions, f\\*|f etc. My notation follows the Rasmussen and Williams book.\n", "- second group deals with likelihoods and computing marginals from data, given a vector of latent variables f. We've worked with chains and grids. In the chain case, I've coded the forward-backwards algo directly for likelihood and computing the marginals. In the grid case, we've looked at approximate likelihood with pseudo-likelihood (which I coded up) and approximate inference with TRW, as well as exact likelihood (ie max product) and inference (ie exact belief propagation in the grid -- can only be applied to small grids of course). TRW, and the exact schemes make use of a 3rd party library, libDAI, and a Python wrapper, pylibdai, cf URLs in grid_libdai_inference.py.\n", "\n", "Chain data: we used 4 tasks from the CRF++ dataset. The .x files have got sparse feature vectors for each position in the chain (ie word). The .y vectors have got the reference labels for each word. So my program is not concerned with feature extraction at all.\n", "\n", "#### Gotchas ####\n", "\n", "learn_predic_gpstruct ca line 218, computation of f\\_star\\_mean: Note that because of eq 4 (arXiv preprint), the kernel matrices need to contain only data for k_x, not for k_u (which contains k_x blocks on the diagonal). Therefore when eg multiplying with an f, you need to do as if you were repeating the kernel matrix on the diagonal, and multiply by blocks of f every time (iterating over labels y_t).\n", "\n", "Sampling from f\\* (as opposed to taking the mode/ mean f\\*\\_MAP as now) is not implemented yet, it doesn't seem to bring a performance improvement, cf arXiv paper.\n", "\n", "Not implemented either at this point (working on it): hyperparameter sampling.\n", "\n", "The ICML paper requires splitting up training and prediction in order to do ensemble learning. That's not implemented yet. It requires being able to compute pseudo-likelihoods on grids where only some pixels are seen (ie there are occluded pixels); that's implemented in the PL code (cf visible_pixels argument).\n", "\n", "hashable_compute_kStarTKInv_unary: will cache the computation of this kernel matrix, in case it can be re-used for a subsequent run on the same data, if it is still in memory." ] }, { "cell_type": "code", "collapsed": false, "input": [ "pygpstruct_location = '/home/sb358/pygpstruct_demo'\n", "! rm -rf /home/sb358/pygpstruct_demo\n", "! cd /home/sb358/pygpstruct-master\n", "! mkdir /home/sb358/pygpstruct_demo\n", "! git archive master | tar -x -C /home/sb358/pygpstruct_demo" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "%load_ext autoreload\n", "%autoreload 2\n", "\n", "import sys\n", "sys.path.append(pygpstruct_location + '/src/') # replace by your path to .py files" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "import prepare_from_data_chain\n", "n_data=10\n", "!rm -rf /tmp/pygpstruct_demo\n", "prepare_from_data_chain.learn_predict_gpstruct_wrapper(data_indices_train = np.arange(n_data), # training data= first 10 data files\n", " data_indices_test = np.arange(n_data, n_data*2), # test data= next 10 files\n", " result_prefix='/tmp/pygpstruct_demo/', # where to store the result files\n", " data_folder = pygpstruct_location + '/data/japanesene/',\n", " n_samples=501, # how many MCMC iterations\n", " task='japanesene',\n", " prediction_thinning=100\n", " )\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:06:54,198Z - INFO - learn_predict_gpstruct started with arguments: {'kernel': , 'console_log': True, 'random_seed': 0, 'prediction_verbosity': None, 'n_samples': 501, 'hp_sampling_thinning': 1, 'hp_sampling_mode': None, 'hp_debug': False, 'prior': 1, 'lhp_update': {}, 'prepare_from_data': at 0x7f3c8d554c80>, 'stop_check': None, 'n_f_star': 0, 'prediction_thinning': 100, 'result_prefix': '/tmp/pygpstruct_demo/'}\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:06:54,202Z - INFO - prepare_from_data_chain started with arguments: {'data_folder': '/home/sb358/pygpstruct_demo/data/japanesene/', 'data_indices_train': array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), 'n_labels': 17, 'native_implementation': False, 'data_indices_test': array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19]), 'n_features_x': 102799, 'logger': }\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:06:54,338Z - DEBUG - prepare kernel matrices\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:06:54,351Z - DEBUG - start MCMC chain\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:06:56,588Z - INFO - ESS it 0 -- LL train | last f = -675.36 -- test set error | last f = 0.79149 -- LL test | last f = -602.05 -- test set error (marginalized over f's)= 0.79149 -- average per-atom negative log posterior marginals = 2.0468\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:04,106Z - INFO - ESS it 100 -- LL train | last f = -374.95 -- test set error | last f = 0.24681 -- LL test | last f = -201.49 -- test set error (marginalized over f's)= 0.24255 -- average per-atom negative log posterior marginals = 0.68085\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:11,032Z - INFO - ESS it 200 -- LL train | last f = -277.82 -- test set error | last f = 0.18298 -- LL test | last f = -156.46 -- test set error (marginalized over f's)= 0.13191 -- average per-atom negative log posterior marginals = 0.37021\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:18,258Z - INFO - ESS it 300 -- LL train | last f = -209.34 -- test set error | last f = 0.11064 -- LL test | last f = -120.9 -- test set error (marginalized over f's)= 0.089362 -- average per-atom negative log posterior marginals = 0.29787\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:25,529Z - INFO - ESS it 400 -- LL train | last f = -181.66 -- test set error | last f = 0.13617 -- LL test | last f = -124.55 -- test set error (marginalized over f's)= 0.097872 -- average per-atom negative log posterior marginals = 0.27234\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:32,658Z - INFO - ESS it 500 -- LL train | last f = -138.44 -- test set error | last f = 0.1234 -- LL test | last f = -123.18 -- test set error (marginalized over f's)= 0.089362 -- average per-atom negative log posterior marginals = 0.25957\n" ] } ], "prompt_number": 3 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Speed-up: C implementation for forwards-backwards" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I originally implemented the forwards-backwards algorithm used to compute the likelihood in the MCMC algorithm used for training in Numba. Because this is the speed bottleneck for training, I have reimplemented it in C as a Python module, which needs to be compiled separately:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "! cd /home/sb358/pygpstruct-master/src/chain_forwards_backwards_native/; python setup.py install" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "running install\r\n", "running build\r\n", "running build_ext\r\n", "running install_lib\r\n", "running install_egg_info\r\n", "Removing /home/sb358/anaconda/lib/python2.7/site-packages/UNKNOWN-0.0.0-py2.7.egg-info\r\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Writing /home/sb358/anaconda/lib/python2.7/site-packages/UNKNOWN-0.0.0-py2.7.egg-info\r\n" ] } ], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then the native implementation can be used instead of the default Numba implementation by passing the native_implementation=True argument; that makes the run much faster:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "n_data=10\n", "!rm -rf /tmp/pygpstruct_demo\n", "prepare_from_data_chain.learn_predict_gpstruct_wrapper(data_indices_train = np.arange(n_data), # training data= first 10 data files\n", " data_indices_test = np.arange(n_data, n_data*2), # test data= next 10 files\n", " result_prefix='/tmp/pygpstruct_demo/', # where to store the result files\n", " data_folder = pygpstruct_location + '/data/japanesene/',\n", " n_samples=501, # how many MCMC iterations\n", " task='japanesene',\n", " native_implementation = True,\n", " prediction_thinning=100\n", " )\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:34,849Z - INFO - learn_predict_gpstruct started with arguments: {'kernel': , 'console_log': True, 'random_seed': 0, 'prediction_verbosity': None, 'n_samples': 501, 'hp_sampling_thinning': 1, 'hp_sampling_mode': None, 'hp_debug': False, 'prior': 1, 'lhp_update': {}, 'prepare_from_data': at 0x7f3c8d554ed8>, 'stop_check': None, 'n_f_star': 0, 'prediction_thinning': 100, 'result_prefix': '/tmp/pygpstruct_demo/'}\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:34,853Z - INFO - prepare_from_data_chain started with arguments: {'data_folder': '/home/sb358/pygpstruct_demo/data/japanesene/', 'data_indices_train': array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), 'n_labels': 17, 'native_implementation': True, 'data_indices_test': array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19]), 'n_features_x': 102799, 'logger': }\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:34,969Z - DEBUG - prepare kernel matrices\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:34,982Z - DEBUG - start MCMC chain\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:35,091Z - INFO - ESS it 0 -- LL train | last f = -675.36 -- test set error | last f = 0.79149 -- LL test | last f = -602.05 -- test set error (marginalized over f's)= 0.79149 -- average per-atom negative log posterior marginals = 2.0468\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:36,132Z - INFO - ESS it 100 -- LL train | last f = -374.95 -- test set error | last f = 0.24681 -- LL test | last f = -201.49 -- test set error (marginalized over f's)= 0.24255 -- average per-atom negative log posterior marginals = 0.68085\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:37,105Z - INFO - ESS it 200 -- LL train | last f = -277.82 -- test set error | last f = 0.18298 -- LL test | last f = -156.46 -- test set error (marginalized over f's)= 0.13191 -- average per-atom negative log posterior marginals = 0.37021\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:38,099Z - INFO - ESS it 300 -- LL train | last f = -209.34 -- test set error | last f = 0.11064 -- LL test | last f = -120.9 -- test set error (marginalized over f's)= 0.089362 -- average per-atom negative log posterior marginals = 0.29787\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:39,094Z - INFO - ESS it 400 -- LL train | last f = -181.66 -- test set error | last f = 0.13617 -- LL test | last f = -124.55 -- test set error (marginalized over f's)= 0.097872 -- average per-atom negative log posterior marginals = 0.27234\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:40,221Z - INFO - ESS it 500 -- LL train | last f = -138.44 -- test set error | last f = 0.1234 -- LL test | last f = -123.18 -- test set error (marginalized over f's)= 0.089362 -- average per-atom negative log posterior marginals = 0.25957\n" ] } ], "prompt_number": 5 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Plotting the MCMC run" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import util\n", "util.make_figure(np.arange(5), # display all 5 collected types of data\n", " [('Japanese Named Entity Recognition task', '/tmp/pygpstruct_demo' + '/results.bin')], # can display several results on same plot by appending tuples to this list\n", " bottom=None, top=None, save_pdf=False, max_display_length=2500)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "file_pattern: /tmp/pygpstruct_demo/results.bin\n", "matching files: ['/tmp/pygpstruct_demo/results.bin']\n", "file_pattern: /tmp/pygpstruct_demo/results.bin\n", "matching files: ['/tmp/pygpstruct_demo/results.bin']\n", "file_pattern: /tmp/pygpstruct_demo/results.bin" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "matching files: ['/tmp/pygpstruct_demo/results.bin']\n", "file_pattern: /tmp/pygpstruct_demo/results.bin\n", "matching files: ['/tmp/pygpstruct_demo/results.bin']\n", "file_pattern: /tmp/pygpstruct_demo/results.bin" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "matching files: ['/tmp/pygpstruct_demo/results.bin']\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nNjQ5OTnGGGN+/fVXU61aNfPLL78UGduOHTtMgwYNzEcffWSMufTPKCMjw2RlZZl27dqZZ5991pw9\ne9akp6eb77//3hhjzPTp002zZs3Mvn37TFpamnnggQdMv379jDHGbNu2zVx55ZXm+++/NxkZGWbE\niBGmSpUqzs94OfUxduxY535zudZHYXHk1uOgQYNMenq62bx5s7niiiucv7cXGjBggHnppZfylc2d\nO9ccOXLEGGPMnDlzTPXq1c3PP/9sjDGmd+/eZvz48cYYY86fP++sm9w637Nnj1m4cKGJiIgwa9eu\nLfCYuQDnz/PCch9/d5cphVairxUVH9YPs8S34rrwiyTXxo0bTWhoaL7XjRw50vl8+/btpmrVqgX+\ngp48edI4HA6TmppqjLH+iAYOHOjcHhcXZ1q2bGmMMWb27NmmS5cu+d4/aNAgM27cOGOMMZGRkWbK\nlCkmJSUl32sGDx580R9mixYtzPLlywv8nLl/fHFxcaZx48YmIyPjokRS1GcYNGiQc/vkyZNN69at\nnc+3bNliatasaYwx5scffzSRkZH59jd+/Hjz2GOPGWNMvqRijDFTp041jRo1KjCO3Nhr1Khhatas\n6bx9++23xhjri7Nr167O127bts0EBQU5n7uTSHITa65WrVqZRYsWOT/nPffcU2Rs1atXNw6Hwwwd\nOtS5rbCf0apVq0xYWJgzDle33nqree+995zPd+3aZapUqWKysrLMuHHjzO9//3vntrNnz5qqVavm\nSyTu1seYMWPy/TOUWx+5fw+XiiM7O9tZj8nJyc7tnTp1MrNnzy6wngYMGGBGjx5d4LZc7du3N/Pm\nzTPGGNO/f38zaNAgk5SUdNHrHA6HGT9+vGncuLHZtm1bofs05tLfQZQgkahrq4wxnru2QImcO3eO\nJ554gqioKEJCQoiJiSElJSXfvl1nFkVGRpKZmcmxY8fIzs7mhRdeoFmzZoSEhNCkSRMAjh075nx9\nvXr1nI+DgoJIS0sD4MCBA6xevZrQ0FDn7dNPP+Xo0aMA/Oc//yEuLo6oqChiY2P58ccfne+bOHFi\nvvclJSVx5MiRQj/nXXfdRaNGjZgyZUq+8QF3PkPdunWdjwMDA/M9v/AzHT58OF9sr732Gr/88gtg\ndXtdWJdF2bhxIydPnnTeunbNu46ca91Wq1aN9PR0cnJyitxnrgvHSfr3788nn3wCwCeffFLk4PPG\n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\nRERERERERERERERERERERERERERERERERERExLP+HxceDftyttX7AAAAAElFTkSuQmCC\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAYcAAAEPCAYAAACp/QjLAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8VNX9//HXBBACBEgIW0IgIH6VpYpiEdwYqbaKGz8t\nAq1g1K/Yr0Wl1hZxKeGrRctXrdXaFixSERVKFxWLW7GxrgVkUTYFBNkRFIGwZTu/P86dySSZzNyE\n3DtJ5v18PObB3GXufOZMuJ8559x7DoiIiIiIiIiIiIiIiIiIiIiIiIiIiDRKFwPrgPXAxCjbM4HX\ngBXAKiDPt8hERCQhmgAbgFygGTYB9K60Tz7woPM8E/gKaOpPeCIiUp0UD489EJscNgPFwFzgykr7\n7ATaOM/bYJNDiYcxiYiIC17+Ss8GtkYsbwPOqrTPU8BbwA4gDbjGw3hERMQlL2sOxsU+d2Obm7KA\n/sCT2CQhIiIJ5GXNYTuQE7Gcg609RDob+KXzfCOwCTgZWBq504knnmg2btzoUZgiIo3WRqBXbV4Y\nqONAIjUFPgW+g202WgyMBtZG7PMosB+YAnQCPgJOBb6udCyzfPlyD0NtGLKysvjd735Hfn5+okOp\nF/Lz81UWDpVFOZVFuUAgALU8z3tZcygBxgOvY69cmolNDDc726cDU4FZwEpsE9fPqZoYAMjLy/Mw\n1Prv4MGD9OrVi8GDByc6FBFJAl5fNvqq84g0PeL5XuByNwdasWJFXcXUIL311lvcf//9iQ5DRJKE\nlx3SUocCgQDGGILBYKJDqTdUFuVUFuVUFnXDyz6HumSMcXPxU+NVUFDA5MmTefvttxMdiog0EPW1\nzyFpZGRksG/fPl/ey/myRUTC0tPT+frrqN21tdZQzjT1uuYQavIREUmE6s5Bx1NzUJ+DiIhUoeQg\nIiJVKDmIiEgVSg4iPikoKCAnJyf+jnVgy5YtpKWlJW1fWL9+/fj3v/9d7fZhw4bx7LPP+hhRzaWk\npPD5558n7v0T9s7iq2AwyMyZMxMdhudSUlI49dRTK5wU7733Xq6//voERuVOSkoKrVu3Ji0tLfx4\n+OGHXb02NzeXt956K7zcrVs3Dh48GL667Xi//8jYsrOzue222ygpqb+j669atYrzzz8fsMNpjBkz\npsL2hQsXVllXF/Ly8rjvvvvq/LiJoEtZk0QgEEiay2B37tzJ3LlzGT16NNCwLv/9+OOP6dmzZ41f\nF++Kuboog1BsGzduZMiQIZxyyinccsstx31cqZ9Uc0gy33zzDZdddhkdO3YkIyODyy+/nO3bt4e3\nB4NBJk2axFlnnUXbtm0ZPnx4hXs4RowYQZcuXWjXrh1DhgxhzZo14W15eXn8+Mc/5rLLLqNNmzYM\nGjSoQrV43bp1XHTRRbRv355TTjmF+fPnh7ctXLiQvn370qZNG7p27cojjzwS3vbKK6/Qv39/0tPT\nOeecc/jkk09ifsaf//znTJ48mdLS0qjb432GW265hWHDhpGWlsZ5553Hrl27uP3220lPT6d3794V\nhnLZsWMHV199NR07dqRnz5488cQT4W1HjhwhLy+PjIwM+vbty5IlS2LGHUt+fj7XXHMN1113HW3a\ntKFfv3589NFHAIwZM4YtW7Zw+eWXh2sbmzdvJiUlhdLSUu655x7eeecdxo8fT1paGrfeeivjx4/n\nzjvvrPAeV1xxBY899ljcWE488UTOOeecCuUW6zvaunUrV111FR07diQzM5Nbb70VgLKyMh544AFy\nc3Pp1KkT1113HQcOHAi/bvbs2XTv3p3MzMzwfqHaUazyAFuTWrRoEa+99hoPPvgg8+bNIy0tjdNP\nPx2oWJMyxlQbR6gcQ7F06NCBqVOnRi2XGTNm8PzzzzNt2jTS0tK48ko7t9lDDz1Er169aNOmDX37\n9uXFF18Mv2bDhg0MGTKEdu3a0aFDB0aNGhX12O+++y7dunWL2VSWrEx9Vt/jM8aYYDBoZs6cab76\n6ivzt7/9zRw5csQcPHjQjBgxwgwfPjy835AhQ0x2drZZvXq1OXTokLn66qvNtddeG94+a9YsU1hY\naIqKisyECRNM//79w9uuu+460759e7NkyRJTUlJifvjDH5pRo0YZY4wpLCw0Xbt2NX/6059MaWmp\nWb58ucnMzDRr1641xhjTuXNn8+677xpjjPnmm2/MsmXLjDHGLFu2zHTs2NEsXrzYlJWVmWeeecbk\n5uaaY8eORf2cgUDArF+/3gwYMMD88Y9/NMYYc88995i8vDzXnyEzM9MsW7bMHD161AwdOtR0797d\nPPvss6asrMzce++95oILLjDGGFNaWmrOOOMMc//995vi4mLz+eefm549e5rXX3/dGGPMxIkTzfnn\nn2/27dtntm7davr27WtycnKq/Y4CgYDZsGFD1G2TJ082LVq0MK+++qopKyszkyZNMoMGDQpvz83N\nNYsWLQovb9q0yQQCAVNaWmqMKf/+QxYvXmyysrJMWVmZMcaYPXv2mJYtW5ovv/wybmxr1641Xbp0\nMc8884wxpvrvqKioyJSUlJhTTz3V3HHHHebw4cPm6NGj5r333jPGGDNz5kzTq1cvs2nTJlNYWGiu\nuuoqM2bMGGOMMatXrzatW7c27733nikqKjJ33nmnadasWfgz1qQ88vPzw8cNiSyPWHGEynHcuHHm\n6NGjZuXKlaZ58+bhv9vK8vLyzH333Vdh3fz5883OnTuNMcbMmzfPtGrVyuzatcsYY8yoUaPM1KlT\njTHGHDt2LFw2oTLfuHGjefXVV01OTo5ZsmRJ1Pc0pvpzEO7m1WnQqi2U+sBNfNgv6bgex6PyySFk\n+fLlJj09vcJ+kyZNCi+vWbPGnHDCCeGTSKR9+/aZQCBgDhw4YIyx/zFuuumm8PaFCxeaU045xRhj\nzNy5c815551X4fXjxo0zU6ZMMcYY061bNzN9+nSzf//+Cvv86Ec/qvKf7eSTTzZvv/121M8Z+g+1\ncOFC0717d1NUVFQlOcT7DOPGjQtvf+KJJ0yfPn3Cyx9//LFp166dMcaYDz/80HTr1q3C8aZOnWqu\nv/56Y4ypkCiMMWbGjBmma9euUeMIxd6mTRvTrl278OONN94wxtiT4UUXXRTed/Xq1SY1NTW87CY5\nhJJlSO/evc2bb74Z/pyXXnpp3NhatWplAoGAufXWW8PbYn1H77//vunQoUM4jkhDhw41v//978PL\nn376qWnWrJkpKSkxU6ZMMT/4wQ/C2w4fPmxOOOGECsnBbXlMnjy5wg+cUHmE/j9UF0dpaWm4HLdv\n3x7ePnDgQDN37tyo5ZSXl2fuvffeqNtC+vfvb15++WVjjDFjx44148aNM9u2bauyXyAQMFOnTjXd\nu3c3q1evjnnM6s4PHEdyULOST4wxx/2oC0eOHOHmm28mNzeXtm3bMmTIEPbv31/h+JFX1HTr1o3i\n4mL27t1LaWkpd911F7169aJt27b06NEDgL1794b379SpU/h5amoqhYWFAHzxxRf85z//IT09Pfx4\n/vnn2b17NwB//etfWbhwIbm5uQSDQT788MPw6x555JEKr9u2bRs7d+6M+TkvueQSunbtyvTp0yu0\nt7v5DB07dgw/b9GiRYXlyp9px44dFWJ78MEH+fLLLwHb5FS5LONZvnw5+/btCz8uuuiiqGXbsmVL\njh49SllZWdxjhlTudxg7dixz5swBYM6cOXE7aJcvX05hYSHz5s1j9uzZfPHFF0Ds72jr1q10796d\nlJSqp5qdO3fSvXv38HK3bt0oKSlh9+7d7Ny5k65du4a3paam0r59+wqvP97ycBNHSOfOnSu816FD\nh1wff/bs2Zx++unhslm1alX4723atGkYYxg4cCD9+vVj1qxZFV77+OOPM3LkSPr06VPjz3W8lByS\niDGGhx9+mM8++4zFixezf/9+3n777SrJZ8uWLRWeN2vWjMzMTJ5//nlefvllFi1axP79+9m0aVP4\nuPF069aNIUOGVDjxHTx4kCeffBKAM888kxdffJE9e/YwfPhwrrnmmvDr7rnnngqvKywsZOTIkXHf\n85e//CVTp07l8OHD4XXH8xkqy8nJoUePHhViO3DgAK+88goAXbp0qVKWtRWvQ7k226+99lpeeukl\nVq5cybp16xg+fLirWEaMGMFll10WnlAn1neUk5PDli1bovb/ZGVlsXnz5vDyli1baNq0KZ07d6ZL\nly5s21Y+ceSRI0f46quvXMVXWbyyqS6OyORT2/f64osvGDduHE8++SRff/01+/bto1+/fuG/t06d\nOjFjxgy2b9/O9OnTueWWWyr0082fP5+///3vPP744zWO5XgpOSSZwsJCUlNTadu2LV9//TVTpkyp\nsN0Yw5w5c1i7di2HDx/mF7/4BSNGjCAQCFBYWEjz5s3JyMjg0KFD3H333VVeW51LL72Uzz77jDlz\n5lBcXExxcTFLlixh3bp1FBcX89xzz7F//36aNGlCWloaTZo0AeCmm27iD3/4A4sXL8YYw6FDh/jH\nP/4R/vUey5AhQ+jXrx/PPPNM+D/t8XyGygYOHEhaWhrTpk3jyJEjlJaWsmrVKpYutbPcXnPNNTz4\n4IN88803bNu2rUJndXWqe/94cXXq1IlYU+lG2961a1fOPPNMxo4dy/e//32aN28eN76Qu+66ixde\neIFt27bF/I7OOussunTpwl133cXhw4c5evQo77//PgCjR4/m17/+NZs3b6awsJC7776bUaNGkZKS\nwtVXX82CBQv44IMPKCoqIj8/v9a1586dO7N58+ZqXx8rjupUd6xOnTpVOLkfOnSIQCBAZmYmZWVl\nzJo1i1WrVoW3z58/P5wE27VrRyAQqPC+WVlZLFq0iN/85jf84Q9/qNHnPl5KDkkkJSWFCRMmcOTI\n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\n5TAQPs34AAAAAElFTkSuQmCC\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAZIAAAEPCAYAAABoekJnAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8VPW9//HXBBCCBgiEJWQFoQqkuMAFrEuivVjcqRTB\nVhD1J1Vcr7WVRW9ia8Fy1SrWjdaqqCzSqgVFlFJj3UFFDFslyGIi4IZAEjAh+f7++J6ZTMJkMmRm\nziST9/PxmMfM+Z6Zcz7zDZzPfJdzDoiIiIiIiIiIiIiIiIiIiIiIiIiIiIgENRZYD1QDJ9dbNw3Y\nDGwCzvYrHwIUOesecCFGERFpxo4HfgC8Tt1EMhD4GGgHZAPFgMdZtwoY5rxeBoxyI1AREQkuIUb7\n3QR8GqD8ImABUAVswyaS4UAqkIRNJgDzgNFRj1JERBoVq0TSkN5Aid9yCZAWoLzUKRcRkRhrG8Vt\nrwB6BSifDiyN4n5FRMRF0UwkI5vwmVIgw285HdsSKXVe+5eXBtrAsccea7Zs2dKEXYuItGpbgH5N\n+WBz6Nry+L1eAowHjgL6AP2x4yK7gH3Y8RIPMAF4MdDGtmzZgjFGD2PIz8+PeQzN5aG6UF2oLoI/\ngGObehCPVSL5KfA5MAJ4GXjFKd8APOc8vwJMAYyzbgrwF+z032JguYvxiohIA6LZtRXMC84jkJnO\no74PgR9GLSIREWmS5tC1JVGSl5cX6xCaDdVFLdVFLdVFZHgaf0uLY5z+PhERCZHH44Em5oRYdW21\nWl27dmXPnj2xDkNEWqnk5GS+/fbbiG5TicRle/bsQS0mEYkVp+VRx1tvvRXWNpVIRERamVNPPdX3\n+tChQ+zatSus7WmMxGUej0ctEhGJGY/Hc1gLJCcnhy5dukATc4ISicuUSEQklho6BoUz2K7pvyLN\nTGFhIRkZGY2/MQJ27NhBUlJSq/1xk5OTw7///e8G15977rk8/fTTLkZ05BISEvjss89iG0NM9y7N\nTl5eHo8//nisw4i6hIQEBg8eXOcAevvtt3PFFVfEMKrQJCQkcMwxx5CUlOR73HPPPSF9Njs7m3/9\n61++5czMTPbv3+8bgA337+8fW1paGjfeeCOHDh1q8vaibd26dZxxxhkAFBQUMGHChDrrly1bdlhZ\nJEyaNIk77rgj4tuNFQ22Sx0ejyfgrI54tHPnThYuXMill14KBJ7N0lx98skn9O3b94g/11jXaiTq\nwBvbli1byM3N5fjjj2fKlClhb1eaL7VIJKDvvvuO888/nx49etC1a1cuuOACSktrL7icl5fHtGnT\nGD58OJ07d2b06NF1zo8ZO3YsqampdOnShdzcXDZs2OBbN2nSJK677jrOP/98OnXqxIgRI+o0zTdt\n2sTIkSPp1q0bxx9/PIsXL/atW7ZsGYMGDaJTp06kp6dz7733+ta99NJLnHjiiSQnJ3PqqadSVFQU\n9Dv+5je/IT8/n+rq6oDrG/sOU6ZM4dxzzyUpKYnTTz+dXbt2cdNNN5GcnMyAAQP4+OOPfe//4osv\nGDNmDD169KBv3748+OCDvnUHDhxg0qRJdO3alUGDBrF69eqgcQdTUFDAJZdcwuWXX06nTp3Iycnh\nww8/BGDChAns2LGDCy64wNeK2bZtGwkJCVRXVzNjxgzefPNNrr/+epKSkrjhhhu4/vrrufXWW+vs\n48ILL+T+++9vNJZjjz2WU089tU69Bfsbff7551x88cX06NGDlJQUbrjhBgBqamq46667yM7OpmfP\nnlx++eXs27fP97l58+aRlZVFSkqK733eVlew+gDbQlu5ciXLly9n1qxZLFq0iKSkJE466SSgbgvN\nGNNgHN569MbSvXt3Zs4MdKUnmDt3LvPnz2f27NkkJSVx0UUXAXD33XfTr18/OnXqxKBBg3jxxdrr\n0hYXF5Obm0uXLl3o3r0748ePD7jtt956i8zMzKDddRIa05w19/jy8vLM448/br755hvz/PPPmwMH\nDpj9+/ebsWPHmtGjR/vel5uba9LS0sz69etNeXm5GTNmjLnssst865944glTVlZmKisrzc0332xO\nPPFE37rLL7/cdOvWzaxevdocOnTI/OIXvzDjx483xhhTVlZm0tPTzZNPPmmqq6vNmjVrTEpKitm4\ncaMxxphevXqZt956yxhjzHfffWc++ugjY4wxH330kenRo4dZtWqVqampMU899ZTJzs4233//fcDv\n6fF4zObNm82QIUPMX/7yF2OMMTNmzDCTJk0K+TukpKSYjz76yBw8eNCcddZZJisryzz99NOmpqbG\n3H777ebMM880xhhTXV1tTj75ZPO73/3OVFVVmc8++8z07dvXvPrqq8YYY2677TZzxhlnmD179pjP\nP//cDBo0yGRkZDT4N/J4PKa4uDjguvz8fNOhQwfzyiuvmJqaGjNt2jQzYsQI3/rs7GyzcuVK3/LW\n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\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAYcAAAEPCAYAAACp/QjLAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8VPW9//HXJIZNEwiENQsB8apAqRaKuJFxq7jCQ4tg\nK4j2iq3F5WG9BdwItxaUn1tFbwVLrYgai7UWEJUWGncFlF2i7BCkKIpAWExIvr8/vmcmk2SSDEnO\nmZzk/Xw85sGcZc585jvkfOa7nO8BERERERERERERERERERERERERERGRJmkIUABsAMZH2Z4GvAms\nBNYCYzyLTERE4iIR2AhkA0nYBHBqpX1yganO8zTgG+A4b8ITEZHqJLh47IHY5LAVKAHygKGV9tkF\npDjPU7DJ4aiLMYmISAzc/JWeDuyIWC4Ezqi0zzPAEuBLIBm4xsV4REQkRm7WHEwM+9yNbW7qBpwG\nPIVNEiIiEkdu1hx2ApkRy5nY2kOks4DfO883AVuAk4HlkTudeOKJZtOmTS6FKSLSZG0CetXlhYEG\nDiTSccDnwAXYZqOlwLXA+oh9HgX2AZOBzsAnQD/g20rHMhMmTHAxVH/48Y9/zOrVq8nNzY13KI1C\nbm6uysKhsiinsigXCASgjud5N2sOR4FxwFvYkUuzsInhZmf7DGAK8CywCtvE9VuqJgYAUlJSoq1u\nNjZt2sT06dPJycmJdygi0gy4PWz0DecRaUbE8z3AFbEcaOLEiQ0Vky8tWbKE//3f/413GCLSTLjZ\nIS0NKBAIYIwhGAzGO5RGQ2VRTmVRTmXRMNzsc2hIxphYBj81Xfn5+dx///2888478Q5FRHyisfY5\nNBvt27dn7969nryX82WLiISlpqby7bdRu2vrzC9nmkZdcwg1+YiIxEN156D61BzU5yAiIlUoOYiI\nSBVKDiIiUoWSg4hH8vPzyczMrH3HBrB9+3aSk5ObbV9Y3759axzZd+mll/L88897GNGxS0hIYPPm\nzfF7/7i9s3gqGAwya9aseIfhuoSEBPr161fhpHjvvfdyww03xDGq2CQkJHDCCSeQnJwcfjz88MMx\nvTY7O5slS5aEl7Oysjhw4EB4dFt9v//I2NLT07nttts4erTxzq6/du1aBg8eDNjpNEaNGlVh+8KF\nC6usawhjxozhvvvua/DjxoOGsjYTgUCg2QyD3bVrF3l5eVx77bWAv4b/rl69mp49ex7z62obMdcQ\nZRCKbdOmTeTk5HDKKadwyy231Pu40jip5tDMfPfdd1x++eV06tSJ9u3bc8UVV7Bz587w9mAwyMSJ\nEznjjDNo27Ytw4YNq3ANx/Dhw+natSvt2rUjJyeHzz77LLxtzJgx/PrXv+byyy8nJSWFQYMGVagW\nFxQUcNFFF9GhQwdOOeUU5s6dG962cOFC+vTpQ0pKChkZGTzyyCPhbQsWLOC0004jNTWVs88+mzVr\n1tT4GX/7298yadIkSktLo26v7TPccsstXHrppSQnJ3Puuefyn//8h9tvv53U1FROPfVUVq5cGd7/\nyy+/5Oqrr6ZTp0707NmT6dOnh7cdPnyYMWPG0L59e/r06cOyZctqjLsmubm5XHPNNVx//fWkpKTQ\nt29fPvnkEwBGjRrF9u3bueKKK8K1ja1bt5KQkEBpaSn33HMP7777LuPGjSM5OZlbb72VcePGcddd\nd1V4jyuvvJLHH3+81lhOPPFEzj777ArlVtN3tGPHDq666io6depEWloat956KwBlZWU88MADZGdn\n07lzZ66//nr2798fft3s2bPp3r07aWlp4f1CtaOaygNsTWrx4sW8+eabTJ06lZdffpnk5GROP/10\noGJNyhhTbRyhcgzF0rFjR6ZMmRK1XGbOnMmLL77ItGnTSE5OZuhQe2+zBx98kF69epGSkkKfPn14\n7bXXwq/ZuHEjOTk5tGvXjo4dOzJy5Miox37vvffIysrSRbBRmMasscdnjDHBYNDMmjXLfPPNN+bV\nV181hw8fNgcOHDDDhw83w4YNC++Xk5Nj0tPTzbp168zBgwfN1Vdfba677rrw9meffdYUFRWZ4uJi\nc8cdd5jTTjstvO366683HTp0MMuWLTNHjx41P//5z83IkSONMcYUFRWZjIwM85e//MWUlpaaFStW\nmLS0NLN+/XpjjDFdunQx7733njHGmO+++858+umnxhhjPv30U9OpUyezdOlSU1ZWZp577jmTnZ1t\nvv/++6ifMxAImA0bNpj+/fubP/3pT8YYY+655x4zZsyYmD9DWlqa+fTTT82RI0fM+eefb7p3726e\nf/55U1ZWZu69915z3nnnGWOMKS0tNT/60Y/M7373O1NSUmI2b95sevbsad566y1jjDHjx483gwcP\nNnv37jU7duwwffr0MZmZmdV+R4FAwGzcuDHqtkmTJplWrVqZN954w5SVlZmJEyeaQYMGhbdnZ2eb\nxYsXh5e3bNliAoGAKS0tNcaUf/8hS5cuNd26dTNlZWXGGGO+/vpr06ZNG/PVV1/VGtv69etN165d\nzXPPPWeMqf47Ki4uNkePHjX9+vUzd955pzl06JA5cuSIef/9940xxsyaNcv06tXLbNmyxRQVFZmr\nrrrKjBo1yhhjzLp168wJJ5xg3n//fVNcXGzuuusuk5SUFP6Mx1Ieubm54eOGRJZHTXGEynHs2LHm\nyJEjZtWqVaZly5bh/7eVjRkzxtx3330V1s2dO9fs2rXLGGPMyy+/bI4//njzn//8xxhjzMiRI82U\nKVOMMcZ8//334bIJlfmmTZvMG2+8YTIzM82yZcuivqcx1Z+DiO2+Or5WbaE0BrHEh/2S6vWoj8on\nh5AVK1aY1NTUCvtNnDgxvPzZZ5+ZFi1ahE8ikfbu3WsCgYDZv3+/Mcb+Ydx0003h7QsXLjSnnHKK\nMcaYvLw8c+6551Z4/dixY83kyZONMcZkZWWZGTNmmH379lXY55e//GWVP7aTTz7ZvP3221E/Z+gP\nauHChaZ79+6muLi4SnKo7TOMHTs2vH369Ommd+/e4eXVq1ebdu3aGWOM+eijj0xWVlaF402ZMsXc\ncMMNxhhTIVEYY8zMmTNNRkZG1DhCsaekpJh27dqFH4sWLTLG2JPhRRddFN533bp1pnXr1uHlWJJD\nKFmGnHrqqeaf//xn+HNedtlltcZ2/PHHm0AgYG699dbwtpq+ow8++MB07NgxHEek888/3/zxj38M\nL3/++ecmKSnJHD161EyePNn87Gc/C287dOiQadGiRYXkEGt5TJo0qcIPnFB5hP4eqoujtLQ0XI47\nd+4Mbx84cKDJy8uLWk5jxowx9957b9RtIaeddpqZN2+eMcaY0aNHm7Fjx5rCwsIq+wUCATNlyhTT\nvXt3s27duhqPWd35gXokBzUrecQYU+9HQzh8+DA333wz2dnZtG3blpycHPbt21fh+JEjarKysigp\nKWHPnj2UlpYyYcIEevXqRdu2benRowcAe/bsCe/fuXPn8PPWrVtTVFQEwLZt2/j4449JTU0NP158\n8UV2794NwN/+9jcWLlxIdnY2wWCQjz76KPy6Rx55pMLrCgsL2bVrV42f85JLLiEjI4MZM2ZUaG+P\n5TN06tQp/LxVq1YVlit/pi+//LJCbFOnTuWrr74CbJNT5bKszYoVK9i7d2/4cdFFF0Ut2zZt2nDk\nyBHKyspqPWZI5X6H0aNHM2fOHADmzJlTawftihUrKCoq4uWXX2b27Nls27YNqPk72rFjB927dych\noeqpZteuXXTv3j28nJWVxdGjR9m9eze7du0iIyMjvK1169Z06NChwuvrWx6xxBHSpUuXCu918ODB\nmI8/e/ZsTj/99HDZrF27Nvz/bdq0aRhjGDhwIH379uXZZ5+t8NonnniCESNG0Lt372P+XPWl5NCM\nGGN4+OGH+eKLL1i6dCn79u3j7bffrpJ8tm/fXuF5UlISaWlpvPjii8ybN4/Fixezb98+tmzZEj5u\nbbKyssjJyalw4jtw4ABPPfUUAAMGDOC1117j66+/ZtiwYVxzzTXh191zzz0VXldUVMSIESNqfc/f\n//73TJkyhUOHDoXX1eczVJaZmUmPHj0qxLZ//34WLFgAQNeuXauUZV3V1qFcl+3XXXcd//jHP1i1\nahUFBQUMGzYspliGDx/O5ZdfHr6hTk3fUWZmJtu3b4/a/9OtWze2bt0aXt6+fTvHHXccXbp0oWvX\nrhQWlt848vDhw3zzzTcxxVdZbWVTXRyRyaeu77Vt2zbGjh3LU089xbfffsvevXvp27dv+P9b586d\nmTlzJjt37mTGjBnccsstFfrp5s6dy9///neeeOKJY46lvpQcmpmioiJat25N27Zt+fbbb5k8eXKF\n7cYY5syZw/r16zl06BD3338/w4cPJxAIUFRURMuWLWnfvj0HDx7k7rvvrvLa6lx22WV88cUXzJkz\nh5KSEkpKSli2bBkFBQWUlJTwwgsvsG/fPhITE0lOTiYxMRGAm266iaeffpqlS5dijOHgwYO8/vrr\n4V/vNcnJyaFv374899xz4T/a+nyGygYOHEhycjLTpk3j8OHDlJaWsnbtWpYvt3e5veaaa5g6dSrf\nffcdhYWFFTqrq1Pd+9cWV+fOnanpVrrRtmdkZDBgwABGjx7NT3/6U1q2bFlrfCETJkzgpZdeorCw\nsMbv6IwzzqBr165MmDCBQ4cOceTIET744AMArr32Wh577DG2bt1KUVERd999NyNHjiQhIYGrr76a\n+fPn8+GHH1JcXExubm6da89dunRh69at1b6+pjiqU92xOnfuXOHkfvDgQQKBAGlpaZSVlfHss8+y\ndu3a8Pa5c+eGk2C7du0IBAIV3rdbt24sXryYP/zhDzz99NPH9LnrS8mhGUlISOCOO+7g8OHDpKWl\ncdZZZ3HJJZdU+LUTCAQYNWoUY8aMoWvXrhQXF4d/tYwePZru3buTnp5O3759OfPMM6u8tvIvp9By\ncnIyixYtIi8vj/T0dLp27crEiRMpLi4GbLNGjx49aNu2LTNnzuSFF14AoH///jzzzDOMGzeO9u3b\nc9JJJzF79uxqP2Pl93/ggQcqzFZ5rJ+hps+UmJjIggULWLlyJT179qRjx46MHTs2PNJl0qRJdO/e\nnR49ejBkyBBGjx5d66/YH/7whxWuc7jzzjtrjQPszbAeeOABUlNTefTRR6tsv/3223nllVdo3749\nd9xxR3j99ddfz5o1a2ptUqr83n379uX888/n0UcfrfE7SkhIYP78+WzcuJGsrCwyMzP561//CsCN\nN97IqFGjGDx4MD179qRNmzbhBNqnTx+mT5/OyJEj6datG8nJyXTq1CmcwGorj0jDhw8HoEOHDgwY\nMKDK9priqO641b3XL37xCz777DNSU1O56qqr6N27N7/5zW8488wz6dKlC2vXruWcc84J7798+XIG\nDRoUHt30xBNPkJ2dXeE9MjMzWbx4MQ8++CB//vOfo76vG/wyANw0VJu7G/wwK2v//v2ZNGkSV155\nZY37nXfeeYwaNYobb7zRo8gknt59912uu+66cP9BY1VUVERqaiobN26s0D8glmZllTpZt24d69ev\nD4/xrk1jT3TSMEpKSnj88ce56aab4h1KVPPnz+fQoUMcPHiQu+66i379+ikxeMjt5DAEKAA2AOOj\nbL8LWOE81gBHgXYux9SsjB8/nosvvphp06bFPK+Pn64olrpZv349qamp7N69u0IzU2Myb9480tPT\nSU9PZ9OmTeTl5cU7pGbFzbNAIvA5cCGwE1gGXAusr2b/y4E7nP0rU7OSiEg1/NasNBDYCGwFSoA8\nYGgN+/8MeMnFeEREJEZuJod0YEfEcqGzLpo2wMXA31yMR0REYuRmcjiWdpYrgPeA71yKRUREjoGb\nU3bvBCJ7QDOxtYdoRlJLk1LoakywMyoGg8H6RdeAUlNT1YkrInGTmpoK2BtK5efnN8gx3TyjHYft\nkL4A+BJYSvQO6bbAZiADOFzNsRp1h7QXNmzYwJAhQ2q8ClZEJFJ9OqTdrDkcBcYBb2FHLs3CJoab\nne0znH+HOftUlxgEjYgSEW/5pS2k2dccNm/ezAUXXBCeKE5EpDaNdSirNCDVHETES0oOPqHkICJe\n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\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAYcAAAEPCAYAAACp/QjLAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl81NW9//HXhM0gAQJhCSEhLCoCRS0WcU3k1gVx4aei\nWAXBXrGlila9Ki4l/mrRct2KeisooggKxVovKLhcbkPdUJA9ggqCrCICAgkBQnLuH+c7k0kymXwT\n8v1Oknk/H495MN9lvvOZEzKfnHO+5xwQERERERERERERERERERERERERERFpcNKBfwJ5wBpgbIRz\nsoF9wHLn8aBfwYmISGx0BE51nrcAvgJOLndONjDXx5hERMSFBA+v/T2wwnmeD6wFOkU4L+BhDCIi\nUodlAt9haxDhsoDdwEpgPtDL37BERCRWWgBLgSERjiUBzZ3ng4Cv/QpKREQq53WTThPgbWAB8LSL\n8zcC/YA94Tu7d+9uNmzYUPvRiYg0bBuAHjV5oZd9DgFgKvAllSeGDpQmqP7O8z3lT9qwYQPGGD2M\nYfz48TGPoa48VBYqC5VF9AfQvaZf4I1r+kIXzgZuAFZhb1MFuB/IcJ5PBq4GfgscBQ4CwzyMR0RE\nXPIyOXxE1TWT55yHiIjUIV42K4kHsrOzYx1CnaGyKKWyKKWyqB31ZYyBcdrPRETEpUAgADX8nvey\nWSlutGnThr1798Y6DBGJU8nJyezZU+FenmOimkMtCAQC1OX4RKRhq+w76FhqDupzEBGRCpQcRESk\nAiUHERGpQMlBxAe5ubmkp6f78l6bN28mKSkpbvvB+vTpw7/+9a9Kj19yySW8+uqrPkZUfQkJCXz7\n7bexjSHKsXzgQCWP/d6HJrUlOzubqVOnxjoMzyUkJNC3b98yX4oPPvggo0aNimFU7iQkJNCiRQuS\nkpJCj8cff9zVazMzM/nf//3f0HZGRgYHDhwIdkYe888/PLa0tDTGjh3L0aNHa3w9r61Zs4bzzjsP\ngJycHIYPH17m+Pz58yvsqw0jR47koYceqvXrxkq0W1nLT68t9VQgEAh9UTR0O3bsYNasWVx33XUA\n9epzr1q1im7dulX7dVXdLVcbZRCMbcOGDWRlZdGzZ0/GjBlzzNeVuqs6zUrtsfMiBR9Sz/z0009c\neumltG/fnjZt2nDZZZexbdu20PHs7GzGjRvHGWecQatWrRgyZEiZ8RtDhw4lNTWV1q1bk5WVxZdf\nfhk6NnLkSH73u99x6aWX0rJlSwYMGFCmWrxu3TouuOAC2rZtS8+ePZkzZ07o2Pz58+nduzctW7ak\nc+fOPPHEE6Fjb7/9NqeeeirJycmcffbZrF69OupnvOeeexg/fjzFxcURj1f1GcaMGcMll1xCUlIS\n5557Lt9//z233347ycnJnHzyyaxYsSJ0/vbt27nqqqto37493bp145lnngkdKywsZOTIkbRp04be\nvXuzZMmSqHFHk5OTwzXXXMONN95Iy5Yt6dOnD1988QUAw4cPZ/PmzVx22WWh2samTZtISEiguLiY\nBx54gA8//JBbb72VpKQkbrvtNm699VbuvvvuMu9x+eWX8/TTVU+c3L17d84+++wy5RbtZ7Rlyxau\nvPJK2rdvT0pKCrfddhsAJSUlPPLII2RmZtKhQwduvPFG9u8vbZCYPn06Xbp0ISUlJXResHYUrTzA\n1qQWLlzIu+++y6OPPsrs2bNJSkritNNOA8rWpIwxlcYRLMdgLO3atWPChAkRy2XKlCm89tprTJw4\nkaSkJK644goAHnvsMXr06EHLli3p3bs3b731Vug169evJysri9atW9OuXTuGDYs8tdxHH31ERkZG\n1KayWLkc+AYowE6pXYJdF9pPpi6r6/FlZ2ebqVOnmt27d5s333zTFBYWmgMHDpihQ4eaIUOGhM7L\nysoyaWlpJi8vzxQUFJirrrrK3HDDDaHj06ZNM/n5+ebIkSPmjjvuMKeeemro2I033mjatm1rlixZ\nYo4ePWquv/56M2zYMGOMMfn5+aZz587m5ZdfNsXFxWb58uUmJSXFrF271hhjTMeOHc1HH31kjDHm\np59+MsuWLTPGGLNs2TLTvn178/nnn5uSkhLzyiuvmMzMTHP48OGInzMQCJhvvvnG9OvXz7z44ovG\nGGMeeOABM3LkSNefISUlxSxbtswcOnTIDBw40HTp0sW8+uqrpqSkxDz44IPm/PPPN8YYU1xcbH7+\n85+bP/7xj6aoqMh8++23plu3bua9994zxhhz7733mvPOO8/s3bvXbNmyxfTu3dukp6dX+jMKBAJm\n/fr1EY+NHz/eHHfccWbBggWmpKTEjBs3zgwYMCB0PDMz0yxcuDC0vXHjRhMIBExxcbExpvTnH/T5\n55+bTp06mZKSEmOMMbt27TLNmzc3P/zwQ5WxrV271qSmpppXXnnFGFP5z+jIkSPm6NGjpm/fvubO\nO+80Bw8eNIcOHTIff/yxMcaYqVOnmh49epiNGzea/Px8c+WVV5rhw4cbY4zJy8szLVq0MB9//LE5\ncuSIufvuu02TJk1Cn7E65ZGTkxO6blB4eUSLI1iOo0ePNocOHTIrV640zZo1C/2/LW/kyJHmoYce\nKrNvzpw5ZseOHcYYY2bPnm2OP/548/333xtjjBk2bJiZMGGCMcaYw4cPh8omWOYbNmwwCxYsMOnp\n6WbJkiUR3zOosu8gwNOOp1VACqUzq54PvOTlG0YQtWBirar4sD+gY37UVPkvh6Dly5eb5OTkMueN\nGzcutP3ll1+apk2bhr5Ewu3du9cEAgGzf/9+Y4z9xbj55ptDx+fPn2969uxpjDFm1qxZ5txzzy3z\n+tGjR5uHH37YGGNMRkaGmTx5stm3b1+Zc37zm99U+GU76aSTzKJFiyJ+zuAv1Pz5802XLl3MkSNH\nKiSHqj7D6NGjQ8efeeYZ06tXr9D2qlWrTOvWrY0xxixevNhkZGSUud6ECRPMqFGjjDGmTKIwxpgp\nU6aYzp07R4wjGHvLli1N69atQ4/333/fGGO/DC+44ILQuXl5eSYxMTG07SY5BJNl0Mknn2w++OCD\n0OccPHhwlbEdf/zxJhAImNtuuy10LNrP6JNPPjHt2rULxRFu4MCB5q9//Wto+6uvvjJNmjQxR48e\nNQ8//LD51a9+FTp28OBB07Rp0zLJwW15jB8/vswfOMHyCP4+VBZHcXFxqBy3bdsWOt6/f38za9as\niOU0cuRI8+CDD0Y8FnTqqaeauXPnGmOMGTFihBk9erTZunVrhfMCgYCZMGGC6dKli8nLy4t6TWO8\nSQ5umpWKgB+dcxsB/wROr+kbxiNTe3OzH5PCwkJuueUWMjMzadWqFVlZWezbt6/MtcPvqMnIyKCo\nqIgff/yR4uJi7rvvPnr06EGrVq3o2rUrAD/++GPo/A4dOoSeJyYmkp+fD8B3333HZ599RnJycujx\n2muvsXPnTgD+/ve/M3/+fDIzM8nOzmbx4sWh1z3xxBNlXrd161Z27NgR9XMOGjSIzp07M3ny5DLt\n7W4+Q/v27UPPjzvuuDLb5T/T9u3by8T26KOP8sMPPwC2yal8WVZl+fLl7N27N/S44IILIpZt8+bN\nOXToECUlJVVeM6h8v8OIESOYMWMGADNmzKiyg3b58uXk5+cze/Zspk+fznfffQdE/xlt2bKFLl26\nkJBQ8Wtmx44ddOnSJbSdkZHB0aNH2blzJzt27KBz586hY4mJibRt27bM64+1PNzEEdSxY8cy71VQ\nUOD6+tOnT+e0004Llc2aNWtC/98mTpyIMYb+/fvTp08fpk2bVua1kyZN4tprr6VXr9isnuwmOezF\nLuf5ITATmIS9k0nqEWMMjz/+OF9//TWff/45+/btY9GiRRUSz+bNm8s8b9KkCSkpKbz22mvMnTuX\nhQsXsm/fPjZu3Bi6blUyMjLIysoq88V34MABnnvOztZ++umn89Zbb7Fr1y6GDBnCNddcE3rdAw88\nUOZ1+fn5XHvttVW+55/+9CcmTJjAwYMHQ/uO5TOUl56eTteuXcvEtn//ft5++20AUlNTK5RlTVXV\noVyT4zfccAP//d//zcqVK1m3bh1DhkRaxbeioUOHcumll5KTkwNE/xmlp6ezefPmiP0/nTp1YtOm\nTaHtzZs307hxYzp27Ehqaipbt24NHSssLGT37t2u4iuvqrKpLI7w5FPT9/ruu+8YPXo0zz33HHv2\n7GHv3r306dMn9P+tQ4cOTJkyhW3btjF58mTGjBlTpp9uzpw5/OMf/2DSpEnVjqU2uEkOQ7AL8fwe\neBdYD1zmZVDijfz8fBITE2nVqhV79uzh4YcfLnPcGMOMGTNYu3YtBw8e5A9/+ANDhw4lEAiQn59P\ns2bNaNOmDQUFBdx///0VXluZwYMH8/XXXzNjxgyKioooKipiyZIlrFu3jqKiImbOnMm+ffto1KgR\nSUlJNGrUCICbb76Z559/ns8//xxjDAUFBbzzzjuhv96jycrKok+fPrzyyiuhX9pj+Qzl9e/fn6Sk\nJCZOnEhhYSHFxcWsWbOGpUuXAnDNNdfw6KOP8tNPP7F169YyndWVqez9q4qrQ4cORFtGN9Lxzp07\nc/rppzNixAiuvvpqmjVrVmV8Qffddx+vv/46W7dujfozOuOMM0hNTeW+++7j4MGDHDp0iE8++QSA\n6667jqeeeopNmzaRn5/P/fffz7Bhw0hISOCqq65i3rx5fPrppxw5coScnJwa15w7duzIpk2bKn19\ntDgqU9m1OnToUObLvaCggEAgQEpKCiUlJUybNo01a9aEjs+ZMyeUBFu3bk0gECjzvp06dWLhwoX8\n5S9/4fnnn6/W564NbpJDPlCMbV56GVtzqFkal5hJSEjgjjvuoLCwkJSUFM466ywGDRpU5q+dQCDA\n8OHDGTlyJKmpqRw5ciT0V8uIESPo0qULaWlp9OnThzPPPLPCa8v/5RTcTkpK4v3332fWrFmkpaWR\nmprKuHHjOHLkCGCbNbp27UqrVq2YMmUKM2fOBKBfv3688MIL3HrrrbRp04YTTjiB6dOnV/oZy7//\nI488Umamyup+hmifqVGjRrz99tusWLGCbt260a5dO0aPHh2602X8+PF06dKFrl27cvHFFzNixIgq\n/4o95ZRTyoxzuPPOO6uMA2DcuHE88sgjJCcn8+STT1Y4fvvtt/PGG2/Qpk0b7rjjjtD+G2+8kdWr\nV1fZpFT+vfv06cPAgQN58skno/6MEhISmDdvHuvXrycjI4P09HT+9re/AXDTTTcxfPhwzjvvPLp1\n60bz5s1DCbR3794888wzDBs2jE6dOpGUlET79u1DCayq8gg3dOhQANq2bcvpp1dsDY8WR2XXrey9\nfv3rX/Pll1+SnJzMlVdeSa9evbjrrrs488wz6dixI2vWrOGcc84Jnb906VIGDBgQurtp0qRJZGZm\nlnmP9PR0Fi5cyGOPPcZLL/nb1evmBuirgMcou96zAVp6FVQEpjba3L1S12dl7devH+PHj+fyyy+P\net7555/P8OHDuemmm3yKTGLpww8/5IYbbgj1H9RV+fn5JCcns379+jL9A1IqVrOyTsTeztoS2/eQ\nhL+JQY5BXl4ea9euDd3jXZW6nOSk9hQVFfH0009z8803xzqUiObNm8fBgwcpKCjg7rvvpm/fvkoM\nPnOTHL4H1nodiNS+e++9l4suuoiJEye6ntenPo0olppZu3YtycnJ7Ny5s0wzU10yd+5c0tLSSEtL\nY8OGDcyaNSvWIcUdN98EfwE6Am8BR5x9BnjTq6AiULOSiEglvGhWcrNMaCugELiw3H4/k4OIiPio\nvrQhqOYgIlIJv2sO9wJ/BiLdoG2AsTV5QxERqfuiJYfgtItfRDimP5PDJCcnqyNXRGImOTm51q9Z\nX77R6nSzkohIXeR1h/Q8bE0hfADcPmApMBk4VJM3FhGRusvNOIeN2Ck0pgAvYJcJzQdOdLZFRKSB\ncVPdWErFKbqD+/KA3rUdVARqVhIRqSavp884Hggft97F2Qelg+JERKQBcdPncBd2LYfgXLTdgDHY\nBPGKR3GJiEgMVZUcErAT7Z0I9HT2fYUdMQ1Q9YrkIiJS77hpi/oC6Od1IFVQn4OISDUdS5+Dmxc9\nhl1DejYQvnjqnsine0LJQUSkmrxODpuIPCK6a03esIaUHEREqsnr5FAXmKeeeirWMcTcueeeS79+\nsW7hE5H6wusR0gB9gF7AcWH7Kl/M10p3zmmPrXlMwa4/Xd4kYBBwEBgJLI90sU2bNrkMtWHKy8tj\n5cqVTJs2LdahiEgccJMccoAs7GC3d7Bf5B9RdXIoAn4PrABaYDu2P6DsqnKXAD2AE4AzgL8CAyJd\n7Omn4/vGqGnTprFo0aJYhyEiccLNILirgV8CO4BRwClAaxev+x6bGMBOt7EW6FTunMspHSvxmXPd\nDi6uHXe0ZoSI+MlNcigEioGj2FXhfsA2GVVHJnAaNgGESwO2hG1vBTpX89pxIRAIUFJSEuswRCRO\nuGlWWgIkYyfZW4q9nfWTarxHC+AN4HZsDaK88p0lEf88zsnJCT3Pzs4mOzu7GiHUfwkJCao5iEhU\nubm55Obm1sq1qtuL3RU7YnqVy/ObAG8DC4g8mvp5IBeY5Wyvw/Zv7Cx3XtzfyjpjxgwWLFjAzJkz\nYx2KiNQTXk+8B7af4Qps09AJwJVu4gKmYleUq6w3eS4wwnk+APiJiolBsDUHNSuJiF/cNCtNA36G\nnZ47/NvpzSpedzZwA7aWEbw99X4gw3k+GZiPvWNpPba5apSrqOOQOqRFxE9uksMZ2NtYq/vN9BHu\naia3VvO6cUkd0iLiJzdf3kuwA+AkhtQhLSJ+ctus9Cl23MJhZ58B+noVlFSkZiUR8ZOb5DAV23ew\nhrJ9DuIjdUiLiJ/cJIcfsHcVSQyp5iAifnKTHJYDrwHzKF0z2lD13UpSi9QhLSJ+cpMcmmP7Gi4s\nt1/JwUfqkBYRP7lJDiO9DkKqpmYlEfGT2xHSEmPqkBYRPyk51BOqOYiIn5Qc6gl1SIuIn9z0OdyF\nvTspOLOfAfZhV3ZbUdmLpHapQ1pE/OSm5tAP+A12Fbc04BbsUqEvAPd6F5qEU7OSiPjJTc0hHfg5\npQv1/AE7m2oWtvbwZ29Ck3DqkBYRP7mpObSjdPAbQBF2neeDwCEvgpKKVHMQET+5qTnMxK79/Ba2\n3+Ey7Ijp47EL+YgP1CEtIn5ykxz+CLwLnOVs34JdSxrgei+CkorUIS0ifnKTHMA2JZWEPRefqVlJ\nRPzkps/hdmAGtu+hvfN8rJdBSUXqkBYRP7mpOfw7dqnQAmf7MWAxMMmroKQi1RxExE9uR0iXVPJc\nfKKag4j4ye0yoZ9hp+gOAEOAl7wMSipSzUFE/OQmOTwJLALOwU6dMRK7AJD4SMlBRPwULTm0CXu+\nEdjkPDfOsT0exSQRqFlJRPwULTkswyaCSAzQrfbDkcqo5iAifoqWHDL9CkKqppqDiPhJ6znUE6o5\niIiflBzqCSUHEfGTkkM9oWYlEfGT2+RwLjDKed4O6OpNOFIZ1RxExE9ukkMOcA8wztluip1fSXyk\nmoOI+MlNcvh/wBWUzq20DUjyLCKJSDUHEfGTm+RwmLLzKR3vUSwShZKDiPjJTXKYA0wGWgOjgYXA\ni14GJRWpWUlE/ORmbqX/BC4EDgAnAg8BH3gZlFSkmoOI+MlNcrgLmAW873EsEoVqDiLiJzfNSknY\nxPARcCvQoRrXfwnYCayu5Hg2sA87y+ty4MFqXDuuqOYgIn5yeytrb+B3QCrwL2y/gxvTgIurOGcR\ncJrzeMTldeOOkoOI+Kk6I6R/AL4HdmMHwrnxIbC3inMC1YghbqlZSUT85CY5jAFysbWFFOya0n1r\n6f0NcBawEpgP9Kql6zY4qjmIiJ/cdEhnAHcAKzx4/2VAOnAQGAS8hb0jSspRzUFE/BQtObQE9mNv\nZQ2u/hauNlaCOxD2fAHwX1SyylxOTk7oeXZ2NtnZ2bXw9vWHag4iUpXc3Fxyc3Nr5VrR2vvfAQZj\nlweN9K3kdvK9TGAe8LMIxzpg+zIM0B/4G5EXGTLx/sW4detWBgwYwNatW2MdiojUE4FAAGrYrxut\n5jDY+TezJhd2vA5kYfsqtgDjgSbOscnA1cBvgaPYpqVhx/BeDVogEFCzkoj4xk2fw0Lg31zsi+S6\nKo4/5zykCmpWEhE/RUsOiUBz7G2r4f0NLYE0L4OSitQhLSJ+ipYcbgFuBzoBX4TtPwA862VQUpFq\nDiLip2jJ4WnnMRaY5E84UpmEhAQlBxHxjZs+h0lAH+wAtePC9k/3JCKJSB3SIuInN8khB3vHUW/s\n7a2DsJPwKTn4SM1KIuInN9NnXA38EtgBjAJOwS78Iz5Sh7SI+MlNcigEirFjEVphB62lexmUVKSa\ng4j4yU2z0hIgGXgBWAoUAJ94GZRUpA5pEfFTdYdVd8WOc1jpQSzRxP30GQcOHCA1NZX8/PxYhyIi\n9YRX02cE9aPi3Erdge+wTU3iAzUriYif3CSH57AJYpWz/TMgD9v/8FvgPW9Ck3DqkBYRP7npkN4O\nnIpNEP2c598CFwATvQtNwqnmICJ+cpMcTsLWFIK+BHoCG4g8lbd4QB3SIuInN81KecBfgVnYjo1r\nsAmiGVDkXWgSTiOkRcRPbnqxm2PXkT7b2f4Yu2LbIeB4yq7m5pW4v1upqKiIxMREjh7VPQAi4s6x\n3K3k9kXNsWtJr6vJm9SCuE8OxcXFNGnSRLUHEXHtWJKDmz6Hy4HlwLvO9mnA3Jq8mdScOqRFxE9u\nkkMOcAaw19leDnTzKiCJzPkLQAlCRHzhJjkUAT+V26e2DZ8pOYiIn9wkhzzgeuydTScAz6C5lWJC\nTUsi4hc3yeE27FoOh4HXgf3AHV4GJZFplLSI+KVGvdgxEPd3KwE0adKEgoICmjZtGutQRKQe8Hri\nvZOAu4HMsPMNMLAmbyg1p1HSIuIXN8lhDnaE9IvYRX9A02bEhEZJi4hf3CSHImxykBhTzUFE/OKm\nQ3oe8DsgFWgT9hCfqeYgIn5x01GxiYrNSAZ/B8KpQxpo0aIFO3bsICkpKdahiEg94HWHdGZNLiy1\nT81KIuIXN81KUkeoWUlE/KLkUI+o5iAiflFyqEdUcxARv7hJDgnAcOAPznYG0N+ziKRSmltJRPzi\nJjn8F3Am8CtnO9/ZJz5Ts5KI+MXN3UpnYBf4We5s7wGaeBaRVErNSiLiFzc1hyNAo7Dtdmg9h5hQ\nzUFE/OImOTwD/ANoD0wAPgYe9TIoiUw1BxHxi5tmpRnAF8C/OdtXAGtdXv8lYDDwA/CzSs6ZBAwC\nDgIjKW2+knLUIS0ifnFTc2gD7ARewy72sxP3fQ7TgIujHL8E6IFdYW40muAvKjUriYhf3CSHZcCP\nwDfA187z75z9/ap47YfA3ijHLwdecZ5/BrQGOriIKS6pWUlE/OImOXyAbfZp6zwuBt7GztR6rH/p\npwFbwra3Ap2P8ZoNlmoOIuIXN8nhTOC9sO33nX2fArWxXmX5GQP17VcJ1RxExC9uOqR3APcCs7Bf\n5Ndg+x0acey3tG4D0sO2Ozv7KsjJyQk9z87OJjs7+xjfuv5Rh7SIRJObm0tubm6tXMvNPN/tgPHA\n2c72x8DDwD7sVBrrq3h9JnbBoEh3K10C3Or8OwB42vm3PK3nAHTv3p3333+f7t27xzoUEakHvF7P\nYRf2CzySqhLD60AWkILtWxhP6Z1Ok4H52MSwHigARrmIJ26pWUlE/OImObQH7gF6AYnOPgMMdPHa\n61ycU1nikXLUIS0ifnHTIT0TWIddFjQHu2zoUu9Cksqo5iAifnGTHNoCL2LnWFqEbfpxU2uQWqaa\ng4j4xU2z0hHn3++BS4HtQLJnEUmldLeSiPjFTXJ4BDty+S7sJHwtgd97GZREpmYlEfFLVcmhEXAi\ndkT0T0C21wFJ5dSsJCJ+qarPoRh3dxyJD1RzEBG/uGlW+gh4FpiNHYsQwN7KuszDuCQC1RxExC9u\nksNp2GTw/8vtP7/2w5Fo1CEtIn5xkxyyvQ5C3FGzkoj4xc04h47AVOBdZ7sX8GvPIpJKqVlJRPzi\nJjm8jJ2mu5Oz/Q26lTUmVHMQEb+4SQ4p2M7oYme7CDjqWURSKdUcRMQvbpJDPnYKjaAB2Om6xWfq\nkBYRv7jpkL4Lux5DN+AT7PoOV3sZlESmZiUR8Yub5PAFcB7QEzvG4StK51sSH6lZSUT84qZZaRV2\nPYdCYDVKDDGjmoOI+MVNcrgc2xn9N+w6DndjlwcVn6nmICJ+cZMcNgF/Bvph51nqC2z0MCaphDqk\nRcQvbvocADKBa4FrsLWIe7wKSCqnZiUR8Yub5PAZ0BTbrDQU+NbTiKRSalYSEb+4SQ43YteQlhhT\nzUFE/OImOazDLg/aC0jEztAKFWdpFY+p5iAifnHTIT0Z29cw1tm+BujiWURSKXVIi4hfAi7OWQ38\nDDveoS/QAjtD6zkexlWe0ZciXHTRRXTo0IETTjgh1qHE3EUXXUT//v1jHYZInRYIBMDd93wFbpqV\nCp1/DwJpwG7sNN7is7Fjx7J48WKOHInvcYhLly5lx44dSg4iHnKTHOYBycB/YqfSAHjBs4ikUoMH\nD2bw4MGxDiPmXnzxRRYvXhzrMEQaNDfJ4Y/Ov38H3gGOA37yLCKRKjRt2jTua08iXnM7CC7okPMQ\niRklBxHvublbSaROadq0KYcPH451GCINmpKD1DuqOYh4z22z0inY+ZWC5xvgTS8CEqlKs2bNlBxE\nPOYmOUzDjnPIA8LnblBykJhQzUHEe26SwxlAb0qnzRCJKSUHEe+56XNYgp1XSaROUIe0iPfcNit9\nCnwPBH8jDXYqDRHfqeYg4j03yWEqcAOwhrJ9DiIxoQ5pEe+5aVb6AZiLXeRnU9jDjYuxU35/A9wb\n4Xg2sA9Y7jwedHldiWOqOYh4z03NYTnwGnaOpeBvpJtbWRsBzwK/BLZh+y7mAmvLnbcIuNxlvCJK\nDiI+cJMcmmOTwoXl9leVHPoD6ymtZcwCrqBicqjRdLISv9QhLeI9N8lhZA2vnQZsCdveir0tNpwB\nzgJWYmuvAoq0AAALAklEQVQXdwNf1vD9JE6o5iDiPTfJIR2YROniPv8Cbsd+2UfjZlzEMuf6B4FB\nwFvAiZFOzMnJCT3Pzs4mOzvbxeWlIVKHtEhkubm55Obm1sq13DTp/A8wE5jhbF/vPC6o4nUDgBxs\npzTAOOzdTn+O8pqNQD9gT7n9WglOQkpKSmjUqBElJSXBla5EJIJjWQnOzd1K7bBjHYqcx8tAexev\nWwqcgJ2TqSlwLbZDOlwHSgPv7zwvnxhEykhISKBx48YcPXo01qGINFhumpV2A8OxdywFgGHAjy5e\ndxS4FXgPe+fSVGxn9C3O8cnA1cBvnXMPOtcWqVKwU7pJkyaxDkWkQXJT3cgEnsE2EwF8AtwGbPYo\npkjUrCRlJCcns2HDBtq0aRPrUETqrGNpVnJTc0gDLiu372z8TQ4iZahTWsRbbvocnnW5T8Q3up1V\nxFvRag5nYscgtAPupLRqkoRWkJMYU3IQ8Va05NAUmwgaOf8G7cd2JIvEjEZJi3grWnJY5Dxexv1E\neyK+UM1BxFtuOqQPAo9jF/xJdPYZYKBXQYlURR3SIt5ykxxmArOBS7FjFEYCuzyMSaRKiYmJ3HLL\nLbRq1SrWocTcmDFjuPbaa2MdhjQwbu5/XQb8HFhF6epvS4HTvQoqAo1zkDI2btzI5s26m3rBggXs\n2rWLqVOnxjoUqYO8HucQrLt/j609bAeSa/JmIrWla9eudO3aNdZhxFxBQQGTJk2KdRjSALlJDn8C\nWgN3YUdKtwR+72VQIuJOWloa27dvj3UY0gDVlykt1awkEsGuXbvo2bMnu3fvjnUoUgd5PStruGU1\neRMR8UZKSgr5+fkUFhbGOhRpYNw0K4WrLzUNkbgQCARITU1l1qxZtG/vZib9hu2cc87RHWy1pKrk\n0AgYCzzlbL/jbTgiUl2jRo3ijTfeiHUYMbd9+3Z+8YtfMGXKlFiH0iC4qQksAX7hdSBVUJ+DiET1\n9ddfc/7557Np0yatEAg0btzY81tZP8LOwjobKAjbr/4HEakzTjzxRDIyMkhMTKz65AaupKSE+++/\n/5iu4Saj5GKnyyjv/GN65+pRzUFExKWdO3fSu3fv4F1sNao51Je6l5KDiEg1bNmyhYyMDPDwVtaO\n2PWf33W2ewG/rsmbiYiIP9LT04/p9W6Sw8vA+0AnZ/sbNEJaRKRBc5McUrCd0cXOdhFw1LOIREQk\n5twkh3ygbdj2AGCfN+GIiEhd4OZW1ruAeUA34BPsmtJaJlREpAFz24vdGDjJOf8rbNOSn3S3kohI\nNXk9CC4RGAOcgx3v8CHwV+BQTd5QRETqPjcZZQ6wH5jhnP8roBUw1MO4ylPNQUSkmo6l5uDmRV9i\nxzZUtc9LSg4iItXk9XoOy4Azw7YHAF/U5M1ERKR+cJNR1gEnAluwfQ4Z2E7po852X8+iK6Wag4hI\nNXndrJRZxfFNNXnjalJyEBGpJq+TQ12g5CAiUk1+riEtIiJxQMlBREQqUHIQEZEKlBxERKQCr5PD\nxdhbYb8B7q3knEnO8ZXAaR7HIyIiLniZHBoBz2ITRC/gOuDkcudcAvQATgBGY+dskihyc3NjHUKd\nobIopbIopbKoHV4mh/7Aeuw4iCJgFnBFuXMuB15xnn8GtAY6eBhTvaf/+KVUFqVUFqVUFrXDy+SQ\nhh1VHbTV2VfVOZ09jElERFzwMjm4HbVWfoCGRruJiMSYlyOkBwA52D4HgHFACfDnsHOeB3KxTU5g\nO6+zgJ3lrrUe6O5RnCIiDdUGbL9undIYG1gm0BRYQeQO6fnO8wHAYr+CExGR2BmEncF1PbbmAHCL\n8wh61jm+Evi5r9GJiIiIiEjD4GYQXUPyEra/ZXXYvjbAB8DXwPvY232DxmHLZh1woU8x+iUd+CeQ\nB6wBxjr747E8jsPe6r0Cuwrjo87+eCyLoEbAcmCesx2vZbEJWIUti8+dfQ2+LBphm5sygSZE7rNo\naM7FjhIPTw4TgXuc5/cCjznPe2HLpAm2jNbTsKZD6Qic6jxvgW2ePJn4LY/mzr+NsX1z5xC/ZQFw\nJzATmOtsx2tZbMQmg3ANvizOBN4N277PeTR0mZRNDusoHRjY0dkG+xdAeG3qXWynfkP1FvBLVB7N\ngSVAb+K3LDoD/wOcT2nNIV7LYiPQtty+WimLupw13AyiiwcdKL21dyelP/RO2DIJasjlk4mtUX1G\n/JZHAvavvp2UNrfFa1k8BfwH9tb4oHgtC4NNlEuBm519tVIWjWs1zNqlwXAVGaKXS0MssxbA34Hb\ngQPljsVTeZRgm9laAe9h/2oOFy9lcSnwA7aNPbuSc+KlLADOBnYA7bD9DOvKHa9xWdTlmsM2bKdk\nUDpls1682ImtGgKkYn8xoGL5dHb2NSRNsInhVWyzEsR3eQDsA94B+hGfZXEWdk62jcDrwEDs/494\nLAuwiQFgF/AP7Jx2Db4s3Ayia4gyqdghHWwnvI+KnUtNga7Ysqova4K7EQCmY5sQwsVjeaRQesdJ\nIvAv4N+Iz7IIl0Vpn0M8lkVzIMl5fjzwMfYOpLgoi0iD6Bqy14HtwBFsf8so7J0I/0Pk29Lux5bN\nOuAiXyP13jnYppQV2CaE5dhbm+OxPH4GLMOWxSpsezvEZ1mEy6L0bqV4LIuu2P8TK7C3ewe/I+Ox\nLERERERERERERERERERERERERERERET8VIIdBRvUGDsidF7YvkHYCenysGMCHnf25zivD19m9g5n\nX3BxqRbAZOz930uxcxf1jxDHO0BL7BQWv63ph6nEHdgBbuXfS0REKnEA+4V/nLM9CDsoLjgAqg/2\ni/1EZzuB0tUGc7CrDD4Qdr2PsYPJgslhFvCnsOOZ2CVsK5NJ2VHsbgSIPho10uyaIiISxQHgEeAq\nZ3s6dr76eWHbIyt57XjgYUoXQumO/av8n9jk0B34FnfTCGzCfoHPAg5iE9SfnWP/4bzHSmxCAptE\nvgJewY5gzQD+C1vDWRN23ljgMDZhLQx7r+A8/Xdik9Fq7ASEwWuvBaY413qP0uQ5FluDWokddS8i\n0iAdwE4hMQdohv1SDp9X5wvneCTjgbuAN7BrINwPjMAmh37YSdzedBlHcGGVLpStOVyIbZYCW2uZ\nh124KRMopmwTVbLzbyMnhj7lrl3+vfphk0Yidv6cNdjZWTOBIqCvc/5s4Hrn+TbspIWgpimpobo8\nK6tIuNXYL8TrsH/5V9ds57VDsLNXBtVk+ubytYwLncdybKI6CejhHPuO0loLwLXOOcuwyapXFe9z\nDjZ5FQIFzvNznbg3YhMHzjUzneergNewyaK4Oh9MJEjJQeqTudiO5tcp+wWdB5we5XUGeBu4Aftl\nfSBsfx5wCsf+u/AodkGi07B9H9Oc/QVh53TF1mIGOu/5DqVNQdFiD/+sAUoT2uGw/cWUrs8yGHgO\n22y2BFtLEakWJQepT17CttPnldv/n9jmohOc7fAO6WBHcCF2GuM/lXvtt9g7lB4O25dJ9A7pA5RO\nlQy2vf8mbLMP2NW12kV4XUtsstiPXZ1rULlrlm8CMsCH2NpOsFlpiLOvsj6SALZvIxc7XXOrsLhE\nXKvLK8GJBAX/Ut4GPBu2L7h/NfZW0Nexc9wbSvsjws+bXcn1/x14AnvHUyHwI3B3lDh2Y+94Wg3M\nxyadk4FPneMHsLWU8qtwrcQ2Pa3DTsn+UdixKdg1fbdh12oIWg68TGnT1AvOdTKp2CRmsLWEV7FJ\nIQD8BZuMRERERERERERERERERERERERERERERERERERERBqG/wPqeTb/1Bu2TAAAAABJRU5ErkJg\ngg==\n", "text": [ "" ] } ], "prompt_number": 6 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Interrupting the training stage, hotstart" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The MCMC chain's state is saved at every MCMC step; that includes the state of the pseudo-random number generator, the last f, the current log likelihood, the marginals so far etc. \n", "\n", "The MCMC chain can be interrupted between steps. However, there is no mechanism to prevent it from being stopped while it writes the state files to disk, which would cause the state to be lost. Interrupt the MCMC chain can be done thus:\n", "- by reaching n_samples, the number of samples we wanted to draw\n", "- by stopping the Python process\n", "- by passing to learn_predict_gpstruct_wrapper a parameter stop_check() which is evaluated at every iteration. In util.py, there is an example to stop the chain after some defined run time is over. One could also imagine checking for the existence of a flag file, and stopping the process if the file is created; in this way, a simple touch command would allow stopping the training cleanly.\n", "\n", "When restarting with the same results directory, the program will check for the existence of saved state files. If it finds them, it will restart from the last saved state and continue the chain. It is the user's responsibility to ensure that the saved state corresponds exactly to the configuration of the experiment that is restarted. For instance, the training and test data should match, and the various other parameters passed to learn_predict_gpstruct should match as well.\n", "\n", "For example, here we run the chain for 10 samples:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "n_data=10\n", "!rm -rf /tmp/pygpstruct_demo\n", "prepare_from_data_chain.learn_predict_gpstruct_wrapper(data_indices_train = np.arange(n_data), # training data= first 10 data files\n", " data_indices_test = np.arange(n_data, n_data*2), # test data= next 10 files\n", " result_prefix='/tmp/pygpstruct_demo/', # where to store the result files\n", " data_folder = pygpstruct_location + '/data/japanesene/',\n", " n_samples=10, # how many MCMC iterations\n", " task='japanesene',\n", " prediction_thinning=1\n", " )" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:41,150Z - INFO - learn_predict_gpstruct started with arguments: {'kernel': , 'console_log': True, 'random_seed': 0, 'prediction_verbosity': None, 'n_samples': 10, 'hp_sampling_thinning': 1, 'hp_sampling_mode': None, 'hp_debug': False, 'prior': 1, 'lhp_update': {}, 'prepare_from_data': at 0x7f3c8c794938>, 'stop_check': None, 'n_f_star': 0, 'prediction_thinning': 1, 'result_prefix': '/tmp/pygpstruct_demo/'}\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:41,154Z - INFO - prepare_from_data_chain started with arguments: {'data_folder': '/home/sb358/pygpstruct_demo/data/japanesene/', 'data_indices_train': array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), 'n_labels': 17, 'native_implementation': False, 'data_indices_test': array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19]), 'n_features_x': 102799, 'logger': }\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:41,258Z - DEBUG - prepare kernel matrices\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:41,270Z - DEBUG - start MCMC chain\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:41,351Z - INFO - ESS it 0 -- LL train | last f = -675.36 -- test set error | last f = 0.79149 -- LL test | last f = -602.05 -- test set error (marginalized over f's)= 0.79149 -- average per-atom negative log posterior marginals = 2.0468\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:41,458Z - INFO - ESS it 1 -- LL train | last f = -669.63 -- test set error | last f = 0.77447 -- LL test | last f = -596.72 -- test set error (marginalized over f's)= 0.78298 -- average per-atom negative log posterior marginals = 2.0255\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:41,602Z - INFO - ESS it 2 -- LL train | last f = -668.73 -- test set error | last f = 0.8 -- LL test | last f = -594.73 -- test set error (marginalized over f's)= 0.79149 -- average per-atom negative log posterior marginals = 2.0383\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:41,739Z - INFO - ESS it 3 -- LL train | last f = -666.17 -- test set error | last f = 0.81277 -- LL test | last f = -597.84 -- test set error (marginalized over f's)= 0.79574 -- average per-atom negative log posterior marginals = 2.0085\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:41,852Z - INFO - ESS it 4 -- LL train | last f = -653.86 -- test set error | last f = 0.78298 -- LL test | last f = -587.12 -- test set error (marginalized over f's)= 0.78723 -- average per-atom negative log posterior marginals = 2.017\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:41,968Z - INFO - ESS it 5 -- LL train | last f = -645.26 -- test set error | last f = 0.75745 -- LL test | last f = -577.59 -- test set error (marginalized over f's)= 0.79149 -- average per-atom negative log posterior marginals = 1.9915\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:42,046Z - INFO - ESS it 6 -- LL train | last f = -632.13 -- test set error | last f = 0.75319 -- LL test | last f = -566.05 -- test set error (marginalized over f's)= 0.78298 -- average per-atom negative log posterior marginals = 1.9574\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:42,167Z - INFO - ESS it 7 -- LL train | last f = -633.45 -- test set error | last f = 0.68936 -- LL test | last f = -522.1 -- test set error (marginalized over f's)= 0.73617 -- average per-atom negative log posterior marginals = 1.8979\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:42,236Z - INFO - ESS it 8 -- LL train | last f = -627.64 -- test set error | last f = 0.68511 -- LL test | last f = -512.06 -- test set error (marginalized over f's)= 0.7234 -- average per-atom negative log posterior marginals = 1.8383\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:42,380Z - INFO - ESS it 9 -- LL train | last f = -620.22 -- test set error | last f = 0.65532 -- LL test | last f = -500.42 -- test set error (marginalized over f's)= 0.70213 -- average per-atom negative log posterior marginals = 1.7915\n" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "... and now we can run the same chain for another 10 samples if we wish:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "n_data=10\n", "# !rm -rf /tmp/pygpstruct_demo # don't erase the results folder this time !\n", "prepare_from_data_chain.learn_predict_gpstruct_wrapper(data_indices_train = np.arange(n_data), # training data= first 10 data files\n", " data_indices_test = np.arange(n_data, n_data*2), # test data= next 10 files\n", " result_prefix='/tmp/pygpstruct_demo/', # where to store the result files\n", " data_folder = pygpstruct_location + '/data/japanesene/',\n", " n_samples=20, # how many MCMC iterations\n", " task='japanesene',\n", " prediction_thinning=1\n", " )\n", "!rm -rf /tmp/pygpstruct_demo # clean up afterwards however" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:42,441Z - INFO - learn_predict_gpstruct started with arguments: {'kernel': , 'console_log': True, 'random_seed': 0, 'prediction_verbosity': None, 'n_samples': 20, 'hp_sampling_thinning': 1, 'hp_sampling_mode': None, 'hp_debug': False, 'prior': 1, 'lhp_update': {}, 'prepare_from_data': at 0x7f3c8c7c2758>, 'stop_check': None, 'n_f_star': 0, 'prediction_thinning': 1, 'result_prefix': '/tmp/pygpstruct_demo/'}\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:42,443Z - INFO - prepare_from_data_chain started with arguments: {'data_folder': '/home/sb358/pygpstruct_demo/data/japanesene/', 'data_indices_train': array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), 'n_labels': 17, 'native_implementation': False, 'data_indices_test': array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19]), 'n_features_x': 102799, 'logger': }\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:42,537Z - DEBUG - prepare kernel matrices\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:42,549Z - DEBUG - start MCMC chain\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:42,612Z - INFO - hotstart from iteration 10, including stored random state\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:42,717Z - INFO - ESS it 10 -- LL train | last f = -620.63 -- test set error | last f = 0.64255 -- LL test | last f = -498.84 -- test set error (marginalized over f's)= 0.70638 -- average per-atom negative log posterior marginals = 1.766\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:42,854Z - INFO - ESS it 11 -- LL train | last f = -619.49 -- test set error | last f = 0.6383 -- LL test | last f = -494.85 -- test set error (marginalized over f's)= 0.68085 -- average per-atom negative log posterior marginals = 1.7191\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:42,958Z - INFO - ESS it 12 -- LL train | last f = -617.51 -- test set error | last f = 0.64681 -- LL test | last f = -491.99 -- test set error (marginalized over f's)= 0.68511 -- average per-atom negative log posterior marginals = 1.7064\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:43,091Z - INFO - ESS it 13 -- LL train | last f = -617.32 -- test set error | last f = 0.6383 -- LL test | last f = -492.88 -- test set error (marginalized over f's)= 0.6766 -- average per-atom negative log posterior marginals = 1.6766\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:43,170Z - INFO - ESS it 14 -- LL train | last f = -617.32 -- test set error | last f = 0.6383 -- LL test | last f = -492.89 -- test set error (marginalized over f's)= 0.65957 -- average per-atom negative log posterior marginals = 1.6426\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:43,263Z - INFO - ESS it 15 -- LL train | last f = -613.81 -- test set error | last f = 0.6383 -- LL test | last f = -487.01 -- test set error (marginalized over f's)= 0.65532 -- average per-atom negative log posterior marginals = 1.6383\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:43,386Z - INFO - ESS it 16 -- LL train | last f = -613.32 -- test set error | last f = 0.64255 -- LL test | last f = -486.03 -- test set error (marginalized over f's)= 0.65106 -- average per-atom negative log posterior marginals = 1.6255\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:43,531Z - INFO - ESS it 17 -- LL train | last f = -613.44 -- test set error | last f = 0.65957 -- LL test | last f = -488.65 -- test set error (marginalized over f's)= 0.65532 -- average per-atom negative log posterior marginals = 1.6\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:43,676Z - INFO - ESS it 18 -- LL train | last f = -611.24 -- test set error | last f = 0.6383 -- LL test | last f = -483.63 -- test set error (marginalized over f's)= 0.65532 -- average per-atom negative log posterior marginals = 1.6043\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:43,808Z - INFO - ESS it 19 -- LL train | last f = -610.76 -- test set error | last f = 0.64255 -- LL test | last f = -480.88 -- test set error (marginalized over f's)= 0.65532 -- average per-atom negative log posterior marginals = 1.5872\n" ] } ], "prompt_number": 8 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "A real run with more data" ] }, { "cell_type": "code", "collapsed": false, "input": [ "n_data=150\n", "!rm -rf /tmp/pygpstruct_demo_long_run\n", "prepare_from_data_chain.learn_predict_gpstruct_wrapper(data_indices_train = np.arange(n_data), # training data= first 10 data files\n", " data_indices_test = np.arange(n_data, n_data*2), # test data= next 10 files\n", " result_prefix='/tmp/pygpstruct_demo_long_run/', # where to store the result files\n", " data_folder = pygpstruct_location + '/data/basenp/',\n", " n_samples=1001, # how many MCMC iterations\n", " task='basenp',\n", " prediction_thinning=100,\n", " native_implementation=True\n", " )" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:44,093Z - INFO - learn_predict_gpstruct started with arguments: {'kernel': , 'console_log': True, 'random_seed': 0, 'prediction_verbosity': None, 'n_samples': 1001, 'hp_sampling_thinning': 1, 'hp_sampling_mode': None, 'hp_debug': False, 'prior': 1, 'lhp_update': {}, 'prepare_from_data': at 0x7f3c8c794140>, 'stop_check': None, 'n_f_star': 0, 'prediction_thinning': 100, 'result_prefix': '/tmp/pygpstruct_demo_long_run/'}\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:44,103Z - INFO - prepare_from_data_chain started with arguments: {'data_folder': '/home/sb358/pygpstruct_demo/data/basenp/', 'data_indices_train': array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,\n", " 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,\n", " 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,\n", " 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,\n", " 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,\n", " 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,\n", " 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,\n", " 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,\n", " 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,\n", " 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,\n", " 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,\n", " 143, 144, 145, 146, 147, 148, 149]), 'n_labels': 3, 'native_implementation': True, 'data_indices_test': array([150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,\n", " 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,\n", " 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,\n", " 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201,\n", " 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,\n", " 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,\n", " 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240,\n", " 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253,\n", " 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266,\n", " 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,\n", " 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,\n", " 293, 294, 295, 296, 297, 298, 299]), 'n_features_x': 6438, 'logger': }\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:45,524Z - DEBUG - prepare kernel matrices\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:58,021Z - DEBUG - start MCMC chain\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:07:58,345Z - INFO - ESS it 0 -- LL train | last f = -4015.8 -- test set error | last f = 0.70376 -- LL test | last f = -3924.2 -- test set error (marginalized over f's)= 0.70376 -- average per-atom negative log posterior marginals = 1\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:08:04,689Z - INFO - ESS it 100 -- LL train | last f = -2789.6 -- test set error | last f = 0.32623 -- LL test | last f = -2861.9 -- test set error (marginalized over f's)= 0.32707 -- average per-atom negative log posterior marginals = 0.30886\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:08:10,802Z - INFO - ESS it 200 -- LL train | last f = -2147.4 -- test set error | last f = 0.23935 -- LL test | last f = -2319.1 -- test set error (marginalized over f's)= 0.25084 -- average per-atom negative log posterior marginals = 0.34557\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:08:17,073Z - INFO - ESS it 300 -- LL train | last f = -1761.2 -- test set error | last f = 0.19451 -- LL test | last f = -1965.9 -- test set error (marginalized over f's)= 0.20768 -- average per-atom negative log posterior marginals = 0.26654\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:08:23,389Z - INFO - ESS it 400 -- LL train | last f = -1520.3 -- test set error | last f = 0.15387 -- LL test | last f = -1637.3 -- test set error (marginalized over f's)= 0.16788 -- average per-atom negative log posterior marginals = 0.22141\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:08:29,564Z - INFO - ESS it 500 -- LL train | last f = -1331.6 -- test set error | last f = 0.13229 -- LL test | last f = -1407.2 -- test set error (marginalized over f's)= 0.13649 -- average per-atom negative log posterior marginals = 0.20095\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:08:35,868Z - INFO - ESS it 600 -- LL train | last f = -1179.1 -- test set error | last f = 0.10706 -- LL test | last f = -1283.4 -- test set error (marginalized over f's)= 0.11996 -- average per-atom negative log posterior marginals = 0.17993\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:08:42,163Z - INFO - ESS it 700 -- LL train | last f = -1041.9 -- test set error | last f = 0.092209 -- LL test | last f = -1113.2 -- test set error (marginalized over f's)= 0.10678 -- average per-atom negative log posterior marginals = 0.16059\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:08:48,479Z - INFO - ESS it 800 -- LL train | last f = -954 -- test set error | last f = 0.085482 -- LL test | last f = -1062.7 -- test set error (marginalized over f's)= 0.091087 -- average per-atom negative log posterior marginals = 0.15863\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:08:54,752Z - INFO - ESS it 900 -- LL train | last f = -891.07 -- test set error | last f = 0.088004 -- LL test | last f = -1003.9 -- test set error (marginalized over f's)= 0.087444 -- average per-atom negative log posterior marginals = 0.14882\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2014-10-23 12:09:01,010Z - INFO - ESS it 1000 -- LL train | last f = -813.27 -- test set error | last f = 0.079877 -- LL test | last f = -980.94 -- test set error (marginalized over f's)= 0.081558 -- average per-atom negative log posterior marginals = 0.14546\n" ] } ], "prompt_number": 9 } ], "metadata": {} } ] }