{ "cells": [ { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline\n", "import tensorflow as tf\n", "import numpy as np\n", "import sys\n", "import os\n", "sys.path.insert(0, os.path.abspath(os.path.join(\"..\", \"..\", \"..\")))\n", "import pysgmcmc as pg" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Instantiating a Sampler\n", "\n", "To instantiate a sampler, we need two ingredients:\n", "\n", "1. Target parameters of the sampler: a list of `tensorflow.Variable` objects \n", "2. A cost function: callable that maps these target parameters to a 1-d `tensorflow.Tensor` representing their corresponding costs\n", "\n", "Note: In MCMC literature, the target parameters are often denoted as $\\theta$.\n", "Our cost function corresponds to the negative of the log likelihood. The log likelihood is frequently referred to as $U(\\theta)$ in literature, so our cost function corresponds to $-U(\\theta)$." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# target parameters\n", "parameters = [tf.Variable(0.), tf.Variable(0.)]\n", "\n", "# cost function\n", "def banana_nll(params):\n", " x, y = params\n", " return -1./2. * (x ** 2 / 100. + (y + 0.1 * x ** 2 -10) ** 2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Given these ingredients, we can instantiate any of our samplers within a `tensorflow.Session`:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from pysgmcmc.samplers.sghmc import SGHMCSampler\n", "\n", "session = tf.Session()\n", "\n", "sampler = SGHMCSampler(\n", " params=parameters, cost_fun=banana_nll, session=session, dtype=tf.float32\n", ")\n", "\n", "session.run(tf.global_variables_initializer()) # initialize variables\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Using data minibatches\n", "\n", "A major motivation to use Stochastic Gradient MCMC methods is that they leverage MCMC methods\n", "to large datasets by *subsampling* them. \n", "\n", "To this end, our samplers take an iterable *batch_generator* as input and use it to repeatedly subsample the dataset.\n", "\n", "We provide two simple default ways to generate batches, which can be found in module \n", "[pysgmcmc.data_batches](http://pysgmcmc.readthedocs.io/en/latest/api/data_batches.html). \n", "You can easily add your own custom batch generation facilities, e.g. by writing a (infinite) generator function that *yields* a dictionary mapping two placeholders for the data to batches of data (usually *np.array*s)." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from pysgmcmc.samplers.sghmc import SGHMCSampler\n", "from pysgmcmc.data_batches import generate_batches\n", "\n", "session = tf.Session()\n", "params = [tf.Variable(0., dtype=tf.float64)]\n", "\n", "def sinc(x):\n", " import numpy as np\n", " return np.sinc(x * 10 - 5).sum(axis=1)\n", "\n", "# XXX: Use cost function from BNN Negloglikelihood here?\n", "# Then, we can even show a batch and run a single iteration \n", "dummy_costs = lambda params: tf.reduce_sum(params) # dummy cost function; ignore this it is not used\n", "\n", "## Set up data ##\n", "rng, n_datapoints = np.random.RandomState(np.random.randint(0, 10000)), 100\n", "X = np.array([rng.uniform(0., 1., 1) for _ in range(n_datapoints)])\n", "y = sinc(X)\n", "\n", "x_placeholder, y_placeholder = tf.placeholder(dtype=tf.float64), tf.placeholder(dtype=tf.float64)\n", "\n", "## Batch Generator (uniform random subsampling) ##\n", "batch_generator = generate_batches(X, y, x_placeholder, y_placeholder, batch_size=20)\n", "\n", "batched_sampler = SGHMCSampler(\n", " params=params, cost_fun=dummy_costs, session=session,\n", " batch_generator=batch_generator # Pass the iterable into our sampler\n", ")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "All calls to \n", "```python \n", "next(batched_sampler)\n", "``` \n", "will use batches obtained by calling `next(batch_generator)`\n", "when computing the costs for the current iteration.\n", "\n", "Note: the cost function (`cost_fun`) passed to the sampler must use the placeholders passed to `generate_batches`.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Available samplers\n", "\n", "To get an overview of which samplers are available for use, examine our [documentation](http://pysgmcmc.readthedocs.io/en/latest/) or simply run:\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on package pysgmcmc.samplers in pysgmcmc:\n", "\n", "NAME\n", " pysgmcmc.samplers\n", "\n", "PACKAGE CONTENTS\n", " base_classes\n", " relativistic_sghmc\n", " sghmc\n", " sgld\n", " sgnuts\n", " svgd\n", "\n", "CLASSES\n", " pysgmcmc.samplers.base_classes.BurnInMCMCSampler(pysgmcmc.samplers.base_classes.MCMCSampler)\n", " pysgmcmc.samplers.sghmc.SGHMCSampler\n", " pysgmcmc.samplers.sgld.SGLDSampler\n", " pysgmcmc.samplers.base_classes.MCMCSampler(builtins.object)\n", " pysgmcmc.samplers.relativistic_sghmc.RelativisticSGHMCSampler\n", " pysgmcmc.samplers.svgd.SVGDSampler\n", " \n", " class RelativisticSGHMCSampler(pysgmcmc.samplers.base_classes.MCMCSampler)\n", " | Relativistic Stochastic Gradient Hamiltonian Monte-Carlo Sampler.\n", " | \n", " | See [1] for more details on Relativistic SGHMC.\n", " | \n", " | [1] X. Lu, V. Perrone, L. Hasenclever, Y. W. Teh, S. J. Vollmer\n", " | In Proceedings of the 20 th International Conference on Artificial Intelligence and Statistics (AISTATS) 2017\n", " | \n", " | `Relativistic Monte Carlo `_\n", " | \n", " | Method resolution order:\n", " | RelativisticSGHMCSampler\n", " | pysgmcmc.samplers.base_classes.MCMCSampler\n", " | builtins.object\n", " | \n", " | Methods defined here:\n", " | \n", " | __init__(self, params, cost_fun, batch_generator=None, stepsize_schedule=, mass=1.0, speed_of_light=1.0, D=1.0, Bhat=0.0, session=None, dtype=tf.float64, seed=None)\n", " | Initialize the sampler parameters and set up a tensorflow.Graph\n", " | for later queries.\n", " | \n", " | Parameters\n", " | ----------\n", " | params : list of tensorflow.Variable objects\n", " | Target parameters for which we want to sample new values.\n", " | \n", " | Cost : tensorflow.Tensor\n", " | 1-d Cost tensor that depends on `params`.\n", " | Frequently denoted as U(theta) in literature.\n", " | \n", " | batch_generator : BatchGenerator, optional\n", " | Iterable which returns dictionaries to feed into\n", " | tensorflow.Session.run() calls to evaluate the cost function.\n", " | Defaults to `None` which indicates that no batches shall be fed.\n", " | \n", " | stepsize_schedule : pysgmcmc.stepsize_schedules.StepsizeSchedule\n", " | Iterator class that produces a stream of stepsize values that\n", " | we can use in our samplers.\n", " | See also: `pysgmcmc.stepsize_schedules`\n", " | \n", " | mass : float, optional\n", " | mass constant.\n", " | Defaults to `1.0`.\n", " | \n", " | speed_of_light : float, optional\n", " | \"Speed of light\" constant. TODO EXTEND DOKU\n", " | Defaults to `1.0`.\n", " | \n", " | D : float, optional\n", " | Diffusion constant.\n", " | Defaults to `1.0`.\n", " | \n", " | Bhat : float, optional\n", " | TODO: Documentation\n", " | \n", " | session : tensorflow.Session, optional\n", " | Session object which knows about the external part of the graph\n", " | (which defines `Cost`, and possibly batches).\n", " | Used internally to evaluate (burn-in/sample) the sampler.\n", " | \n", " | dtype : tensorflow.DType, optional\n", " | Type of elements of `tensorflow.Tensor` objects used in this sampler.\n", " | Defaults to `tensorflow.float64`.\n", " | \n", " | seed : int, optional\n", " | Random seed to use.\n", " | Defaults to `None`.\n", " | \n", " | See Also\n", " | ----------\n", " | pysgmcmc.sampling.MCMCSampler:\n", " | Base class for `RelativisticSGHMCSampler` that specifies how\n", " | actual sampling is performed (using iterator protocol,\n", " | e.g. `next(sampler)`).\n", " | \n", " | ----------------------------------------------------------------------\n", " | Methods inherited from pysgmcmc.samplers.base_classes.MCMCSampler:\n", " | \n", " | __iter__(self)\n", " | Allows using samplers as iterators.\n", " | \n", " | Examples\n", " | ----------\n", " | Extract the first three thousand samples (with costs) from a sampler:\n", " | \n", " | >>> import tensorflow as tf\n", " | >>> import numpy as np\n", " | >>> from itertools import islice\n", " | >>> from pysgmcmc.samplers.sghmc import SGHMCSampler\n", " | >>> session = tf.Session()\n", " | >>> x = tf.Variable(1.0)\n", " | >>> dist = tf.contrib.distributions.Normal(loc=0., scale=1.)\n", " | >>> n_burn_in, n_samples = 1000, 2000\n", " | >>> sampler = SGHMCSampler(params=[x], burn_in_steps=n_burn_in, cost_fun=lambda x: -dist.log_prob(x), session=session, dtype=tf.float32)\n", " | >>> session.run(tf.global_variables_initializer())\n", " | >>> burn_in_samples = list(islice(sampler, n_burn_in)) # perform all burn_in steps\n", " | >>> samples = list(islice(sampler, n_samples))\n", " | >>> len(burn_in_samples), len(samples)\n", " | (1000, 2000)\n", " | >>> session.close()\n", " | >>> tf.reset_default_graph() # to avoid polluting test environment\n", " | \n", " | __next__(self, feed_dict=None)\n", " | Compute and return the next sample and\n", " | next cost values for this sampler.\n", " | \n", " | Returns\n", " | --------\n", " | sample: list of numpy.ndarray objects\n", " | Sampled values are a `numpy.ndarray` for each target parameter.\n", " | \n", " | cost: numpy.ndarray (1,)\n", " | Current cost value of the last evaluated target parameter values.\n", " | \n", " | Examples\n", " | --------\n", " | Extract the next sample (with costs) from a sampler:\n", " | \n", " | >>> import tensorflow as tf\n", " | >>> import numpy as np\n", " | >>> from itertools import islice\n", " | >>> from pysgmcmc.samplers.sghmc import SGHMCSampler\n", " | >>> session = tf.Session()\n", " | >>> x = tf.Variable(1.0)\n", " | >>> dist = tf.contrib.distributions.Normal(loc=0., scale=1.)\n", " | >>> n_burn_in = 1000\n", " | >>> sampler = SGHMCSampler(params=[x], burn_in_steps=n_burn_in, cost_fun=lambda x:-dist.log_prob(x), session=session, dtype=tf.float32)\n", " | >>> session.run(tf.global_variables_initializer())\n", " | >>> sample, cost = next(sampler)\n", " | >>> session.close()\n", " | >>> tf.reset_default_graph() # to avoid polluting test environment\n", " | \n", " | ----------------------------------------------------------------------\n", " | Data descriptors inherited from pysgmcmc.samplers.base_classes.MCMCSampler:\n", " | \n", " | __dict__\n", " | dictionary for instance variables (if defined)\n", " | \n", " | __weakref__\n", " | list of weak references to the object (if defined)\n", " | \n", " | ----------------------------------------------------------------------\n", " | Data and other attributes inherited from pysgmcmc.samplers.base_classes.MCMCSampler:\n", " | \n", " | __metaclass__ = \n", " | Metaclass for defining Abstract Base Classes (ABCs).\n", " | \n", " | Use this metaclass to create an ABC. An ABC can be subclassed\n", " | directly, and then acts as a mix-in class. You can also register\n", " | unrelated concrete classes (even built-in classes) and unrelated\n", " | ABCs as 'virtual subclasses' -- these and their descendants will\n", " | be considered subclasses of the registering ABC by the built-in\n", " | issubclass() function, but the registering ABC won't show up in\n", " | their MRO (Method Resolution Order) nor will method\n", " | implementations defined by the registering ABC be callable (not\n", " | even via super()).\n", " \n", " class SGHMCSampler(pysgmcmc.samplers.base_classes.BurnInMCMCSampler)\n", " | Stochastic Gradient Hamiltonian Monte-Carlo Sampler that uses a burn-in\n", " | procedure to adapt its own hyperparameters during the initial stages\n", " | of sampling.\n", " | \n", " | See [1] for more details on this burn-in procedure.\n", " | \n", " | See [2] for more details on Stochastic Gradient Hamiltonian Monte-Carlo.\n", " | \n", " | [1] J. T. Springenberg, A. Klein, S. Falkner, F. Hutter\n", " | In Advances in Neural Information Processing Systems 29 (2016).\n", " | \n", " | \n", " | `Bayesian Optimization with Robust Bayesian Neural Networks. `_\n", " | \n", " | \n", " | [2] T. Chen, E. B. Fox, C. Guestrin\n", " | In Proceedings of Machine Learning Research 32 (2014).\n", " | \n", " | `Stochastic Gradient Hamiltonian Monte Carlo `_\n", " | \n", " | Method resolution order:\n", " | SGHMCSampler\n", " | pysgmcmc.samplers.base_classes.BurnInMCMCSampler\n", " | pysgmcmc.samplers.base_classes.MCMCSampler\n", " | builtins.object\n", " | \n", " | Methods defined here:\n", " | \n", " | __init__(self, params, cost_fun, batch_generator=None, stepsize_schedule=, burn_in_steps=3000, mdecay=0.05, scale_grad=1.0, session=None, dtype=tf.float64, seed=None)\n", " | Initialize the sampler parameters and set up a tensorflow.Graph\n", " | for later queries.\n", " | \n", " | Parameters\n", " | ----------\n", " | params : list of tensorflow.Variable objects\n", " | Target parameters for which we want to sample new values.\n", " | \n", " | cost_fun : callable\n", " | Function that takes `params` as input and returns a\n", " | 1-d `tensorflow.Tensor` that contains the cost-value.\n", " | Frequently denoted with `U` in literature.\n", " | \n", " | batch_generator : iterable, optional\n", " | Iterable which returns dictionaries to feed into\n", " | tensorflow.Session.run() calls to evaluate the cost function.\n", " | Defaults to `None` which indicates that no batches shall be fed.\n", " | \n", " | stepsize_schedule : pysgmcmc.stepsize_schedules.StepsizeSchedule\n", " | Iterator class that produces a stream of stepsize values that\n", " | we can use in our samplers.\n", " | See also: `pysgmcmc.stepsize_schedules`\n", " | \n", " | burn_in_steps : int, optional\n", " | Number of burn-in steps to perform. In each burn-in step, this\n", " | sampler will adapt its own internal parameters to decrease its error.\n", " | Defaults to `3000`.\n", " | \n", " | For reference see:\n", " | `Bayesian Optimization with Robust Bayesian Neural Networks. `_\n", " | \n", " | mdecay : float, optional\n", " | (Constant) momentum decay per time-step.\n", " | Defaults to `0.05`.\n", " | \n", " | For reference see:\n", " | `Bayesian Optimization with Robust Bayesian Neural Networks. `_\n", " | \n", " | scale_grad : float, optional\n", " | Value that is used to scale the magnitude of the noise used\n", " | during sampling. In a typical batches-of-data setting this usually\n", " | corresponds to the number of examples in the entire dataset.\n", " | Defaults to `1.0` which corresponds to no scaling.\n", " | \n", " | session : tensorflow.Session, optional\n", " | Session object which knows about the external part of the graph\n", " | (which defines `Cost`, and possibly batches).\n", " | Used internally to evaluate (burn-in/sample) the sampler.\n", " | \n", " | dtype : tensorflow.DType, optional\n", " | Type of elements of `tensorflow.Tensor` objects used in this sampler.\n", " | Defaults to `tensorflow.float64`.\n", " | \n", " | seed : int, optional\n", " | Random seed to use.\n", " | Defaults to `None`.\n", " | \n", " | See Also\n", " | ----------\n", " | pysgmcmc.sampling.BurnInMCMCSampler:\n", " | Base class for `SGHMCSampler` that specifies how actual sampling\n", " | is performed (using iterator protocol, e.g. `next(sampler)`).\n", " | \n", " | ----------------------------------------------------------------------\n", " | Methods inherited from pysgmcmc.samplers.base_classes.BurnInMCMCSampler:\n", " | \n", " | __next__(self, feed_dict=None)\n", " | Perform a sampler step:\n", " | Compute and return the next sample and next cost values\n", " | for this sampler.\n", " | \n", " | While `self.is_burning_in` returns `True`\n", " | (while the sampler has not yet performed `self.burn_in_steps`\n", " | steps) this will also adapt the samplers mass matrix in a\n", " | sampler-specific way to improve performance.\n", " | \n", " | Returns\n", " | -------\n", " | sample: list of numpy.ndarray objects\n", " | Sampled values are a `numpy.ndarray` for each target parameter.\n", " | \n", " | cost: numpy.ndarray (1,)\n", " | Current cost value of the last evaluated target parameter values.\n", " | \n", " | ----------------------------------------------------------------------\n", " | Data descriptors inherited from pysgmcmc.samplers.base_classes.BurnInMCMCSampler:\n", " | \n", " | is_burning_in\n", " | Check if this sampler is still in burn-in phase.\n", " | Used during graph construction to insert conditionals into the\n", " | graph that will make the sampler skip all burn-in operations\n", " | after the burn-in phase is over.\n", " | \n", " | Returns\n", " | -------\n", " | is_burning_in: boolean\n", " | `True` if `self.n_iterations <= self.burn_in_steps`, otherwise `False`.\n", " | \n", " | ----------------------------------------------------------------------\n", " | Data and other attributes inherited from pysgmcmc.samplers.base_classes.BurnInMCMCSampler:\n", " | \n", " | __metaclass__ = \n", " | Metaclass for defining Abstract Base Classes (ABCs).\n", " | \n", " | Use this metaclass to create an ABC. An ABC can be subclassed\n", " | directly, and then acts as a mix-in class. You can also register\n", " | unrelated concrete classes (even built-in classes) and unrelated\n", " | ABCs as 'virtual subclasses' -- these and their descendants will\n", " | be considered subclasses of the registering ABC by the built-in\n", " | issubclass() function, but the registering ABC won't show up in\n", " | their MRO (Method Resolution Order) nor will method\n", " | implementations defined by the registering ABC be callable (not\n", " | even via super()).\n", " | \n", " | ----------------------------------------------------------------------\n", " | Methods inherited from pysgmcmc.samplers.base_classes.MCMCSampler:\n", " | \n", " | __iter__(self)\n", " | Allows using samplers as iterators.\n", " | \n", " | Examples\n", " | ----------\n", " | Extract the first three thousand samples (with costs) from a sampler:\n", " | \n", " | >>> import tensorflow as tf\n", " | >>> import numpy as np\n", " | >>> from itertools import islice\n", " | >>> from pysgmcmc.samplers.sghmc import SGHMCSampler\n", " | >>> session = tf.Session()\n", " | >>> x = tf.Variable(1.0)\n", " | >>> dist = tf.contrib.distributions.Normal(loc=0., scale=1.)\n", " | >>> n_burn_in, n_samples = 1000, 2000\n", " | >>> sampler = SGHMCSampler(params=[x], burn_in_steps=n_burn_in, cost_fun=lambda x: -dist.log_prob(x), session=session, dtype=tf.float32)\n", " | >>> session.run(tf.global_variables_initializer())\n", " | >>> burn_in_samples = list(islice(sampler, n_burn_in)) # perform all burn_in steps\n", " | >>> samples = list(islice(sampler, n_samples))\n", " | >>> len(burn_in_samples), len(samples)\n", " | (1000, 2000)\n", " | >>> session.close()\n", " | >>> tf.reset_default_graph() # to avoid polluting test environment\n", " | \n", " | ----------------------------------------------------------------------\n", " | Data descriptors inherited from pysgmcmc.samplers.base_classes.MCMCSampler:\n", " | \n", " | __dict__\n", " | dictionary for instance variables (if defined)\n", " | \n", " | __weakref__\n", " | list of weak references to the object (if defined)\n", " \n", " class SGLDSampler(pysgmcmc.samplers.base_classes.BurnInMCMCSampler)\n", " | Stochastic Gradient Langevin Dynamics Sampler that uses a burn-in\n", " | procedure to adapt its own hyperparameters during the initial stages\n", " | of sampling.\n", " | \n", " | See [1] for more details on this burn-in procedure.\n", " | See [2] for more details on Stochastic Gradient Langevin Dynamics.\n", " | \n", " | [1] J. T. Springenberg, A. Klein, S. Falkner, F. Hutter\n", " | In Advances in Neural Information Processing Systems 29 (2016).\n", " | \n", " | `Bayesian Optimization with Robust Bayesian Neural Networks. `_\n", " | \n", " | [2] M.Welling, Y. W. Teh\n", " | In International Conference on Machine Learning (ICML) 28 (2011).\n", " | \n", " | `Bayesian Learning via Stochastic Gradient Langevin Dynamics. `_\n", " | \n", " | Method resolution order:\n", " | SGLDSampler\n", " | pysgmcmc.samplers.base_classes.BurnInMCMCSampler\n", " | pysgmcmc.samplers.base_classes.MCMCSampler\n", " | builtins.object\n", " | \n", " | Methods defined here:\n", " | \n", " | __init__(self, params, cost_fun, batch_generator=None, stepsize_schedule=, burn_in_steps=3000, A=1.0, scale_grad=1.0, session=None, dtype=tf.float64, seed=None)\n", " | Initialize the sampler parameters and set up a tensorflow.Graph\n", " | for later queries.\n", " | \n", " | Parameters\n", " | ----------\n", " | params : list of tensorflow.Variable objects\n", " | Target parameters for which we want to sample new values.\n", " | \n", " | cost_fun : callable\n", " | Function that takes `params` as input and returns a\n", " | 1-d `tensorflow.Tensor` that contains the cost-value.\n", " | Frequently denoted with `U` in literature.\n", " | \n", " | batch_generator : BatchGenerator, optional\n", " | Iterable which returns dictionaries to feed into\n", " | tensorflow.Session.run() calls to evaluate the cost function.\n", " | Defaults to `None` which indicates that no batches shall be fed.\n", " | \n", " | stepsize_schedule : pysgmcmc.stepsize_schedules.StepsizeSchedule\n", " | Iterator class that produces a stream of stepsize values that\n", " | we can use in our samplers.\n", " | See also: `pysgmcmc.stepsize_schedules`\n", " | \n", " | burn_in_steps: int, optional\n", " | Number of burn-in steps to perform. In each burn-in step, this\n", " | sampler will adapt its own internal parameters to decrease its error.\n", " | Defaults to `3000`.\n", " | \n", " | For reference see:\n", " | `Bayesian Optimization with Robust Bayesian Neural Networks. `_\n", " | \n", " | A : float, optional\n", " | TODO Doku\n", " | Defaults to `1.0`.\n", " | \n", " | scale_grad : float, optional\n", " | Value that is used to scale the magnitude of the noise used\n", " | during sampling. In a typical batches-of-data setting this usually\n", " | corresponds to the number of examples in the entire dataset.\n", " | \n", " | session : tensorflow.Session, optional\n", " | Session object which knows about the external part of the graph\n", " | (which defines `Cost`, and possibly batches).\n", " | Used internally to evaluate (burn-in/sample) the sampler.\n", " | \n", " | dtype : tensorflow.DType, optional\n", " | Type of elements of `tensorflow.Tensor` objects used in this sampler.\n", " | Defaults to `tensorflow.float64`.\n", " | \n", " | seed : int, optional\n", " | Random seed to use.\n", " | Defaults to `None`.\n", " | \n", " | See Also\n", " | ----------\n", " | tensorflow_mcmc.sampling.mcmc_base_classes.BurnInMCMCSampler:\n", " | Base class for `SGLDSampler` that specifies how actual sampling\n", " | is performed (using iterator protocol, e.g. `next(sampler)`).\n", " | \n", " | ----------------------------------------------------------------------\n", " | Methods inherited from pysgmcmc.samplers.base_classes.BurnInMCMCSampler:\n", " | \n", " | __next__(self, feed_dict=None)\n", " | Perform a sampler step:\n", " | Compute and return the next sample and next cost values\n", " | for this sampler.\n", " | \n", " | While `self.is_burning_in` returns `True`\n", " | (while the sampler has not yet performed `self.burn_in_steps`\n", " | steps) this will also adapt the samplers mass matrix in a\n", " | sampler-specific way to improve performance.\n", " | \n", " | Returns\n", " | -------\n", " | sample: list of numpy.ndarray objects\n", " | Sampled values are a `numpy.ndarray` for each target parameter.\n", " | \n", " | cost: numpy.ndarray (1,)\n", " | Current cost value of the last evaluated target parameter values.\n", " | \n", " | ----------------------------------------------------------------------\n", " | Data descriptors inherited from pysgmcmc.samplers.base_classes.BurnInMCMCSampler:\n", " | \n", " | is_burning_in\n", " | Check if this sampler is still in burn-in phase.\n", " | Used during graph construction to insert conditionals into the\n", " | graph that will make the sampler skip all burn-in operations\n", " | after the burn-in phase is over.\n", " | \n", " | Returns\n", " | -------\n", " | is_burning_in: boolean\n", " | `True` if `self.n_iterations <= self.burn_in_steps`, otherwise `False`.\n", " | \n", " | ----------------------------------------------------------------------\n", " | Data and other attributes inherited from pysgmcmc.samplers.base_classes.BurnInMCMCSampler:\n", " | \n", " | __metaclass__ = \n", " | Metaclass for defining Abstract Base Classes (ABCs).\n", " | \n", " | Use this metaclass to create an ABC. An ABC can be subclassed\n", " | directly, and then acts as a mix-in class. You can also register\n", " | unrelated concrete classes (even built-in classes) and unrelated\n", " | ABCs as 'virtual subclasses' -- these and their descendants will\n", " | be considered subclasses of the registering ABC by the built-in\n", " | issubclass() function, but the registering ABC won't show up in\n", " | their MRO (Method Resolution Order) nor will method\n", " | implementations defined by the registering ABC be callable (not\n", " | even via super()).\n", " | \n", " | ----------------------------------------------------------------------\n", " | Methods inherited from pysgmcmc.samplers.base_classes.MCMCSampler:\n", " | \n", " | __iter__(self)\n", " | Allows using samplers as iterators.\n", " | \n", " | Examples\n", " | ----------\n", " | Extract the first three thousand samples (with costs) from a sampler:\n", " | \n", " | >>> import tensorflow as tf\n", " | >>> import numpy as np\n", " | >>> from itertools import islice\n", " | >>> from pysgmcmc.samplers.sghmc import SGHMCSampler\n", " | >>> session = tf.Session()\n", " | >>> x = tf.Variable(1.0)\n", " | >>> dist = tf.contrib.distributions.Normal(loc=0., scale=1.)\n", " | >>> n_burn_in, n_samples = 1000, 2000\n", " | >>> sampler = SGHMCSampler(params=[x], burn_in_steps=n_burn_in, cost_fun=lambda x: -dist.log_prob(x), session=session, dtype=tf.float32)\n", " | >>> session.run(tf.global_variables_initializer())\n", " | >>> burn_in_samples = list(islice(sampler, n_burn_in)) # perform all burn_in steps\n", " | >>> samples = list(islice(sampler, n_samples))\n", " | >>> len(burn_in_samples), len(samples)\n", " | (1000, 2000)\n", " | >>> session.close()\n", " | >>> tf.reset_default_graph() # to avoid polluting test environment\n", " | \n", " | ----------------------------------------------------------------------\n", " | Data descriptors inherited from pysgmcmc.samplers.base_classes.MCMCSampler:\n", " | \n", " | __dict__\n", " | dictionary for instance variables (if defined)\n", " | \n", " | __weakref__\n", " | list of weak references to the object (if defined)\n", " \n", " class SVGDSampler(pysgmcmc.samplers.base_classes.MCMCSampler)\n", " | Stein Variational Gradient Descent Sampler.\n", " | \n", " | See [1] for more details on stein variational gradient descent.\n", " | \n", " | \n", " | [1] Q. Liu, D. Wang\n", " | In Advances in Neural Information Processing Systems 29 (2016).\n", " | \n", " | `Stein Variational Gradient Descent: A General Purpose Bayesian Inference Algorithm. `_\n", " | \n", " | Method resolution order:\n", " | SVGDSampler\n", " | pysgmcmc.samplers.base_classes.MCMCSampler\n", " | builtins.object\n", " | \n", " | Methods defined here:\n", " | \n", " | __init__(self, particles, cost_fun, batch_generator=None, stepsize_schedule=, alpha=0.9, fudge_factor=1e-06, session=None, dtype=tf.float64, seed=None)\n", " | Initialize the sampler parameters and set up a tensorflow.Graph\n", " | for later queries.\n", " | \n", " | Parameters\n", " | ----------\n", " | particles : List[tensorflow.Variable]\n", " | List of particles each representing a (different) guess of the\n", " | target parameters of this sampler.\n", " | \n", " | cost_fun : callable\n", " | Function that takes `params` of *one* particle as input and\n", " | returns a 1-d `tensorflow.Tensor` that contains the cost-value.\n", " | Frequently denoted with `U` in literature.\n", " | \n", " | batch_generator : iterable, optional\n", " | Iterable which returns dictionaries to feed into\n", " | tensorflow.Session.run() calls to evaluate the cost function.\n", " | Defaults to `None` which indicates that no batches shall be fed.\n", " | \n", " | stepsize_schedule : pysgmcmc.stepsize_schedules.StepsizeSchedule\n", " | Iterator class that produces a stream of stepsize values that\n", " | we can use in our samplers.\n", " | See also: `pysgmcmc.stepsize_schedules`\n", " | \n", " | alpha : float, optional\n", " | TODO DOKU\n", " | Defaults to `0.9`.\n", " | \n", " | fudge_factor : float, optional\n", " | TODO DOKU\n", " | Defaults to `1e-6`.\n", " | \n", " | session : tensorflow.Session, optional\n", " | Session object which knows about the external part of the graph\n", " | (which defines `Cost`, and possibly batches).\n", " | Used internally to evaluate (burn-in/sample) the sampler.\n", " | \n", " | dtype : tensorflow.DType, optional\n", " | Type of elements of `tensorflow.Tensor` objects used in this sampler.\n", " | Defaults to `tensorflow.float64`.\n", " | \n", " | seed : int, optional\n", " | Random seed to use.\n", " | Defaults to `None`.\n", " | \n", " | See Also\n", " | ----------\n", " | pysgmcmc.sampling.MCMCSampler:\n", " | Base class for `SteinVariationalGradientDescentSampler` that\n", " | specifies how actual sampling is performed (using iterator protocol,\n", " | e.g. `next(sampler)`).\n", " | \n", " | svgd_kernel(self, particles)\n", " | Calculate a kernel matrix with corresponding derivatives\n", " | for the given `particles`.\n", " | TODO: DOKU ON KERNEL TRICK\n", " | \n", " | Parameters\n", " | ----------\n", " | particles : TODO\n", " | \n", " | Returns\n", " | ----------\n", " | kernel_matrix : tf.Tensor\n", " | TODO\n", " | \n", " | kernel_gradients : tf.Tensor\n", " | TODO\n", " | \n", " | ----------------------------------------------------------------------\n", " | Methods inherited from pysgmcmc.samplers.base_classes.MCMCSampler:\n", " | \n", " | __iter__(self)\n", " | Allows using samplers as iterators.\n", " | \n", " | Examples\n", " | ----------\n", " | Extract the first three thousand samples (with costs) from a sampler:\n", " | \n", " | >>> import tensorflow as tf\n", " | >>> import numpy as np\n", " | >>> from itertools import islice\n", " | >>> from pysgmcmc.samplers.sghmc import SGHMCSampler\n", " | >>> session = tf.Session()\n", " | >>> x = tf.Variable(1.0)\n", " | >>> dist = tf.contrib.distributions.Normal(loc=0., scale=1.)\n", " | >>> n_burn_in, n_samples = 1000, 2000\n", " | >>> sampler = SGHMCSampler(params=[x], burn_in_steps=n_burn_in, cost_fun=lambda x: -dist.log_prob(x), session=session, dtype=tf.float32)\n", " | >>> session.run(tf.global_variables_initializer())\n", " | >>> burn_in_samples = list(islice(sampler, n_burn_in)) # perform all burn_in steps\n", " | >>> samples = list(islice(sampler, n_samples))\n", " | >>> len(burn_in_samples), len(samples)\n", " | (1000, 2000)\n", " | >>> session.close()\n", " | >>> tf.reset_default_graph() # to avoid polluting test environment\n", " | \n", " | __next__(self, feed_dict=None)\n", " | Compute and return the next sample and\n", " | next cost values for this sampler.\n", " | \n", " | Returns\n", " | --------\n", " | sample: list of numpy.ndarray objects\n", " | Sampled values are a `numpy.ndarray` for each target parameter.\n", " | \n", " | cost: numpy.ndarray (1,)\n", " | Current cost value of the last evaluated target parameter values.\n", " | \n", " | Examples\n", " | --------\n", " | Extract the next sample (with costs) from a sampler:\n", " | \n", " | >>> import tensorflow as tf\n", " | >>> import numpy as np\n", " | >>> from itertools import islice\n", " | >>> from pysgmcmc.samplers.sghmc import SGHMCSampler\n", " | >>> session = tf.Session()\n", " | >>> x = tf.Variable(1.0)\n", " | >>> dist = tf.contrib.distributions.Normal(loc=0., scale=1.)\n", " | >>> n_burn_in = 1000\n", " | >>> sampler = SGHMCSampler(params=[x], burn_in_steps=n_burn_in, cost_fun=lambda x:-dist.log_prob(x), session=session, dtype=tf.float32)\n", " | >>> session.run(tf.global_variables_initializer())\n", " | >>> sample, cost = next(sampler)\n", " | >>> session.close()\n", " | >>> tf.reset_default_graph() # to avoid polluting test environment\n", " | \n", " | ----------------------------------------------------------------------\n", " | Data descriptors inherited from pysgmcmc.samplers.base_classes.MCMCSampler:\n", " | \n", " | __dict__\n", " | dictionary for instance variables (if defined)\n", " | \n", " | __weakref__\n", " | list of weak references to the object (if defined)\n", " | \n", " | ----------------------------------------------------------------------\n", " | Data and other attributes inherited from pysgmcmc.samplers.base_classes.MCMCSampler:\n", " | \n", " | __metaclass__ = \n", " | Metaclass for defining Abstract Base Classes (ABCs).\n", " | \n", " | Use this metaclass to create an ABC. An ABC can be subclassed\n", " | directly, and then acts as a mix-in class. You can also register\n", " | unrelated concrete classes (even built-in classes) and unrelated\n", " | ABCs as 'virtual subclasses' -- these and their descendants will\n", " | be considered subclasses of the registering ABC by the built-in\n", " | issubclass() function, but the registering ABC won't show up in\n", " | their MRO (Method Resolution Order) nor will method\n", " | implementations defined by the registering ABC be callable (not\n", " | even via super()).\n", "\n", "DATA\n", " __all__ = ['SGHMCSampler', 'RelativisticSGHMCSampler', 'SGLDSampler', ...\n", "\n", "FILE\n", " /mhome/freidanm/repos/pysgmcmc/pysgmcmc/samplers/__init__.py\n", "\n", "\n" ] } ], "source": [ "help(pg.samplers)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Sampler hyperparameters\n", "\n", "To get a clearer picture of all possible design choices when instantiating any of \n", "our samplers, consider our docstrings:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on class SGHMCSampler in module pysgmcmc.samplers.sghmc:\n", "\n", "class SGHMCSampler(pysgmcmc.samplers.base_classes.BurnInMCMCSampler)\n", " | Stochastic Gradient Hamiltonian Monte-Carlo Sampler that uses a burn-in\n", " | procedure to adapt its own hyperparameters during the initial stages\n", " | of sampling.\n", " | \n", " | See [1] for more details on this burn-in procedure.\n", " | \n", " | See [2] for more details on Stochastic Gradient Hamiltonian Monte-Carlo.\n", " | \n", " | [1] J. T. Springenberg, A. Klein, S. Falkner, F. Hutter\n", " | In Advances in Neural Information Processing Systems 29 (2016).\n", " | \n", " | \n", " | `Bayesian Optimization with Robust Bayesian Neural Networks. `_\n", " | \n", " | \n", " | [2] T. Chen, E. B. Fox, C. Guestrin\n", " | In Proceedings of Machine Learning Research 32 (2014).\n", " | \n", " | `Stochastic Gradient Hamiltonian Monte Carlo `_\n", " | \n", " | Method resolution order:\n", " | SGHMCSampler\n", " | pysgmcmc.samplers.base_classes.BurnInMCMCSampler\n", " | pysgmcmc.samplers.base_classes.MCMCSampler\n", " | builtins.object\n", " | \n", " | Methods defined here:\n", " | \n", " | __init__(self, params, cost_fun, batch_generator=None, stepsize_schedule=, burn_in_steps=3000, mdecay=0.05, scale_grad=1.0, session=None, dtype=tf.float64, seed=None)\n", " | Initialize the sampler parameters and set up a tensorflow.Graph\n", " | for later queries.\n", " | \n", " | Parameters\n", " | ----------\n", " | params : list of tensorflow.Variable objects\n", " | Target parameters for which we want to sample new values.\n", " | \n", " | cost_fun : callable\n", " | Function that takes `params` as input and returns a\n", " | 1-d `tensorflow.Tensor` that contains the cost-value.\n", " | Frequently denoted with `U` in literature.\n", " | \n", " | batch_generator : iterable, optional\n", " | Iterable which returns dictionaries to feed into\n", " | tensorflow.Session.run() calls to evaluate the cost function.\n", " | Defaults to `None` which indicates that no batches shall be fed.\n", " | \n", " | stepsize_schedule : pysgmcmc.stepsize_schedules.StepsizeSchedule\n", " | Iterator class that produces a stream of stepsize values that\n", " | we can use in our samplers.\n", " | See also: `pysgmcmc.stepsize_schedules`\n", " | \n", " | burn_in_steps : int, optional\n", " | Number of burn-in steps to perform. In each burn-in step, this\n", " | sampler will adapt its own internal parameters to decrease its error.\n", " | Defaults to `3000`.\n", " | \n", " | For reference see:\n", " | `Bayesian Optimization with Robust Bayesian Neural Networks. `_\n", " | \n", " | mdecay : float, optional\n", " | (Constant) momentum decay per time-step.\n", " | Defaults to `0.05`.\n", " | \n", " | For reference see:\n", " | `Bayesian Optimization with Robust Bayesian Neural Networks. `_\n", " | \n", " | scale_grad : float, optional\n", " | Value that is used to scale the magnitude of the noise used\n", " | during sampling. In a typical batches-of-data setting this usually\n", " | corresponds to the number of examples in the entire dataset.\n", " | Defaults to `1.0` which corresponds to no scaling.\n", " | \n", " | session : tensorflow.Session, optional\n", " | Session object which knows about the external part of the graph\n", " | (which defines `Cost`, and possibly batches).\n", " | Used internally to evaluate (burn-in/sample) the sampler.\n", " | \n", " | dtype : tensorflow.DType, optional\n", " | Type of elements of `tensorflow.Tensor` objects used in this sampler.\n", " | Defaults to `tensorflow.float64`.\n", " | \n", " | seed : int, optional\n", " | Random seed to use.\n", " | Defaults to `None`.\n", " | \n", " | See Also\n", " | ----------\n", " | pysgmcmc.sampling.BurnInMCMCSampler:\n", " | Base class for `SGHMCSampler` that specifies how actual sampling\n", " | is performed (using iterator protocol, e.g. `next(sampler)`).\n", " | \n", " | ----------------------------------------------------------------------\n", " | Methods inherited from pysgmcmc.samplers.base_classes.BurnInMCMCSampler:\n", " | \n", " | __next__(self, feed_dict=None)\n", " | Perform a sampler step:\n", " | Compute and return the next sample and next cost values\n", " | for this sampler.\n", " | \n", " | While `self.is_burning_in` returns `True`\n", " | (while the sampler has not yet performed `self.burn_in_steps`\n", " | steps) this will also adapt the samplers mass matrix in a\n", " | sampler-specific way to improve performance.\n", " | \n", " | Returns\n", " | -------\n", " | sample: list of numpy.ndarray objects\n", " | Sampled values are a `numpy.ndarray` for each target parameter.\n", " | \n", " | cost: numpy.ndarray (1,)\n", " | Current cost value of the last evaluated target parameter values.\n", " | \n", " | ----------------------------------------------------------------------\n", " | Data descriptors inherited from pysgmcmc.samplers.base_classes.BurnInMCMCSampler:\n", " | \n", " | is_burning_in\n", " | Check if this sampler is still in burn-in phase.\n", " | Used during graph construction to insert conditionals into the\n", " | graph that will make the sampler skip all burn-in operations\n", " | after the burn-in phase is over.\n", " | \n", " | Returns\n", " | -------\n", " | is_burning_in: boolean\n", " | `True` if `self.n_iterations <= self.burn_in_steps`, otherwise `False`.\n", " | \n", " | ----------------------------------------------------------------------\n", " | Data and other attributes inherited from pysgmcmc.samplers.base_classes.BurnInMCMCSampler:\n", " | \n", " | __metaclass__ = \n", " | Metaclass for defining Abstract Base Classes (ABCs).\n", " | \n", " | Use this metaclass to create an ABC. An ABC can be subclassed\n", " | directly, and then acts as a mix-in class. You can also register\n", " | unrelated concrete classes (even built-in classes) and unrelated\n", " | ABCs as 'virtual subclasses' -- these and their descendants will\n", " | be considered subclasses of the registering ABC by the built-in\n", " | issubclass() function, but the registering ABC won't show up in\n", " | their MRO (Method Resolution Order) nor will method\n", " | implementations defined by the registering ABC be callable (not\n", " | even via super()).\n", " | \n", " | ----------------------------------------------------------------------\n", " | Methods inherited from pysgmcmc.samplers.base_classes.MCMCSampler:\n", " | \n", " | __iter__(self)\n", " | Allows using samplers as iterators.\n", " | \n", " | Examples\n", " | ----------\n", " | Extract the first three thousand samples (with costs) from a sampler:\n", " | \n", " | >>> import tensorflow as tf\n", " | >>> import numpy as np\n", " | >>> from itertools import islice\n", " | >>> from pysgmcmc.samplers.sghmc import SGHMCSampler\n", " | >>> session = tf.Session()\n", " | >>> x = tf.Variable(1.0)\n", " | >>> dist = tf.contrib.distributions.Normal(loc=0., scale=1.)\n", " | >>> n_burn_in, n_samples = 1000, 2000\n", " | >>> sampler = SGHMCSampler(params=[x], burn_in_steps=n_burn_in, cost_fun=lambda x: -dist.log_prob(x), session=session, dtype=tf.float32)\n", " | >>> session.run(tf.global_variables_initializer())\n", " | >>> burn_in_samples = list(islice(sampler, n_burn_in)) # perform all burn_in steps\n", " | >>> samples = list(islice(sampler, n_samples))\n", " | >>> len(burn_in_samples), len(samples)\n", " | (1000, 2000)\n", " | >>> session.close()\n", " | >>> tf.reset_default_graph() # to avoid polluting test environment\n", " | \n", " | ----------------------------------------------------------------------\n", " | Data descriptors inherited from pysgmcmc.samplers.base_classes.MCMCSampler:\n", " | \n", " | __dict__\n", " | dictionary for instance variables (if defined)\n", " | \n", " | __weakref__\n", " | list of weak references to the object (if defined)\n", "\n" ] } ], "source": [ "help(pg.samplers.SGHMCSampler)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Extracting samples\n", "\n", "Extracting the next sample (with corresponding costs) from any of our samplers always simply amounts to:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "([-0.0037382236, 0.0019394364], -50.0)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sample, cost = next(sampler)\n", "\n", "sample, cost" ] }, { "cell_type": "markdown", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "This interface allows us to extract samples in different contexts:\n", "\n", "1. extract a chain of n subsequent samples\n", "2. sample until an external event occurs / an external condition becomes `true`" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 1. extract a chain of n subsequent samples\n", "samples, n = [], 1000\n", "\n", "\n", "for _ in range(n):\n", " sample, _ = next(sampler)\n", " samples.append(sample)\n", "\n", "# shorthand for 1., using itertools.islice\n", "import itertools\n", "samples = [sample for sample, _ in itertools.islice(sampler, n)]\n", " \n", "# 2. sample until an external event occurs\n", "\n", "# dummy event\n", "def external_event():\n", " return np.random.randint(0, 10) > 5\n", "\n", "samples = []\n", "while not external_event():\n", " sample, _ = next(sampler)\n", " samples.append(sample)\n", " \n", " \n", "samples" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This interface also allows us to use any of our samplers in (infinite) for-loops. \n", "\n", "But *be warned*: such a for-loop will **not terminate** unless you explicitly break out of it:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "samples, i = [], 0\n", "for sample, cost in sampler:\n", " if i > 10:\n", " break # we need to explicitly *break* out of the loop\n", " i += 1\n", " samples.append(sample)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Analyzing chains/traces of samples\n", "\n", "To analyze the results of a sampler run, pysgmcmc provides facilities to transform the results obtained by our samplers into `pymc3.MultiTrace` objects. Then we can use the (well-established) `pymc3` machinery to compute diagnostics for our samples:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Effective Sample Sizes:\n", "{'x:0': 6.0, 'y:0': 3.0}\n" ] } ], "source": [ "import pymc3\n", "\n", "from pysgmcmc.stepsize_schedules import ConstantStepsizeSchedule\n", "from pysgmcmc.samplers.relativistic_sghmc import RelativisticSGHMCSampler\n", "from pysgmcmc.diagnostics.sample_chains import PYSGMCMCTrace\n", "from pysgmcmc.diagnostics.objective_functions import (\n", " banana_log_likelihood,\n", " to_negative_log_likelihood\n", ")\n", "\n", "\n", "banana_nll = to_negative_log_likelihood(banana_log_likelihood)\n", "\n", "def get_sampler(session):\n", " params = [\n", " tf.Variable(0., dtype=tf.float32, name=\"x\"),\n", " tf.Variable(6., dtype=tf.float32, name=\"y\")\n", " ]\n", " sampler = RelativisticSGHMCSampler(\n", " stepsize_schedule=ConstantStepsizeSchedule(0.1),\n", " params=params,\n", " cost_fun=banana_nll,\n", " session=session,\n", " dtype=tf.float32\n", " )\n", " session.run(tf.global_variables_initializer())\n", " return sampler\n", "\n", "n_chains = 2\n", "n_samples_per_chain, keep_every = 10000, 10\n", "\n", "single_traces = []\n", "\n", "for chain_id in range(n_chains):\n", " graph = tf.Graph()\n", " with tf.Session(graph=graph) as session:\n", " sampler = get_sampler(session=session)\n", " session.run(tf.global_variables_initializer())\n", " trace = PYSGMCMCTrace.from_sampler(\n", " chain_id=chain_id,\n", " sampler=sampler,\n", " n_samples=n_samples_per_chain,\n", " keep_every=keep_every,\n", " )\n", " \n", " single_traces.append(trace)\n", "multitrace = pymc3.backends.base.MultiTrace(single_traces)\n", "\n", "# Compute effective sample sizes (ess) using pymc3:\n", "from pymc3.diagnostics import effective_n as effective_sample_sizes\n", "ess = effective_sample_sizes(multitrace)\n", "\n", "print(\"Effective Sample Sizes:\")\n", "print(ess)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For convenience we also provide a shortcut function that can be used to directly compute a multitrace for one of our samplers:" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on function pymc3_multitrace in module pysgmcmc.diagnostics.sample_chains:\n", "\n", "pymc3_multitrace(get_sampler, n_chains=2, samples_per_chain=100, keep_every=10, parameter_names=None)\n", " Extract chains from `sampler` and return them as `pymc3.MultiTrace` object.\n", " \n", " Parameters\n", " ----------\n", " get_sampler : callable\n", " A callable that takes a `tensorflow.Session` object as input\n", " and returns a (possibly already burnt-in) instance of a\n", " `pysgmcmc.sampling.MCMCSampler` subclass.\n", " \n", " parameter_names : List[String] or NoneType, optional\n", " List of names for each target parameter of the sampler.\n", " Defaults to `None`, which attempts to look the parameter names up\n", " from the target parameters of the sampler returned by `get_sampler`.\n", " \n", " Returns\n", " ----------\n", " multitrace : pymc3.backends.base.MultiTrace\n", " TODO: DOKU\n", " \n", " Examples\n", " ----------\n", " TODO ADD EXAMPLE\n", "\n" ] } ], "source": [ "help(pg.diagnostics.sample_chains.pymc3_multitrace)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also rely on pymc3 plotting facilities to visualize several properties of our chains. Below we show some plots that demonstrate what is possible:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([,\n", " ], dtype=object)" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\noR3BlNeU8/ttv2fT5b9neMw8vB8+R9HT84l4EiwhMsSVUtw77V6mZU3jtpduY1vhNh6/9vHu17Fo\naJCq2mvWhKZhhv6kRmv9u/5uRDjJSMhg49mNVNdXc8pxiqiIKBx1jmYGVl2jyL+H2oMFTRPr1LhU\n6hrruq0g2JKBZlx1heRk8Wa0dd/1h7t3oK8h1oG/Tld3qKiQkIAS8SZaY62crzlPbWNtlwpKp8Wl\nsa1wG2NSxwS2Bff/5oLNTM+a3swbGhMj5/SvXU33R7udgOcKaGVgnatwMC1DIi7ynflsOLOZmFS4\ncdpskpKajt0bUlJEiCQmRtbFps61MyKzKV4zJ83Gm3s2kXQ0gdsmfwqNDizsNXobO81NLCqSod0v\ndlFW1hQhv2ZN18sJHCo7RF1jHcVVxSTHJAfyJ+OjzGJeV3C7JUoM5PLv7VxHa82KIyuYP2x+wKhy\n1DmYmhUi1bZO6NTA8iX1epVSVq1164Dsi4Rdu+CJJ6Qwb7jQWvPM7mf43eILes7QK2bnzOatT7/F\nucpzvHTgJf7nw/9hZ9FOcpJzmDRkEnnJeeRZ88hLziM7KZusxCwyEzN7terKf/93k3RkPzBtmoRk\n/sd/yCrbt74FX/5yzx0wWotE8r59siq4das8HA4JdZk7F77+UATz//kstq9/jnnHl8Iv32g1izjt\nOM2vPv4Vz+99nlsvuZUN924QmeiviqjJ/ffD++9L3l5X8+46Y1rWNLbdv43b/3U7N714Ey/c9kL3\nJnyvvSad2DJ2xTAY+VAp9VNgBc1DBMMi0+5T072fppyv//LlY4WNCEsEjd5GVhyRyrwTh0zEXmtH\na82L+19kZMpIRthGkJGQEZaagf48rKPlR9ldvJvJGZNDqlQ4GPDnB7V1Dxsxos26xs3xJzZ1R+jC\n4wnI+S1OXkxsZCyFrkKKqooorS7l8rzOY8ZHpYxi+7ntbYZE1XvqOWU/xdDEoa1KwVitmvKzkdxz\n2WIaayTcz5rRVDLAUedgbOpYABKiE7A7Gxk20c2+XTFU1ldSUy3529WeHnjt2iHal3rr/y3qVAWp\ncTMD72ckpWC1FuOsbOS9U+9RVl1GTnIOXu2lqLKIublz281p9xeS9g9vt90mYroVFSI65a/Z1Rla\naxq9jQC8f+p9cpJzKHQVkhSTxJJxS7p9zhcjpUHZtGVl8v/VG4qrioGmgtmHzx+mqr6KpOi+cWB0\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAy8AAAEgCAYAAAC95EzMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAG+9JREFUeJzt3Xu0ZGdZJ+DfSxoGkQRFFBZyiYKXNAoxYEBkJlGUS3QF\nUHQcHVDUGTWkDQR1VC5pHRyRBQRCNC4RUFwqoDiCIxiQiywZCUHudLiIBiUICMNVEdLNO3/Ubqh0\nurpPd51T1d85z7NWra7Lrvq+s7v2ru+tb/92VXcHAADgRHeDdXcAAABgIxQvAADAEBQvAADAEBQv\nAADAEBQvAADAEBQvAADAEBQvAABwBFV1VlX907r7geIFAIAdqKqurqp/q6pPVNX7q+rZVXWTIzzl\nuH4csapuX1Wfqyrj7k1gJcJgquqCqnrrdLlg7v6Lqup9VfWG6XK/6f57VtWbq+p1VXWH6b6bVdXl\nR2hjV1U9oareVVWvr6rXVNV9l+jz7avqrdP1u1bVU+f6fOGRlj+GNj65gWUuqKobH8vrHo/pA/B7\ntrodAJbSSb6ru09JcnqSb0ryC1vQTk1t1Ra89o6jeIGBVNWdkvxYkrtltqP97qr66rlFntLdZ0yX\nv5jue1SS+yV5RJKfmu57TJJfOUJTj09yyyS7u/tuSR6Y5OTD9OdY9iGdJN39t939iI0uf6yvfxSP\nSHKkb9WuxzdlANtaJUl3fyjJ5Zl9ti5ctqourKoPVtU1VfUjcw+cM31x+PGqem9VXTT3vL+a/v3Y\nNMtz983+I3YSH8owltOSXNHdn+nuA5ntEOe/4T/ctzqfTXLTJF+c5LNTsXOb7n714Rqoqi9K8uNJ\nzu/u/UnS3f/S3X88Pf7JqnpSVb0xyT2q6oyqelVVXVlVL6mqW07L3bWq3jQt9/C51z+rqv5srsnT\nq+r/VtU7q+rHD9OfG1TVE6vqiun1/tuRVtD0+q+sqj+qqquq6vem+/ckuXWSV1bVy6f77jO1/fqq\net7BwwWq6h+mmafXJ/nZqrpi7vVvX1Vvma4/durXW6rqNxf05wlV9bap7088Ut8BWI+quk2S+yd5\n9xEWu1VmX+TdOrPPyV+vqptNj30qyUO6+2ZJvivJT1bVudNj/2n695TuPqW7rwjHTfECY3lbkv9Y\nVV86DbTPSXLbuccfPg2Sf3tuh/qEJM9J8vNJLs1sxuUxR2jjjkne293/uuDxL07yN939TUlel+Tp\n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\nfa/W1Vdfve4u7Cje36tlfe8s6/j/Xtd7zN86ZruKF1bC+l4t63u1Tj311HV3YUfx/l4t63tnMaDf\nfm1ut3Z3bPECAMB1mUneGEX9xmzF+0nxArAkH2LAdqF42Rj7/Y3ZivfTSk+VXFVO3QcAbIrudrrk\nwzDeYjtYtH2v+ndeAAAAjovDxgAAgCEoXgAAgCHsqOKlqn65qt5cVW+sqr+oqlvNPXZJVb27qt5U\nVaevs5/bRVU9saqumtbpC6rqlLnHfmFa31dV1X3W2c/toqoeXFVvq6oDVXXGIY9Z31ugqu5XVe+o\nqndV1f9Yd3+2m6p6ZlV9sKreMnffl1bVS6vqnVV1eVXdbJ193E6q6jZV9YqqentVvbWqfnq63zrf\nZg63bR1mmU0dFx2tzar6wWmM9uaq+uuq+sZl29xIu3PLfXNVXVtV37Oqdqvq7GlM+raqeuVWt1lV\np1TVi6b/07dW1Y9sQpuH3W8cZrlNez/tqOIlyRO7+y7d/U1J/jzJRUlSVeckuUN3f02Sn0jym2vs\n43by0iR36u7Tk7w7yS8kSVXtTvL9SU5Lcv8kv1FVQpfLe2uSByX5q/k7q+q0WN+brqpukOTSJPdN\ncqck/6Wqvn69vdp2np3Z+p3380n+sru/LskrMu1X2BT7k1zY3XdK8i1JHj69p63z7edw29bnVdX9\ns/njoiO2meTvk/yn7r5LkscnecYmtLmRdg/uz5+Q5PJNavOo7U5fAvx6ku/u7m9I8n1b3WaShyd5\n+zQu+7YkT66qXUu2uWi/8Xmb/X7aUcVLd39q7uYXJ/ncdP3cJM+Zlrkiyc2q6pYr7t62091/2d0H\n1/Frk9xmun5ukud29/7uvjqzwubMNXRxW+nud3b3u5McWpg8INb3Vjgzybu7+73dfW2S52a2rtkk\n3f3XST56yN0PSPK70/XfTfLAlXZqG+vuD3T3m6brn0pyVWb7bet8m1mwbc17QDZ5XHS0Nrv7td39\n8enma5N85TLtbbTdyZ4kf5zkQ5vR5gbb/cEkL+jua6blP7yCNjvJydP1k5N8pLv3L9nm4fYbh/7f\nber7aUcVL0lSVY+vqn/M7E3zuOnur0zyT3OLXZNN2mj4vB9N8uLpuvW9Wtb31jh0vb4v1usqfEV3\nfzCZfWgm+Yo192dbqqpTk5ye2SDyltb5jrPuz40fT/KSVTRUVbdO8sDuvizX//JvK31tkptX1Sur\n6sqqesgK2rw0ye6qen+SNye5YDNffG6/ccUhD23q+2nZqaITTlW9LMl8NVeZVZqP7u4/6+7HJHnM\ndHz6niR7V9/L7eNo63ta5tFJru3uP1xDF7eVjaxv2GGc73+TVdVNM/sW+oLu/tRhfjPEOmfLVNW3\nJXlYknutqMmnJpnPLK6qgNmV5Iwk357Z0UB/U1V/091/t4Vt3jfJG7v726vqDkleVlV3PuTIpONy\n6H5j2dc7km1XvHT3d25w0T/ILPeyN7MK8LZzj91muo+jONr6nsJg52S2cR5kfR+nY3h/z7O+t8Y1\nSW43d9t6XY0PVtUtu/uDNTvpyqYd5kEyHf/+x0l+r7tfON1tne88a/ncqKo7J/mtJPfr7qMd6rVZ\n7pbkuVMW9BZJ7l9V13b3i7a43fcl+XB3/3uSf6+qVye5S5KtLF4eluRXk6S731NV/5Dk65O8fpkX\nXbDfmLep76cdddhYVd1x7uYDk7xjuv6iJA+dlrlHko8dnCLn+FXV/ZL8bJJzu/szcw+9KMkPVNWN\nquqrktwxyevW0cdtbP6bI+t7a1yZ5I5VdfuqulGSH8hsXbO5Ktd/P//IdP2Hkxzug5Lj96wk+7r7\naXP3Wefb06Hb1rytGhctbLOqbpfkBUke0t3v2YS2NtRud3/1dPmqzAbg521i4XKkdfzCJPeqqpOq\n6iZJ7p5ZXmQr23xvku9Ikilz8rWZnShhWYfbb8zb1PfTtpt5OYonVNXXZhbUf2+Sn0yS7n5xVZ1T\nVX+X5F8zq0xZ3tOT3CizackkeW13n9fd+6rq+Un2Jbk2sx2FwxCWVFUPzGyd3yLJ/6mqN3X3/a3v\nrdHdB6rq/MzOqneDJM/s7s344GFSVX+Q5OwkXzZlFS/K7IxAf1RVP5rZfvz719fD7aWqvjXJDyV5\na1W9MbPDw34xya8leb51vn0s2LZulKS7+7e2Ylx0tDaTPDbJzfOFM2Je291Ln1xmA+3O27TPxg2s\n43dU1eVJ3pLkQJLf6u59W9lmZmdx+525Uyn/XHf/vyXbXLTfuH226P1UxjAAAMAIdtRhYwAAwLgU\nLwAAwBAULwAAwBAULwAAwBAULwAAwBAULwAAwBAULwAAwBAULwAAwBD+P7j1qJzt7XPhAAAAAElF\nTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1gAAACsCAYAAABmdA06AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl4FFXa9/Hv6UDYMQu7EAVkWAKyCAoqSwgEFNAZdFwQ\nVGBU3NBnREcFBFRknUdHwF02QX1UHBEHiOiAIAojorzKpogkICIwLIomIMl5/6hO6E46SSfpTnc6\nv8911QU5fbr6PpVO3XWqTp0y1lpERERERESk9FyhDkBERERERCRSqIMlIiIiIiISIOpgiYiIiIiI\nBIg6WCIiIiIiIgGiDpaIiIiIiEiAqIMlIiIiIiISIOpgiYiIiIiIBIg6WCJlzBgTbYyZa4w5bozZ\nb4z5n1DHJCIikkN5SqR0KoU6AJEKaBLQHGgCNAJWG2O2WmvfD21YIiIigPKUSKnoCpZIABhjmhlj\n/muM6eD+uZEx5qAxpoeP6jcCj1prf7bW7gBeBG4uw3BFRKSCMcaMMca8lafsaWPMkz6qK0+JlII6\nWCIBYK3dDTwALDLGVAPmAfOstWuNMX8zxrwLYIyJARoC/8/j7VuAxLKOWUREKpRFQD9jTG0AY0wU\ncC2wUHlKJLA0RFAkQKy1LxtjBgEbgWxgnLt8mke1moAFjnuUHQdqlVWcIiJS8VhrDxhj1gJ/Bl4G\nLgMOWWu/AL7wqKo8JVJKuoIlElgv4Zzlm2Wt/d3H6yfc/9b2KKsN/BLswEREpMJbCAx1//8G4BUf\ndZSnREpJHSyRADHG1ACewjkzONE9zMKLtfYY8CPQ3qO4PbC1TIIUEZGK7B3gfGNMIjAQWJy3gvKU\nSOmpgyUSOE8D/7HW3gosB54voN4rwDhjTIwxphVwC849WyIiIkFjrT0JLAFeBTZaa/cVUFV5SqQU\n1MESCQBjzBVACnCHu+ivQEdjzPXGmIeMMf/yqD4B2A2kAauBadbaVWUasIiIVFQLgHY4wwUBUJ4S\nCSxjrQ11DCIiIiJSBowxTYDtQANr7Ymi6otI8ekKloiIiEgFYIxxAfcBr6tzJRI8mqZdREREJMIZ\nY6oDPwHf40zRLiJBoiGCIiIiIiIiAVIWV7DUgxMRkRwm1AEUQLlKREQgAHlK92CJiIiIiIgEiDpY\nIiIiIiIiAaIOloiIiIiISICogyUiIiIiIhIg6mCJiIiIiIgEiDpYIiIiIiIiAaIOloiIiIhIBZOZ\nGdh6ckZZPGhYzxYREZEceg6WiEiYMH7skYPfVQg7eg5WRVOcswg64yAiIiIiUrZ0Basc8udsA1TI\nMw4iEv50BUtEJEzoCpZPuoIlIiIiIiISLtTBEhERERERCRB1sERKaPPmzVx22WU0btyYatWq0bBh\nQwYMGMCGDRv8ev/Jkye5//77adSoEdWrV+fiiy9m3bp1Puvu37+fESNG0LBhQ6pWrUqzZs0YO3as\nV53hw4fTpk0bzjrrLGrVqkWHDh2YPXs22dnZpW6riIiIeDt27Bh/+ctfqFu3LjVr1qRv3758/fXX\nfr333HPPxeVyeS1RUVG8++67XvUWLlzI1VdfnVt/xIgR+daVnZ3NzJkzSU5OpkGDBtSuXZsLLriA\nuXPnUga3AokPlUIdgEh5dezYMVq0aMHw4cNp2LAhBw8e5H//93/p2bMn69evp3PnzoW+f8SIEaxY\nsYKZM2fStGlTZs+eTb9+/diwYQPnn39+br20tDQuueQSmjVrxqxZs6hfvz579uxh165dXus7efIk\no0ePpnnz5hhjSE1N5Z577uG7777jySefDMo2EBERqagGDhxIeno6c+bMISYmhieeeIKkpCS2bNlC\no0aNCn2vMYb+/fszceJEr/KWLVt6/bxo0SIOHz5MSkoKb775ps91ZWRkMHnyZG6++Wbuvfdeatas\nyfLly7nlllvYuXMn06ZNK1U7pfg0yUU5pEkuwteJEyeoU6cOt912G//4xz8KrLdlyxY6duzI/Pnz\nufHGGwHIysoiMTGRVq1a8c477+TW7d+/P8eOHeOTTz7B5SreRechQ4bwr3/9i+PHj5esQSKBp0ku\nRKTcW7p0KYMHD2b16tX06NEDgJ9//pmmTZsybNgwnnrqqULf37RpU7p3787ChQv9/swmTZrQt29f\n5s6d61WenZ3Nzz//TExMjFf5yJEjee211zh69ChVqlTxuU5NcuGTJrko7yJxKvWJEyficrnYuXMn\n/fv3p2bNmpxzzjnMnz8fgFdeeYXWrVtTq1Ytevfuze7du73e/8ILL9ChQweqVatG3bp1+ctf/sLR\no0e96syZM4eLL76Y+Ph4YmNj6datG8uXL/eqk5aWhsvl4oUXXmDChAk0atSI2NhYrrjiCn744Yeg\ntL169epUqVKFSpUKvzj87rvvEh0dzTXXXJNbFhUVxXXXXUdqaiq///47ALt37+b9999n9OjRxe5c\nAcTFxRUZi4iISKBUlGOAZcuW0ahRo9zOFUDt2rUZNGgQS5cuLfX6i8PlcuXrXAF06dKFkydPcvjw\n4TKNR9TBCrmqVZ2zB/4u5YFxB3rNNdcwcOBAli5dSufOnRkxYgRjx47l+eefZ/r06cyfP5+dO3dy\nww035L73wQcf5K677iIlJYVly5Yxc+ZMVq5cyeWXX+41jjgtLY1bbrmFt956izfeeIMuXbowaNAg\n3n///XzxTJ06le+++4558+bx9NNP8+mnnzJs2DCvOtZasrKyilx8sdZy+vRp0tPTueuuuzDGcMst\ntxS6jbZt20bTpk2pWrWqV3liYiKnTp3KHf63fv16jDFUqVKFlJQUqlatSlxcHDfddBNHjhzxue6s\nrCyOHz/OkiVLWLhwIffdd1+hsYiIiARKRTkG2Lp1K23bts33eYmJiaSnp/Pbb78Vua2WLVtGjRo1\nqFq1Kt26dQt4x2zNmjXExMTQsGHDgK5X/GCtDfYiRXAuvvq3FKd+qEycONG6XC67aNGi3LKjR4/a\nSpUq2Tp16tgTJ07klj/99NPW5XLZ9PR0u2fPHhsVFWUff/xxr/V98skn1hhjly5d6vPzsrOz7enT\np21KSor94x//mFu+Z88ea4yxvXv39qo/c+ZM63K57I8//phbdvPNN1tjTKGLy+WyCxYsyPf5V199\ndW6dBg0a2PXr1xe5jVJSUmy3bt3ylX/wwQfW5XLZjz/+2Fpr7dSpU60xxp511ln2rrvusqtXr7Yv\nvviijY+Pt126dMn3/vfeey83lqioKDt27NgiYxEpY2WRd5SrREKkohwD/OEPf7DXX399vnheeukl\n63K57L59+wrdTqNHj7avvPKK/fjjj+2SJUtsUlKSNcbYxYsXF/iexo0b2+HDhxe63hwrV660LpfL\nTpkypdB64Xw8GUKlzikaOyRB079//9z/x8TEUK9ePTp16kSNGjVyy1u1agXA3r172bZtG9ZahgwZ\n4nWmqEuXLtSqVYu1a9dyxRVXAPD5558zYcIENm3axKFDh3LPbOWsz9Nll13m9XO7du0ASE9Pp0GD\nBgBMmjSJu+++u8g2NW3aNF/ZjBkzePDBB9m7dy9z5sxhwIABfPjhh3Tq1KnI9RUlZwbApKQkZs2a\nBUCvXr2oXbs2119/PampqfTr1y+3fo8ePdi0aRPHjx/nww8/ZMaMGQA8/vjjpY5FRETEXxXlGKCk\n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\ndAVLRERERCSM+TtCSiOjwoOuYImIiIiIiASIOlgiIiIiIiIBog6WiIiIiIhIgKiDJSWmh96KiIiI\niHhTB0tKLOeGS38WPRtMyiudHBARkWBQfolcmkVQRKQQeqCyiIgEg/JL5NIVLBERERERkQBRB8sP\nuoQrFYG+5yIiIiKlpyGCftAlXKkIivM9B33XRURERHzRFSwREREREZEAUQdLREREREQkQNTBEhEp\nJ/TsORERkfCne7BEREIkM7N4z4jT/aAiIiLhTx0sEZEQ0cQiIiIikUdDBEVERERERAJEHSwRERER\nEZEAUQdLyoRuuBcRERGRikD3YEmZ0L0mIiIiIlIR6AqWiARdca9g6oqniIhIeNAjQopPV7BEJOh0\nBVNERKR80iNCiq9CXsFS71pERERERIKhQl7B0tl0EREREREJhgp5BUtERERERCQY1MESEREREREJ\nEHWwREREREREAkQdLBERERERkQBRB0tERERERCRA1MGSiLB69WqgO1AdiAduBA7mqZUGuHC5XDhf\n/ZwlCvjZo14GMNK9nvN44403fHzidKAjkO1nhL2AHgW89pI7jnSPsuF5YqwH9CQ1NTXPez3rRLvr\n9QAe59ChQ37GJiIi5d3q1avp3r071atXJz4+nhtvvJGDB73zYFpaGi6XK98SFRXFzz+fyYMZGRmM\nHDmS+Ph4zjvPdx6cPn06HTt2JDvbvzzYq1cvevTwnQdfeuklXC4X6eln8uDw4cO9YqxXrx49e+bP\ng551oqOjqVevHj169ODxx5UHJXTUwZIIsI5+/foBccDbwNPAWqAP8Hu+2mPHjgU2eCyfArU8akwB\nPgQWAiMYNmwY8J3H6/uAycBz+P8nVNhzAUwBr9cDNrpjfAmAyy+/HFidp94Id521wDygJzCLxMRE\nd7mIiESydeucPBgXF8fbb7/N008/zdq1a+nTpw+//+47D27YsCF3+fTTT6lV60wenDJlCh9++CEL\nFy5kxAgnD3733Zk8uG/fPiZPnsxzzz3nPmlZNFPI83GMMT5fr1evHhs3bmTDhg289NKZPOicVD1j\nxIgRbNiwgbVr1zJv3jx69uzJrFlOHtywQXlQyl6FfA6WRJpJnHvuuXz77T850+FpBXQBXgZGedVu\n2rQpcGEh61sJ3AUMAAbQvPkitm//AGjufv1e4FrgooC1wLdonDbkSKJ27QSOHfsHkORR3gjv9gwA\n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\nRK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from pymc3.plots import (\n", " traceplot, autocorrplot, forestplot, plot_posterior\n", ")\n", "\n", "from pysgmcmc.diagnostics.sample_chains import pymc3_multitrace\n", "\n", "\n", "multitrace = pymc3_multitrace(get_sampler, n_chains=3, samples_per_chain=10000)\n", "traceplot(multitrace)\n", "autocorrplot(multitrace)\n", "forestplot(multitrace)\n", "plot_posterior(multitrace)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4. PYSGMCMC - trained BNN\n", "\n", "We also provide an implementation of a Bayesian Neural Network that is trained using our samplers. \n", "\n", "The (tensorflow-) architecture of this BNN can be customized by the user and any of our sampling methods can be used to sample networks during training.\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import tensorflow as tf\n", "from pysgmcmc.diagnostics.objective_functions import sinc\n", "from pysgmcmc.models.bayesian_neural_network import BayesianNeuralNetwork\n", "from pysgmcmc.sampling import Sampler\n", "from pysgmcmc.stepsize_schedules import ConstantStepsizeSchedule\n", "\n", "\n", "## Set up data ##\n", "rng, n_datapoints = np.random.RandomState(np.random.randint(0, 10000)), 100\n", "X_train = np.array([rng.uniform(0., 1., 1) for _ in range(n_datapoints)])\n", "y_train = sinc(X_train)\n", "\n", "X_test = np.linspace(0, 1, 100)[:, None]\n", "y_test = sinc(X_test)\n", "\n", "g = tf.Graph()\n", "\n", "session = tf.InteractiveSession(graph=g)\n", "with g.as_default():\n", " model = BayesianNeuralNetwork(\n", " session=session, batch_size=20, sampling_method=Sampler.SGHMC,\n", " burn_in_steps=3000, n_iters=50000, \n", " normalize_input=True, normalize_output=True,\n", " stepsize_schedule=ConstantStepsizeSchedule(np.sqrt(1e-4)),\n", " dtype=tf.float32,\n", " # sampler arguments for SGHMC\n", " mdecay=0.05, \n", " )\n", " model.train(X_train, y_train)\n", " prediction_mean, prediction_variance = model.predict(X_test)\n", "\n", "prediction_std = np.sqrt(prediction_variance)\n", "\n", "plt.grid()\n", "\n", "plt.plot(X_test[:, 0], y_test, label=\"true\", color=\"black\")\n", "plt.plot(X_train[:, 0], y_train, \"ro\")\n", "\n", "plt.plot(X_test[:, 0], prediction_mean, label=\"SGHMC\", color=\"blue\")\n", "plt.fill_between(X_test[:, 0], prediction_mean + prediction_std, prediction_mean - prediction_std, alpha=0.2, color=\"blue\")\n", "\n", "plt.legend()\n", "plt.show()\n", "\n", "print()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "celltoolbar": "Raw Cell Format", "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 2 }