Skip to content

Instantly share code, notes, and snippets.

@Sayam753
Last active June 19, 2020 13:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Sayam753/df2d11b6b5a1e875710656ecc013fad5 to your computer and use it in GitHub Desktop.
Save Sayam753/df2d11b6b5a1e875710656ecc013fad5 to your computer and use it in GitHub Desktop.
Mean Field ADVI in TFP, PyMC3, PyMC4
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pymc4 as pm4\n",
"import numpy as np\n",
"import arviz as az\n",
"import seaborn as sns\n",
"import tensorflow as tf\n",
"import tensorflow_probability as tfp\n",
"import matplotlib.pyplot as plt\n",
"from pprint import pprint\n",
"from tensorflow_probability.python.mcmc.transformed_kernel import (\n",
" make_transformed_log_prob,\n",
")\n",
"\n",
"import pymc3 as pm3\n",
"import theano.tensor as tt\n",
"\n",
"tfd = tfp.distributions\n",
"tfb = tfp.bijectors\n",
"\n",
"dtype = tf.float32\n",
"plt.style.use(\"arviz-darkgrid\")\n",
"\n",
"np.random.seed(42)\n",
"pm3.set_tt_rng(42)\n",
"tf.random.set_seed(42)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"mu = np.zeros(2, dtype=np.float32)\n",
"cov = np.array([[1, 0.8], [0.8, 1]], dtype=np.float32)\n",
"data = np.random.multivariate_normal(mu, cov, size=10000)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAmMAAAGWCAYAAAA0f4RKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nO3df2xV5eHH8Q+lMFerzcUAZhXol2ERZaAov4aJBpkoECJMIRmOgDaoW2EzY6OaaMbmj07jTwYUcDphc3abwhYENQwsMoeilhBAQSEFh0FgKxWs2mLv94+uCOX2/jzneZ5zzvuVLJu3957nOQLu7fOce06neDweFwAAAKzIsz0BAACAKCPGAAAALCLGAAAALCLGAAAALCLGAAAALCLGAAAALCLGAAAALCLGAAAALCLGAAAALMq3PYFM1dfXGx+zqKhIDQ0Nxsd1Becf3fOP8rlLnD/nz/lz/rmffywWS/keVsbSkJcX7b9NnH90zz/K5y5x/pw/5x9lJs8/2n+nAQAALCPGAAAALCLGAAAALCLGAAAALCLGAAAALCLGAAAALCLGAAAALCLGAAAALCLGAAAALCLGAAAALCLGAAAALCLGAAAALCLGAAAALCLGAAAALCLGAAAALCLGAAAALCLGAAAALCLGAAAALCLGAAAALCLGAAAALCLGAAAALCLGAAAALHIixpYuXar+/furf//+2rp1q+3pAAAAGGM9xnbv3q0FCxaooKDA9lQAAACMsxpjzc3Nqqio0IABAzRmzBibUwEAALDCaoxVVVXpgw8+0AMPPKDOnTvbnAoAAIAV1mJsx44dqqqqUnl5ufr162drGgAAAFZZibGmpibNmzdPF110kcrKymxMAQAAwAn5NgZ94oknVFdXpxdffDHj7cmioiLl5ZlvyFgsZnxMl3D+0T3/KJ+7xPlz/px/lJk6f+MxVltbq6efflrl5eUqLS3N+PMNDQ0+zCq5WCym+vp64+O6gvOP7vlH+dwlzp/z5/w5/9zPP52gM7rEdOLECVVUVKh///6aNWuWyaEBAACcZHRlrLGxUXV1dZKkgQMHJnzP1KlTJUkLFy7kdhcAACD0jMZY165ddeONNyb82dtvv626ujqNHj1a3bp1U3FxscmpAQAAWGE0xs466yzdf//9CX9WUVGhuro63Xbbbbr00ktNTgsAAMAa649DAgAAiDJiDAAAwCJnYqyyslK7du1iixIAAESKMzEGAAAQRcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARcQYAACARfm2JwAAgCvq9p1zyv8+Iemcjt/cTkmfYz7MCFFAjAEAQu3UwDIxDlGGTBmPsU8++URr167Vxo0btXfvXh05ckRFRUUaMmSIysrKNHjwYNNTAgA4zFRMeYUoQ6aMx9iKFSu0bNky9e7dW6NGjVK3bt20b98+rVu3TuvWrdMjjzyicePGmZ4WAMAnQYspwDTjMTZo0CCtWLFCw4YNO+31t99+WzNmzNAvf/lLjRkzRl27djU9NQBADoiu09XtO4fVMaTFeIxde+21CV+/4oorNHz4cG3atEm7du3Sd77zHcMzAwBkgvgCvOHUBfz5+fmn/TcAwB3EF+APZ6rn448/1htvvKHu3burtLTU9nQAACLAABM6xePxuO1JNDc3a+bMmdqyZYt+85vf6IYbbujwvS0tLcrL4161AOCH2q0nbE8hVC671Jk1DzjM+u+SlpYWVVRUaMuWLZoyZUrSEJOkhoYGQzP7WiwWU319vfFxXcH5R/f8o3zuUjTOn5UvfwX5908Ufv8n49X5x2KxlO+xGmMtLS26++67tXr1ak2cOFHz58+3OR0ACD3iC3CPtRhraWnRXXfdpVWrVmnChAmqrKxk+xEAfECAAW6zEmOnhti4ceP00EMPqXPnzjamAgCh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diMAuMn4XkRbiBUVFWn58uXq06eP6SkAJ8PE5t34/UR4AUBwGI2xmpqa00Kso2vJAFPCEmXEFwAEl7EY27Nnj8rLy9XU1KRhw4bppZdeOuM9xcXFmjx5sqkpASeV9DkWuCAjwAAgHIzF2JEjR05+CzNRiEnSsGHDiDFYc2rcuBpmBBgAhI+xGBs+fLh27dplajggJy5tXxJgABBu3EwISKKkz7GTX282GWYEGABEBzEGpKl9IHkZZ8QXAEQXMQZkiYACAHiB5woBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYRIwBAABYZDXGPvroI1122WXq37+/7r33XptTAQAAsMJajLW0tKiiosLW8AAAAE6wFmO///3vtXXrVv3kJz+xNQUAAADrrMTYnj179Pjjj2vWrFkaMGCAjSkAAAA4wXiMffXVV6qoqFCfPn10xx13mB4eAADAKfmmB1yyZIl27typ6upqde3a1fTwAAAATjEaY++//74WLVqkW2+9VQMHDszqGEVFRcrLM7+7GovFjI/pEs4/uucf5XOXOH/On/OPMlPnn3GMVVZWqqmpKe33T58+XSUlJWpqatK8efPUu3dvlZeXZzrsSQ0NDVl/NluxWEz19fXGx3UF5x/d84/yuUucP+fP+XP+uZ9/OkGXcYxVV1ersbEx7fePHTtWJSUlWrp0qXbv3q3nn3+e7UkAAID/yTjGamtrsxpo586damlp0ZQpUxL+vLq6WtXV1brmmmu0aNGirMYAAAAIGmPXjI0aNSrhUt3hw4dVU1Ojvn37asiQIbr44otNTQkAAMA6YzE2bdq0hK+/+eabqqmp0dChQ/WrX/3K1HQAAACcwIPCAQAALCLGAAAALDJ+09f2hg8frl27dtmeBgAAgBWsjAEAAFjUKR6Px21PAgAAIKpYGQMAALCIGAMAALCIGAMAALCIGAMAALCIGAMAALDI+n3Ggu6jjz7SxIkT1djYqKlTp4b6kU5///vf9corr2jXrl36z3/+I0n61re+pVGjRunWW29Vz549Lc/QP83NzVq/fr3Wr1+vbdu26eDBg5Kkfv36adKkSZo6dao6d+5seZb+eu+997R27Vrt2LFDO3bsUH19vYYNG6YVK1bYnpqntm3bpgULFqi2tlYnTpxQaWmpZsyYoXHjxtmemu/+9re/6Z133tH27du1e/duNTc368EHH9TkyZNtT813n3zyidauXauNGzdq7969OnLkiIqKijRkyBCVlZVp8ODBtqfoqy+//FKPPvqotm/frn379qmhoUHnnnuuevXqpZtuukkTJ05Uly5dbE/TqKVLl+qRRx6RJFVXV+vSSy/1bSxiLActLS2qqKiwPQ1j1qxZo7q6Og0ePFg9evRQPB7Xe++9p+XLl2vlypV67rnndOGFF9qepi/279+vOXPmqKCgQCNHjtTo0aN17NgxbdiwQfPnz9fGjRu1ePFiderUyfZUfbNu3TotWbJEXbp00f/93/+pvr7e9pQ8t3nzZpWVlalr164aP368zj77bL366qu68847dfDgQd1yyy22p+irJ554QgcOHFAsFlOPHj104MAB21MyZsWKFVq2bJl69+6tUaNGqVu3btq3b5/WrVundevW6ZFHHgl1kH/22Wf605/+pEGDBunqq69Wt27d1NDQoNdff11333231qxZo2XLlikvLxobart379aCBQtUUFCgxsZG/weMI2u/+93v4hdffHH8mWeeiZeWlsbvuece21Py1RdffJHw9T//+c/x0tLS+OzZsw3PyJyDBw/G//CHP8Q/++yz017/7LPP4pMnT46XlpbG16xZY2l2ZuzevTu+ffv2eFNTU/zQoUPx0tLS+M0332x7Wp5pbm6OjxkzJj5w4MD4zp07T77+6aefxq+99tr4JZdcEv/3v/9tcYb+++c//3nyHJcsWRIvLS2N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\n",
"text/plain": [
"<Figure size 720x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.kdeplot(data[:, 0], data[:, 1], shade=True, shade_lowest=False);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## PyMC4"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"@pm4.model\n",
"def model():\n",
" density = yield pm4.MvNormalCholesky(\"density\", loc=mu, scale_tril=cov)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING:tensorflow:From /usr/local/lib/python3.7/site-packages/tensorflow/python/ops/linalg/linear_operator_lower_triangular.py:158: calling LinearOperator.__init__ (from tensorflow.python.ops.linalg.linear_operator) with graph_parents is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Do not pass `graph_parents`. They will no longer be used.\n",
"WARNING:tensorflow:From /usr/local/lib/python3.7/site-packages/tensorflow_probability/python/math/minimize.py:77: calling <lambda> (from tensorflow_probability.python.vi.optimization) with loss is deprecated and will be removed after 2020-07-01.\n",
"Instructions for updating:\n",
"The signature for `trace_fn`s passed to `minimize` has changed. Trace functions now take a single `traceable_quantities` argument, which is a `tfp.math.MinimizeTraceableQuantities` namedtuple containing `traceable_quantities.loss`, `traceable_quantities.gradients`, etc. Please update your `trace_fn` definition.\n"
]
}
],
"source": [
"opt = tf.optimizers.Adam(learning_rate=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-8)\n",
"mean_field = pm4.fit(model(), num_steps=40000, optimizer=opt)\n",
"\n",
"pymc4_samples = mean_field.approximation.sample(10000).posterior['model/density'].values\n",
"pymc4_samples = np.squeeze(pymc4_samples, axis=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## TFP"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"model = tfd.JointDistributionSequential(\n",
" [tfd.MultivariateNormalTriL(loc=mu, scale_tril=cov)]\n",
")\n",
"\n",
"joint_log_prob = lambda *x: model.log_prob(x)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"# Transformations to bounded space\n",
"unconstraining_bijectors = [tfb.Identity()]\n",
"\n",
"posterior = make_transformed_log_prob(\n",
" joint_log_prob,\n",
" unconstraining_bijectors,\n",
" direction=\"forward\",\n",
" enable_bijector_caching=False,\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"def build_mf_advi():\n",
" parameters = model.sample()\n",
" dists = []\n",
" for i, parameter in enumerate(parameters):\n",
" shape = parameter.shape\n",
" loc = tf.Variable(\n",
" tf.random.normal(shape, dtype=dtype),\n",
" name=f\"meanfield_{i}_loc\",\n",
" dtype=dtype,\n",
" )\n",
" scale = tfp.util.TransformedVariable(\n",
" tf.fill(shape, value=tf.constant(1, dtype=dtype)),\n",
" tfb.Softplus(), # For positive values of scale\n",
" name=f\"meanfield_{i}_scale\",\n",
" )\n",
"\n",
" approx_parameter = tfd.Normal(loc=loc, scale=scale)\n",
" dists.append(approx_parameter)\n",
" return tfd.JointDistributionSequential(dists)\n",
"\n",
"\n",
"mean_field = build_mf_advi()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"@tf.function(autograph=False)\n",
"def run_approximation():\n",
" elbo_loss = tfp.vi.fit_surrogate_posterior(\n",
" posterior,\n",
" surrogate_posterior=mean_field,\n",
" optimizer=opt,\n",
" num_steps=40000,\n",
" )\n",
" return elbo_loss\n",
"\n",
"\n",
"elbo_loss = run_approximation()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"tfp_samples = mean_field.sample(10000)[0]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## PyMC3"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"with pm3.Model() as model:\n",
" density = pm3.MvNormal(\"density\", mu=mu, cov=cov, shape=2)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" <div>\n",
" <style>\n",
" /* Turns off some styling */\n",
" progress {\n",
" /* gets rid of default border in Firefox and Opera. */\n",
" border: none;\n",
" /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
" background-size: auto;\n",
" }\n",
" .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
" background: #F44336;\n",
" }\n",
" </style>\n",
" <progress value='40000' class='' max='40000' style='width:300px; height:20px; vertical-align: middle;'></progress>\n",
" 100.00% [40000/40000 00:06<00:00 Average Loss = 0.52804]\n",
" </div>\n",
" "
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Finished [100%]: Average Loss = 0.52567\n"
]
}
],
"source": [
"with model:\n",
" mean_field = pm3.fit(n=40000, obj_optimizer=pm3.adam())\n",
"\n",
"pymc3_samples = mean_field.sample(10000)[\"density\"]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Plotting results"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlQAAASwCAYAAAA9ndSHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdf5RjZWH/8U9+TGYyMzvDAMuis8BCkWErIHJw0SpqgQqipYAIPYIgSrG1q/YHwuI55Shf4ayitepBV2ltC6LdU1zWI/5oQXEpFRV6UAFhQXFhd4BlgGFmZzIzmST3+0fmJjc3997c5EluMpP365w5LMlNcu8Ky9vnefLcmGVZlgAAANCweLtPAAAAYLkjqAAAAAwRVAAAAIYIKgAAAEMEFQAAgCGCCgAAwBBBBQAAYIigAgAAMERQAQAAGEq2+wQArEynnHKKxsfHKx7r6enRgQceqOOPP14XXXSRTjzxRKPP2LZtm66++urSe+/YsUMHHHCA57HZbFYnn3yyXn75ZUnSRz/6UX3oQx/yPDaTyei2227Tjh07tHPnTr388svq6enRQQcdpGOPPVZnnHGGTjnlFMXjwf+f9NZbb9W1114rSTrvvPN03XXXNXqpADocQQWgpU444QQddthhkqTp6Wk9/PDD+sEPfqAf/vCHuuqqq3TppZc25XMWFxf1ne98R+9///s9n7/zzjtLMRXk3nvv1cc+9jG99NJLSiaTevWrX60TTzxR+XxeTz/9tL773e/qu9/9ro499ljddtttvu+ze/duffazn1UsFhN3+AJWPoIKQEu9+93v1rnnnlv6+4WFBV1zzTXavn27brjhBr31rW/V4YcfbvQZY2NjevLJJ7Vt2zbfoPr2t78tSTr22GP10EMPeR7zk5/8RB/60IeUz+f1rne9S3//939fNeL1zDPPaMuWLfrhD3/oez6FQkGbNm2SJJ199tm6/fbbG7ksAMsIa6gARKq3t1fXXHON+vv7lc/ndeeddxq/5/77768//uM/1hNPPKFf/epXVc8/88wzuu+++/Sa17xGRx55pOd7TE5O6mMf+5jy+bze+9736vrrr/ecPnzlK1+pa6+9VjfeeKPv+dx888164IEHdMUVV2h0dLTxCwOwbBBUACI3MDBQGpXas2ePLrroIo2NjemOO+7wfc1NN92ksbExffSjH/V8/l3vepek8kiU07Zt21QoFErHeLn11ls1PT2tAw44QFdeeWXNa3jd617n+fiTTz6pz3/+89qwYYPe85731HwfACsDQQWgLWZmZiRJqVRKF198sSTpG9/4huexhUJB3/rWtyRJF110kecxJ598sg466CB973vf0/z8fOlxy7K0bds2pdNpveMd7/A9nx/96EeSpDPPPFOpVKr+C5KUz+e1adMmxWIxXXfddYrFYg29D4Dlh6ACELnHHntMu3fvliStX79ep556qkZHR/Xggw/qN7/5TdXxO3bs0Pj4uMbGxnxHhhKJhM455xzNzMxUrG+67777ND4+rtNPP12Dg4Oer83lcnrsscckScccc0zD1/Uv//Iv+tWvfqW/+Zu/0aGHHtrw+wBYfggqAJHZt2+fduzYoQ9/+MMqFAo66KCD9Pa3v12JRKI0PXbrrbdWvc4eubrwwgsD399e/O6c9rO/iRc03ffyyy+rUChIku+2C7U8/vjj+uIXv6jXvva1pRE3AN2DoALQUldffbXGxsY0NjamE088UZdffrmefvppHXroobrpppvU398vqfhtwHQ6rTvuuENTU1Ol1z/11FP63//9Xw0NDemss84K/Kx169bpxBNP1P3336/du3drampKd911lw499FDfka1myOVy2rRpk+LxuK6//vqa+1MBWHnYNgFASzn3oerp6dH++++v448/XieffLKSyfIfQcPDwzrrrLO0detW3XbbbfrABz4gSfrmN78py7J07rnnKp1O1/y8d73rXXrggQf07W9/W6tXr9bCwoLOPffcwPVM++23n+LxuAqFgl588cW6r3HLli165JFHdMUVV+iII46o+/UAlj+CCkBLufehCnLxxRdr69at+ta3vqVLL71UCwsL2rZtm2KxWM3pPtsZZ5yhT33qU9q+fXsplM4555zA1ySTSY2NjenRRx/Vww8/rLPPPjvUZ9nsrR/uvvtu3XPPPRXP2bvF79ixQ+9973slSbfccktd7w+g8xFUADrGkUceqT/6oz/ST3/6U91zzz16/vnnNT09rTe/+c2hF3n39/fr7W9/u2677TY9++yzOvnkk3XwwQfXfN2pp56qRx99VN///vd15ZVXNvRNv//7v//zfW5iYkITExN1vyeA5YGJfgAdxbmFgr1A3W+rBD/vfve7td9++2m//fbT+eefH+o1F110kVatWqUXX3xRN9xwQ83jH3jggdKvv/Od72jnzp2ePxs3bpRUvJef/RiAlYcRKgAd5S1veYsOO+ww/c///I8k6dBDD9Wb3/zmut7j+OOP189//vO6XjMyMqJPf/rT2rhxo26++WZlMhn93d/9XdW3/vbu3auvfvWr+t73vlf3ZwBYuQgqAB0lHo/rwgsv1PXXXy9Jes973hPZBpmnnnqqtmzZoquuukq33Xabtm/frmOOOUavfOUrSzdHfuyxx2RZlo4//vhIzgnA8kBQAeg4b3rTmyRJ6XQ6cP+oVnjLW96iH/3oR/rP//xP3XPPPXr88cf1yCOPKJlMas2aNfrTP/1TveMd79Bb3vKWSM8LQGeLWZZltfskAMDp85//vLZs2aILLrhA1157bbtPBwBqYlE6gI7y/PPP65vf/Kbi8bguueSSdp8OAITClB+AjvDZz35We/fu1X333afp6Wn9+Z//uf7gD/6g3acFAKEw5QegI5xyyil65plndOCBB+rMM8/UFVdc0dBeUADQDgQVAACAIdZQAQAAGCKoAAAADBFUAAAAhpbdt/wmJycj/bzh4WFNTU1F+pmdgOvuLlx3d+G6u0u3XrfUnGsfGRkJdRwjVDXE4935W8R1dxeuu7tw3d2lW69bivbau/d3GQAAoEkIKgAAAEMEFQAAgCGCCgAAwBBBBQAAYIigAgAAMERQAQAAGCKoAAAADBFUAAAAhggqAAAAQwQVAACAIYIKAADAEEEFAABgiKACAAAwRFABAAAYIqgAAAAMEVQAAACGCCoAAABDBBUAAIAhggoAAMBQRwTV1772NY2NjWlsbEy//OUv2306AAAAdWl7UD3++OP60pe+pP7+/nafCgAAQEPaGlSLi4vatGmT1q9fr9NOO62dpwIAANCwtgbVli1b9MQTT+j6669XIpFo56kAAAA0rG1B9cgjj2jLli3auHGjjjzyyHadBgAAgLG2BFU2m9VVV12lo48+Wpdddlk7TgEAAKBpku340C984QvatWuXtm3bVvdU3/DwsOLxaDtwZGQk0s/rFFx3d+G6uwvX3V269bql6K498qB68MEH9fWvf10bN27UUUcdVffrp6amWnBW/kZGRjQ5ORnpZ3YCrru7cN3dhevuLt163VJzrj1skEU61JPL5bRp0yaNjY3p8ssvj/KjAQAAWibSEapMJqNdu3ZJko455hjPYy644AJJ0o033shWCgAAYFmINKhSqZTOO+88z+ceeOAB7dq1S6eccor2339/jY6ORnlqAAAADYs0qPr6+nTdddd5Prdp0ybt2rVLH/zgB3X88cdHeVoAAABG2n7rGQAAgOWOoAIAADDUMUG1efNm7dy5k+k+AACw7HRMUAEAACxXBBUAAIAhggoAAMAQQQUAAGCIoAIAADBEUAEAABgiqAAAAAwRVAAAAIYIKgAAAEMEFQAAgCGCCgAAwBBBBQAAYIigAgAAMERQAQAAGCKoAAAADBFUAAAAhggqAAAAQwQVAACAIYIKAADAEEEFAABgiKACAAAwRFABAAAYIqgAAAAMEVQAAACGCCoAAABDBBUAAIAhggoAAMAQQQUAAGCIoAIAADBEUAEAABgiqAAAAAwRVAAAAIYIKgAAAEMEFQAAgCGCCgAAwBBBBQAAYIigAgAAMERQAQAAGCKoAAAADBFUAAAAhggqAAAAQwQVAACAIYIKAADAEEEFAABgiKACAAAwRFABAAAYIqgAAAAMEVQAAACGCCoAAABDBBUAAIAhggoAAMAQQQUAAGCIoAIAADBEUAEAABgiqAAAAAwRVAAAAIYIKgAAAEPJdp8AAABR2r1noOYxh6ydjeBMsJIQVACAFaFWKO0Zz8myaseU870IK4QVeVDt3btXP/jBD3TPPffoySef1AsvvKDh4WGdcMIJuuyyy/Sa17wm6lMCALRZmFGjdiCsEFbkQXXLLbfopptu0qGHHqo3vvGN2n///fXUU0/prrvu0l133aXPfe5zOvPMM6M+LQBAgzo1hppp954BogqBIg+q4447Trfccos2bNhQ8fgDDzyg973vffrEJz6h0047TalUKupTAwD46IZoqoWoQpDIg+ptb3ub5+MnnniiTjrpJN17773auXOnjj322IjPDAAgEU9AIzpqUXoymaz4KwCg9QgowFzHlMszzzyjn/70p1q9erWOOuqodp8OAKxYDz0c/ttuAMKJWZZltfskFhcXdemll+r+++/Xpz/9aZ199tm+xxYKBcXj7EcKAPV46OFcu09hRTj2mI4Zh0CHafs/GYVCQZs2bdL999+v888/PzCmJGlqaiqiMysaGRnR5ORkpJ/ZCbju7sJ1rzxB03ixWFyWVYjwbDpDM657Of7zspL/Oa+lGdc+MjIS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AACAiAgqAACAiAgqAACAiAgqAACAiAgqAACAiAgqAACAiAgqAACAiAgqAACAiAgqAACAiAgqAACAiAgqAACAiAgqAACAiAgqAACAiAgqAACAiAgqAACAiAgqAACAiAgqAACAiAgqAACAiAgqAACAiAgqAACAiAgqAACAiAgqAACAiAgqAACAiAgqAACAiAgqAACAiAgqAACAiAgqAACAiAgqAACAiAgqAACAiAgqAACAiAgqAACAiAgqAACAiCYaVIcPH9bP/uzPaufOnbrxxhsneSoAAAADm1hQNZtN7d69e1IfDwAAMDQTC6p/+7d/0/e+9z29/e1vn9QpAAAADMVEguonP/mJ/u7v/k5vfvObtWvXrkmcAgAAwNCMPagajYZ2796tM888U7/927897o8HAAAYuuS4P/DDH/6w7rvvPt1yyy1KpVLj/ngAAIChG2tQ7d+/Xx/84Af1xje+Ueedd95A77GwsKB4fLwDa4uLi2P9vGnB995c+N6bC997c9ms31sa33fvO6j27NmjWq0W+vjXv/712rFjh2q1mm644QZt375db3nLW/r92Lbl5eWBXzuIxcVFLS0tjfUzpwHfe3Phe28ufO/NZbN+b2k43z1skPUdVLfccotKpVLo41/0ohdpx44d+qd/+if96Ec/0qc+9Smm+gAAwIbSd1B997vfHeiD7rvvPjWbTb3yla/0fP6WW27RLbfcossvv1wf/OAHBwIRmkIAACAASURBVPoMAACASRjbGqpLLrnEc9js0Ucf1b59+/TUpz5VF154oZ7xjGeM65QAAACGYmxBdd1113n+/Fvf+pb27dunZz/72Xr3u989rtMBAAAYGm6ODAAAEBFBBQAAENHYN/Z0e85znqMDBw5M+jQAAAAGFjMMw5j0SQAAAKxnTPkBAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABERFABAABElJz0CQDYmC677DIdPXrU8bOZmRk96UlP0gUXXKDXvva1uuiiiyJ9xm233aZ3vvOd7ffet2+fTj75ZM9ja7WaXvCCF+jEiROSpLe//e36nd/5Hc9jS6WSbr31Vu3bt08HDhzQiRMnNDMzo1NPPVXnn3++XvziF+uyyy5TPN75d9J9+/bpv/7rv3T//ffrkUceab9m+/btuvTSS/WGN7xBJ510UqTvC2B6EVQARurCCy/UmWeeKUlaWVnRD3/4Q33xi1/U7bffrhtuuEHXX3/9UD5nbW1N//mf/6lf//Vf93z+jjvuaMdUkK997Wt6xzveoSeeeELJZFLnnnuuLrroIjUaDR06dEif/exn9dnPflbnn3++br311vbrrJ+feeaZetrTnqaTTjpJJ06c0Pe//319+MMf1q233qqPfvSjetrTnjaU7wtguhBUAEbqFa94ha699tr231erVd14443au3ev3ve+9+kXf/EXddZZZ0X6jJ07d+qnP/2pbrvtNt+g+vSnPy1JOv/88/WDH/zA85ivfvWr+p3f+R01Gg29/OUv1+///u93jXg99NBDuummm3T77bc7fv7GN75RN9xwg0455RTHz4vFov7oj/5It99+u/7kT/5Et9xyy6BfE8AUYw0VgLGanZ3VjTfeqGw2q0ajoTvuuCPye5500kl64QtfqB//+Mf63//9367nH3roIX3zm9/Us571LJ199tme77G0tKR3vOMdajQaet3rXqf3vOc9ntOHT3nKU/Tud79bH/jABxw/37VrV1dMSVIul9Pu3bslSd/73vdUKBQG+YoAphxBBWDscrlce1TqyJEjeu1rX6udO3fqc5/7nO9rPvKRj2jnzp16+9vf7vn8y1/+ckmdkSi72267Tc1ms32Ml0984hNaWVnRySefrD/8wz/s+R2e/exn9zzGkkgkJEnxeFzJJBMDwEZEUAGYCGukJpVK6fWvf70k6d///d89j202m/rkJz8pSXrta1/recwLXvACnXrqqfr85z+vSqXS/rlhGLrtttuUyWT0kpe8xPd8vvzlL0uSrrrqKqVSqf6/kI9arab3v//9kqTnPe95SqfTQ3tvANODf1UCMHb79+/X4cOHJZlTZZdffrm2bdum7373u7rvvvv0jGc8w3H8vn37dPToUe3cudN3ZCiRSOhlL3uZPvzhD+v222/XNddcI0n65je/qaNHj+qaa65RPp/3fG29Xtf+/fslSeedd16k73bvvffq4x//uAzD0BNPPKEf/OAHWlpa0vnnn6/3vOc9kd4bwPRihArA2Kyurmrfvn1661vfqmazqVNPPVVXXnmlEomEXvOa10gyp97crJGr6667LvD9rcXv9mk/60q8oOm+EydOqNlsSpLvtgthPfzww/rMZz6jvXv36q677tLS0pKe97zn6f3vf7+2bt0a6b0BTC+CCsBIvfOd79TOnTu1c+dOXXTRRXrzm9+sQ4cOafv27frIRz6ibDYrybwaMJPJ6HOf+5yWl5fbr3/wwQf19a9/XfPz83rpS18a+Fk7duzQRRddpLvvvluHDx/W8vKyvvSlL2n79u19rXmK4oorrtCBAwd033336c4779Rf/MVf6Cc/+YmuvvrqrisDAWwcTPkBGCn7PlQzMzM66aSTdMEFF+gFL3iBY4H2wsKCXvrSl+qWW27Rrbfeqje+8Y2SpJtvvlmGYejaa69VJpPp+Xkvf/nLdc899+jTn/60TjnlFFWrVV177bWKxWK+r9myZYvi8biazaYef/zxiN/YlEgktG3bNr3iFa/Qc5/7XF199dV65zvfqZ/7uZ/zvBoQwPrGCBWAkXrFK16hPXv2aM+ePfrzP/9z/d7v/Z5e+MIXel7tZi1O/+QnP6lms6lyuazbbrtNsVis53Sf5cUvfrFyuZz27t2r//iP/1A8HtfLXvaywNckk0nt3LlTkvTDH/6wz2/Y2+mnn67nPOc5KpVK+vrXvz709wcweQQVgKlx9tln63nPe54OHz6su+66S5/97Ge1srKiF7zgBdq+fXuo98hms7ryyiv18MMP6/7779cll1yi0047refrLr/8cknSF77wBdVqtUjfw4s1uvbEE08M/b0BTB5BBWCq2LdQsBao+22V4OcVr3iFtmzZoi1btuiVr3xlqNe89rWv1dzcnB5//HG9733v63n8PffcE/p8arWavvOd70gy13kB2HgIKgBT5dJLL9WZZ56p//7v/9b+/fu1fft2/cIv/EJf73HBBRfoW9/6lr71rW/pl3/5l0O9ZnFxUe9973sVj8f1sY99TH/8x3/suZ7q+PHjeve7363f/d3fbf/s8ccf18033+y5C/rx48f1jne8Q4888oi2bdumSy65pK/vAmB9YFE6gKkSj8d13XXXtfdses1rXhO4oHyYLr/8ct1000264YYbdOutt2rv3r0677zz9JSnPKV9c+T9+/fLMAxdcMEF7deVy2W9613v0nve8x7t2rVL27Ztk2EYOnbsmO69916tra3p1FNP1Qc/+EHNzs6O5bsAGC+CCsDUef7zny/JXHcUtH/UKFx66aX68pe/rP/4j//QXXfdpR/96Ee69957lUwmtXXrVv3Kr/yKXvKSl+jSSy9tv+bkk0/W7t27dffdd+vHP/6xfvKTn6harWpubk4XXHCBXvjCF+pVr3qV78aiANa/mGEYxqRPAgDs3v/+9+umm27Sq171Kr373e+e9OkAQE+soQIwVR555BHdfPPNisfj+rVf+7VJnw4AhMKUH4Cp8Nd//dc6fvy4vvnNb2plZUWvfvWr9TM/8zOTPi0ACIUpPwBT4bLLLtNDDz2kJz3pSbrqqqv0B3/wB0qlUpM+LQAIhaACAACIiDVUAAAAERFUAAAAERFUAAAAEa27q/yWlpbG+nkLCwtaXl4e62dOA7735sL33lz43pvLZv3e0nC+++LiYqjjGKHqIR7fnL8ivvfmwvfeXPjem8tm/d7SeL/75v0tAwAADAlBBQAAEBFBBQAAEBFBBQAAEBFBBQAAEBFBBQAAEBFBBQAAEBFBBQAAEBFBBQAAEBFBBQAAEBFBBQAAEBFBBQAAEBFBBQAAEBFBBQAAEBFBBQAAEBFBBQAAEBFBBQAAEBFBBQAAEBFBBQAAEBFBBQAAENFUBNU//dM/aefOndq5c6e+973vTfp0AAAA+jLxoPrRj36kf/zHf1Q2m530qQAAAAxkokG1tram3bt3a9euXbriiismeSoAAAADm2hQ3XTTTfrxj3+s97znPUokEpM8FQAAgIFNLKjuvfde3XTTTXrLW96is88+e1KnAQAAENlEgqpWq+mGG27QOeecoze96U2TOAUAAIChSU7iQ//+7/9eBw8e1G233db3VN/CwoLi8fF24OLi4lg/b1rwvTcXvvfmwvfeXDbr95bG993HHlTf/e539S//8i96y1veoqc//el9v355eXkEZ+VvcXFRS0tLY/3MacD33lz43psL33tz2azfWxrOdw8bZGMd6qnX69q9e7d27typN7/5zeP8aAAAgJEZ6whVqVTSwYMHJUnnnXee5zGvetWrJEkf+MAH2EoBAACsC2MNqlQqpV/91V/1fO6ee+7RwYMHddlll+mkk07Stm3bxnlqAAAAAxtrUKXTaf3lX/6l53O7d+/WwYMH9Zu/+Zu64IILxnlaAAAAkUz81jMAAADrHUEFAAAQ0dQE1Z49e3TgwAGm+wAAwLozNUEFAACwXhFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAERFUAAAAESUnfQIAAIzC4SM5x98fOVqXYeR8ju52xunFYZ8SNrCxB9Xx48f1xS9+UXfddZd++tOf6rHHHtPCwoIuvPBCvelNb9KznvWscZ8SAGDKueNo3J9JXKGXsQfVxz/+cX3kIx/R9u3bdckll+ikk07Sgw8+qC996Uv60pe+pL/5m7/RVVddNe7TAgCMyCRiaNgOH8kRVQg09qB65jOfqY9//OO6+OKLHT+/55579IY3vEF/9md/piuuuEKpVGrcpwYA6GEjxBEwCmMPql/+5V/2/PlFF12k5zznOfra176mAwcO6Pzzzx/zmQEA7IgnJ0apEGSqFqUnk0nHfwIAxoeAAgY3NeXy0EMP6Rvf+IZOOeUUPf3pT5/06QDAhkdAAcMTMwzDmPRJrK2t6frrr9fdd9+t9773vbrmmmt8j202m4rH2T4LAPr1gx/WJ30K6975503NOASmzMT/l9FsNrV7927dfffdeuUrXxkYU5K0vLw8pjMzLS4uamlpaayfOQ343psL33tj8huBisXiMozmmM9m8obxvdfj/142+v/Ogwzjuy8uLoY6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JgYVERERkU0MKiIiIiKbGFRERERENjGoiIiIiGxiUBERERHZxKAiIiIisolBRURERGQTg4qIiIjIJgYVERERkU0MKiIiIiKbGFRERERENjGoiIiIiGxiUBERERHZxKAiIiIisolBRURERGQTg4qIiIjIJgYVERERkU0MKiIiIiKbGFRERERENjGoiIiIiGxiUBERERHZxKAiIiIisolBRURERGQTg4qIiIjIJgYVERERkU0MKiIiIiKbGFRERERENjGoiIiIiGxiUBERERHZxKAiIiIisolBRURERGQTg4qIiIjIJgYVERERkU0MKiIiIiKbGFRERERENjGoiIiIiGxiUBERERHZxKAiIiIisqmpQXXixAn83d/9HS6++GLcf//9zTwVIiIiopo1LagKhQLWrl3brI8nIiIiqpumBdV//dd/4fXXX8dnP/vZZp0CERERUV00JaiOHDmChx56CHfffTfmzZvXjFMgIiIiqhvHgyqfz2Pt2rWYPXs2Pv3pTzv98URERER153X6Azdt2oQDBw5gYGAAfr/f6Y8nIiIiqjtHg+qNN97Ahg0bcNddd2HBggU1vUc0GoXb7ezAWiwWc/TzJgt+7/bC791e+L3bS7t+b8C57151UK1btw6ZTMby81esWIG+vj5kMhmsWbMG559/PlatWlXtxxaNjIzU/NpaxGIxDA8PO/qZkwG/d3vh924v/N7tpV2/N1Cf7241yKoOqoGBASSTScvPv+6669DX14dHH30Uhw8fxlNPPcWpPiIiImopVQfVnj17avqgAwcOoFAo4NZbb9U9PjAwgIGBAXzgAx/Ahg0bavoMIiIiomZwbA3VVVddpTtsNjQ0hB07dmDOnDm4/PLLcckllzh1SkRERER14VhQLV++XPfxV199FTt27MDChQvx1a9+1anTISIiIqob3hyZiIiIyCYGFREREZFNjm/sqXXllVfi0KFDzT4NIiIiopq5JEmSmn0SRERERFMZp/yIiIiIbGJQEREREdnEoCIiIiKyiUFFREREZBODioiIiMgmBhURERGRTU3fh2oqO3HiBG666SYkk0ncdtttLXvrnJ/97Gd48cUXcejQIbz99tsAgHe/+9246qqrcNddd6Gnp6fJZ1h/2WwW27Ztw7Zt27B3716cOnUKAHDhhRfi5ptvxm233QaPx9Pks2yMgwcP4oUXXsD+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SCaTxXWSRktybrvtNgDAd7/7XVx77bV1P4e2C6paXXXVVYjFYmWPDw0NYceOHZgzZw4uv/xyXHLJJU04u+Y5c+YMgNa9UkbEVDQaxebNm3UXNNPUsHDhQmzatAkvv/wyli5dqjr28ssvF59DrUUZUzfccAP+4z/+o6XXTVXSqv/P9vv9+NjHPqZ77A9/+AOOHj2Ka665BtOmTWvYFiKt9TPaQMuXL9d9/NVXX8WOHTuwcOHClrz1TDwex5kzZzBnzpyyY//zP/+DvXv3oq+vryVDY8eOHaqYavUpsVa3ZMkSzJo1C88//zxWrFhR3ItqbGwMGzduhM/na/k1Ne1GTPM999xzuP766/GNb3yjLWLqzTffRG9vL4LBoOrxVCqFr3/96wDQchfVdHR04N/+7d90j61duxZHjx7Fpz71Kd56hprn3LlzuOGGG7BgwQLMmTMHPT09GBkZwb59+7B//35EIhGsW7eu2adZd0eOHMGqVauQyWSwaNEi/PznPy97Tm9vb0veC+3IkSN47LHHAADj4+MAgLfeekt1q6Wp+Gvu9Xrxta99DStXrsTy5ctVt54ZHBzEmjVrMHPmzGafZkP893//N1577TUA8u04xGNi2ud973sfbrnllqadX6N897vfxbPPPotQKIS+vj488sgjZc+59tprW26D5hdeeAGPP/443ve+96G3txeRSASnT5/Gzp07ce7cOVxxxRW4/fbbm32aLYdBRaamTZuGz3zmM9i1axd+97vf4dy5c/D5fOjt7cXtt9+OO+64A+edd16zT7Puzp49W7xKTi+mAGDRokUtGVRnz54t2zFc+9hUDCoAWLx4MZ588kk8/PDD2LJlS/HmyPfdd19L3tNNeO2118p+Tf/4xz/ij3/8Y/GfWzGoxD0Lk8kkNm7cqPuc3t7elguq97///Thz5gz27NmD119/HclkEpFIBBdffDGWLl2Kj370oy035TcZuCRJkpp9EkRERERTWXte5kBERERURwwqIiIiIpsYVEREREQ2MaiIiIiIbGJQEREREdnEoCIiIiKyiUFFREREZBODioiIiMgmBhURERGRTQwqIiIiIpsYVEREREQ2MaiIiIiIbPr/pSKnJPv0ftwAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 700x1500 with 3 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"f, axes = plt.subplots(3, 1, figsize=(7, 15), squeeze=False, sharex=True)\n",
"rows = [n for n in range(0, 3)]\n",
"titles = [\"PyMC4\", \"TFP\", \"PyMC3\"]\n",
"samples = [\n",
" (pymc4_samples[:, 0], pymc4_samples[:, 1]),\n",
" (tfp_samples[:, 0].numpy(), tfp_samples[:, 1].numpy()),\n",
" (pymc3_samples[:, 0], pymc3_samples[:, 1])\n",
"]\n",
"\n",
"# Plot\n",
"for row, title, sample in zip(rows, titles, samples):\n",
" ax = sns.kdeplot(\n",
" data[:, 0],\n",
" data[:, 1],\n",
" shade=True,\n",
" shade_lowest=False,\n",
" alpha=0.9,\n",
" ax=axes[row, 0],\n",
" )\n",
" ax.set_title(title)\n",
" sns.kdeplot(\n",
" sample[0],\n",
" sample[1],\n",
" shade=True,\n",
" shade_lowest=False,\n",
" alpha=0.9,\n",
" ax=axes[row, 0],\n",
" )\n"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"%load_ext watermark"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"tensorflow_probability 0.11.0-dev20200616\n",
"pymc4 4.0a2\n",
"numpy 1.18.5\n",
"arviz 0.8.3\n",
"tensorflow 2.3.0-dev20200616\n",
"pymc3 3.9.0\n",
"seaborn 0.10.1\n",
"CPython 3.7.7\n",
"IPython 7.15.0\n",
"\n",
"compiler : Clang 11.0.0 (clang-1100.0.33.17)\n",
"system : Darwin\n",
"release : 19.5.0\n",
"machine : x86_64\n",
"processor : i386\n",
"CPU cores : 4\n",
"interpreter: 64bit\n"
]
}
],
"source": [
"%watermark -v -m --iversions"
]
}
],
"metadata": {
"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.7.7"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment