Skip to content

Instantly share code, notes, and snippets.

@smsharma
Created October 15, 2020 22:01
Show Gist options
  • Save smsharma/96649830b7f13657472599ca9142a196 to your computer and use it in GitHub Desktop.
Save smsharma/96649830b7f13657472599ca9142a196 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import random\n",
"import string\n",
"\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"import pandas as pd\n",
"import tqdm\n",
"\n",
"%matplotlib inline\n",
"%load_ext autoreload\n",
"%autoreload 2"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import torch\n",
"import gpytorch\n",
"import pyro\n",
"from pyro.infer.autoguide import AutoMultivariateNormal, init_to_mean\n",
"from pyro.infer import Predictive\n",
"from pyro.infer import SVI, Trace_ELBO, Predictive, MCMC, NUTS\n",
"import pyro.optim as optim\n",
"import pyro.distributions as dist\n",
"from torch.distributions import constraints\n",
"\n",
"pyro.set_rng_seed(101)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Generate samples"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Samples from poiss. distrib.')"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x216 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Specify a 'true' latent function lambda\n",
"scale = lambda x: 9 * np.sin(2 * np.pi * x) + 1 + 18.\n",
"\n",
"# Generate synthetic data\n",
"# here we generate some synthetic samples\n",
"NSamp = 200\n",
"\n",
"X = np.linspace(0, 1, NSamp)\n",
"\n",
"fig, (lambdaf, samples) = plt.subplots(1, 2, figsize=(10, 3))\n",
"\n",
"lambdaf.plot(X,scale(X))\n",
"lambdaf.set_xlabel('x')\n",
"lambdaf.set_ylabel('$\\lambda$')\n",
"lambdaf.set_title('Latent function')\n",
"\n",
"Y = np.zeros_like(X)\n",
"for i,x in enumerate(X):\n",
" Y[i] = np.random.poisson(scale(x))\n",
"samples.scatter(X,Y)\n",
"samples.set_xlabel('x')\n",
"samples.set_ylabel('y')\n",
"samples.set_title('Samples from poiss. distrib.')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"train_x = torch.tensor(X).float()\n",
"train_y = torch.tensor(Y).float()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Define model"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"pyro.enable_validation(False)\n",
"\n",
"class PVGPRegressionModel(gpytorch.models.ApproximateGP):\n",
" def __init__(self, num_inducing=8, name_prefix=\"test\", learn_inducing_locations=True):\n",
" self.name_prefix = name_prefix\n",
"# Define all the variational stuff\n",
" inducing_points = torch.linspace(0., 1., num_inducing)\n",
"\n",
" variational_strategy = gpytorch.variational.VariationalStrategy(\n",
" self, inducing_points,\n",
" gpytorch.variational.CholeskyVariationalDistribution(num_inducing_points=num_inducing), \n",
" learn_inducing_locations=learn_inducing_locations\n",
" )\n",
"\n",
" # Standard initializtation\n",
" super().__init__(variational_strategy)\n",
" # Mean, covar, likelihood\n",
" self.mean_module = gpytorch.means.ConstantMean()\n",
" self.covar_module = gpytorch.kernels.ScaleKernel(gpytorch.kernels.RBFKernel(lengthscale_prior=gpytorch.priors.NormalPrior(0.25, 0.0001)))\n",
"\n",
" def forward(self, x):\n",
" mean = self.mean_module(x)\n",
" covar = self.covar_module(x)\n",
" return gpytorch.distributions.MultivariateNormal(mean, covar)\n",
"\n",
" def guide(self, x, y):\n",
"\n",
" # Get q(f) - variational (guide) distribution of latent function\n",
" function_dist = self.pyro_guide(x)\n",
" \n",
" # Use a plate here to mark conditional independencies\n",
" with pyro.plate(self.name_prefix + \".data_plate\", dim=-1):\n",
" \n",
" # Sample from latent function distribution\n",
" pyro.sample(self.name_prefix + \".f(x)\", function_dist)\n",
"\n",
" def model(self, x, y):\n",
" pyro.module(self.name_prefix + \".gp\", self)\n",
" \n",
" # Get p(f) - prior distribution of latent function\n",
" function_dist = self.pyro_model(x)\n",
" \n",
" # Use a plate here to mark conditional independencies\n",
" with pyro.plate(self.name_prefix + \".data_plate\", dim=-1):\n",
" \n",
" # Sample from latent function distribution\n",
" function_samples = pyro.sample(self.name_prefix + \".f(x)\", function_dist)\n",
" # Use the link function to convert GP samples into scale samples\n",
" scale_samples = function_samples.exp()\n",
"\n",
" # Sample from observed distribution\n",
" return pyro.sample(\n",
" self.name_prefix + \".y\",\n",
" pyro.distributions.Poisson(scale_samples), \n",
" obs=y\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"model = PVGPRegressionModel(name_prefix=\"test\", num_inducing=100, learn_inducing_locations=False)\n",
"pyro.clear_param_store()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Train"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "3aedabe74fa74407b276132ca4c5de8e",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(IntProgress(value=0, max=2000), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"num_iter = 2000\n",
"num_particles = 32\n",
"\n",
"optimizer = pyro.optim.Adam({\"lr\": 1e-2})\n",
"elbo = pyro.infer.Trace_ELBO(num_particles=num_particles, vectorize_particles=True, retain_graph=True)\n",
"svi = pyro.infer.SVI(model.model, model.guide, optimizer, elbo)\n",
"\n",
"model.train()\n",
"iterator = tqdm.notebook.tqdm(range(num_iter))\n",
"for i in iterator:\n",
" model.zero_grad()\n",
" loss = svi.step(train_x, train_y)\n",
" iterator.set_postfix(loss=loss, lengthscale=model.covar_module.base_kernel.lengthscale.item())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Get samples in two different ways"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"# Using pyro.infer.Predictive\n",
"predictive = Predictive(model.model, guide=model.guide, num_samples=1,)\n",
"pred = predictive(train_x, train_y)\n",
"samples_predictive = (np.exp(pred['test.f(x)'].detach().numpy())) "
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"# By calling model\n",
"model.eval()\n",
"with torch.no_grad():\n",
" output = model(train_x)\n",
"samples_direct = output(torch.Size([1])).exp()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Plot"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7fdd73d10f60>"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAW8AAAD4CAYAAAAjKGdbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOydeXhU5fXHP3eWzGTfQxKyh5AQlsi+iYAKItbWBRULIkqlFSlWqqjVVlx/atVq1VJ361Io7oC7YFRkhwQCCQQSsu/LZF8mM/f3xzuTBQJESDIJeT/Pk+fe3PfeO+dOkm/OnPe85yiqqiKRSCSS/oXG0QZIJBKJ5JcjxVsikUj6IVK8JRKJpB8ixVsikUj6IVK8JRKJpB+i660X8vPzUyMiInrr5SQSieS8YO/evWWqqvqfeLzXxDsiIoI9e/b01stJJBLJeYGiKNmdHZdhE4lEIumHSPGWSCSSfogUb4lEIumH9FrMWyI5V8xmM3l5eTQ2NjraFImk2zEajYSEhKDX67t0vhRvSb8hLy8Pd3d3IiIiUBTF0eZIJN2GqqqUl5eTl5dHZGRkl66RYRNJv6GxsRFfX18p3JLzDkVR8PX1/UWfKqV4S/oVUrgl5yu/9Hdbind/p3A/ZG93tBUSiaSXkeLd3/nyXth0l6OtGBCoqspDDz3E6tWrufvuu7n77rt56623euz17rrrrrP+pJGRkUFMTAyrV69uvdddd3X/78mWLVvw8fHh7bff7vZ7A6xfvx4nJycSExPZv38/4eHhPf5M58KuXbsIDAw87ftxLj/X9kjx7s9YWqAgGarzHW3JgGDnzp3s2LGD1atX88wzzxATE0NdXV2Pvd6KFSvO+tro6Gjmzp3b+v24ceMYN25cd5jFokWLWvcvvvhiRo4c2S337Yzrr7+eoKAgABISEpgxY0brWHc+U3cxYcIEJk6ceNpzzuXn2h6ZbdLXsZgh+2eImnHyWOlhaGkQX021YHA7+Zz0byBkHLj49LSl5z0FBQXs2rWLrVu3MmXKFH7729+SlJTUY693rt5Z++sXLFhwruagqirbt29n+/aOYbrT2Wm1WgHQaM7eT2x//+5+pp7gTD+37pq3keLd10n+L2xcAct2QkBcx7GCfW37NYVgiOk4XpEJ/70OZj0CU+/seVt7kYc3HiK1oLpb7xkf7MFDVw4/5fj06dNxcnJi2rRpeHl5ceedd/LAAw8AcM8992A0GsnNzSUqKoq//e1vvPfee9xyyy289tpr1NfX89Zbb3H//fdTUlLCl19+yb333ktISAizZs3C3d2dhQsXsmfPHkaNGsWqVas6vLbZbGbFihWEhISQkZHB/PnzmT179kk2vvrqqyQlJREXF8fPP//MFVdcgdlsZsaMGej1er744gumTZtGaGgoI0eOZOfOnXzzzTesWbOG1NRU3Nzc8PT05L777iM1NZVHHnmEKVOm8O6777JhwwZeeuklSkpKuO+++7j55psZNmxY62unpqZy8803Y7FY2LFjBxs3buSf//wn//3vfxk8eHAHO9esWUNKSgqurq5UV1fzyiuvdPoenor2z5SYmMjll19OVVUVS5YsoaCggLS0NN577z3q6+uZN28e48aNIzU1FR8fHwIDA3nsscc63O/2229n48aNPPPMMxQUFPD+++/z+OOPk5GRwUcffcQnn3yCp6cnb731FqmpqYSEhJCWlsYzzzyDq6srDz/8MHV1dQQHB3Pw4EGuuuoqAD755BM2bdpEVFQUJSUlvPDCC6d8pl+KFO++TtZPYlt+9GTxzj9BvP1OEO9jm21jxT1n3wDC19eXvXv3smbNGj788EMefvhhdDodDz74INXV1cybN4/Q0FAGDx7MsmXLWLhwIQ888ABms5lly5axdetWPvroI95//31ycnJYt24d//znP5k/fz7p6en86U9/Iicnh/DwcGbPno2Xl1fra7/55pvs2rWLNWvWkJ2dzZw5c0hLS+tgX1paGnfeeSfl5eW4uLiwb5/4/dDr9dx22228/fbbuLi4sHz5cu655x7effdd3nzzTdLS0li+fDkVFRV4eHgwdOhQbrrpJpYsWcJNN93EsmXLKC0txcnJiaVLl7Jt2zaefPLJk96f+Ph4nnrqKW688UZUVcVkMvHGG2+cJNz216uurqa4uJiPP/4YoNP30M/Pr9OfRftnAli1ahVXXHEF8+bNw9nZGYPBwLPPPktycjKlpaU89thj/PnPf8bZ2bnTfwqrVq3i1VdfJSEhgfnz5/PMM8+Qm5vLHXfcwfvvv8/mzZsZMWIES5cupba2FoPBwPXXX8/TTz/NhRdeyBtvvEFOTg6KovDpp58CUFFRwYIFC9i5cycjR45k5syZ7Ny5k0GDBnXx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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.plot(train_x, samples_direct[0], label=\"Sample directly calling model\")\n",
"plt.plot(train_x, samples_predictive[0], label=\"Sample using Predictive\")\n",
"\n",
"plt.legend()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment