{ "cells": [ { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "XXDeo-aGOAXF" }, "source": [ "##### Copyright 2020 The TensorFlow Probability Authors.\n" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "9XRGdjHNOE9D" }, "outputs": [], "source": [ "#@title ##### Licensed under the Apache License, Version 2.0 (the \"License\"); { display-mode: \"form\" }\n", "# you may not use this file except in compliance with the License.\n", "# You may obtain a copy of the License at\n", "#\n", "# https://www.apache.org/licenses/LICENSE-2.0\n", "#\n", "# Unless required by applicable law or agreed to in writing, software\n", "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", "# See the License for the specific language governing permissions and\n", "# limitations under the License." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "J_Ts-8cGSHuy" }, "source": [ "# TFP, backed by Jax\n", "\n", "Jax-backed TFP is a work in progress, but many distributions and bijectors are currently working! How do you use the alternative backend?\n", "\n", "\u003ctable class=\"tfo-notebook-buttons\" align=\"left\"\u003e\n", " \u003ctd\u003e\n", " \u003ca target=\"_blank\" href=\"https://colab.research.google.com/github/tensorflow/probability/blob/main/discussion/examples/TFP_and_Jax.ipynb\"\u003e\u003cimg src=\"https://www.tensorflow.org/images/colab_logo_32px.png\" /\u003eRun in Google Colab\u003c/a\u003e\n", " \u003c/td\u003e\n", " \u003ctd\u003e\n", " \u003ca target=\"_blank\" href=\"https://github.com/tensorflow/probability/blob/main/discussion/examples/TFP_and_Jax.ipynb\"\u003e\u003cimg src=\"https://www.tensorflow.org/images/GitHub-Mark-32px.png\" /\u003eView source on GitHub\u003c/a\u003e\n", " \u003c/td\u003e\n", "\u003c/table\u003e" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "3UEt43cKRFRE" }, "source": [ "## Importing" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 153 }, "colab_type": "code", "id": "PJhVMq4ORYCL", "outputId": "b60314c4-4143-46c8-91b7-354f59896198" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "TensorFlow 2.x selected.\n", "\u001b[K |████████████████████████████████| 3.5MB 4.9MB/s \n", "\u001b[K |████████████████████████████████| 144.6MB 88kB/s \n", "\u001b[K |████████████████████████████████| 2.9MB 56.8MB/s \n", "\u001b[K |████████████████████████████████| 2.8MB 50.5MB/s \n", "\u001b[K |████████████████████████████████| 460kB 53.9MB/s \n", "\u001b[K |████████████████████████████████| 778kB 44.7MB/s \n", "\u001b[31mERROR: tensorflow 2.1.0 has requirement gast==0.2.2, but you'll have gast 0.3.3 which is incompatible.\u001b[0m\n", "\u001b[?25h" ] } ], "source": [ "# Importing the TFP with Jax backend\n", "!pip3 install -q 'tfp-nightly[jax]' tf-nightly-cpu # We (currently) still require TF, but TF's smaller CPU build will work.\n", "import tensorflow_probability as tfp\n", "tfp = tfp.experimental.substrates.jax\n", "tf = tfp.tf2jax\n", "\n", "# Standard TFP Imports\n", "tfd = tfp.distributions\n", "tfb = tfp.bijectors\n", "tfpk = tfp.math.psd_kernels\n", "\n", "# Jax imports\n", "import jax\n", "import jax.numpy as np\n", "from jax import random\n", "\n", "# Other imports\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "sns.set(style='white')" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "Wi83YsB8VFxN" }, "source": [ "## TF Interface to Jax\n", "\n", "We've reimplemented the TF API, but with Jax functions instead of TF functions and DeviceArrays instead of TF Tensors." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 88 }, "colab_type": "code", "id": "Lcjz3NFWVIxd", "outputId": "3f9e6bb7-5f56-4838-96a8-4aaad81ec4cc" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/usr/local/lib/python3.6/dist-packages/jax/lib/xla_bridge.py:119: UserWarning: No GPU/TPU found, falling back to CPU.\n", " warnings.warn('No GPU/TPU found, falling back to CPU.')\n" ] }, { "data": { "text/plain": [ "DeviceArray([1., 1., 1., 1., 1.], dtype=float32)" ] }, "execution_count": 2, "metadata": { "tags": [] }, "output_type": "execute_result" } ], "source": [ "tf.ones(5)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "colab_type": "code", "id": "RIpI2F8fVTNX", "outputId": "d4dc4838-4758-42a1-a5ae-ff64101030aa" }, "outputs": [ { "data": { "text/plain": [ "DeviceArray([[2., 2., 2., 2.]], dtype=float32)" ] }, "execution_count": 3, "metadata": { "tags": [] }, "output_type": "execute_result" } ], "source": [ "tf.matmul(tf.ones([1, 2]), tf.ones([2, 4]))" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "MDOdp6ErVZXs" }, "source": [ "### Some differences:\n", "\n", "Shapes are tuples, not TensorShapes" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "colab_type": "code", "id": "cgurTk2eVcsM", "outputId": "ac89f7c3-976b-4801-f6ad-b60e039d2dde" }, "outputs": [ { "data": { "text/plain": [ "(5,)" ] }, "execution_count": 4, "metadata": { "tags": [] }, "output_type": "execute_result" } ], "source": [ "tf.ones(5).shape" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "W5cMH-YHVirg" }, "source": [ "Randomness is stateless, like in Jax and requires Jax `PRNGKey`s to operate." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "colab_type": "code", "id": "KPhFoy0SVook", "outputId": "67a0b668-cc45-41b7-bd9a-07c6dfff208a" }, "outputs": [ { "data": { "text/plain": [ "DeviceArray([[0.21629536, 0.8041241 ]], dtype=float32)" ] }, "execution_count": 6, "metadata": { "tags": [] }, "output_type": "execute_result" } ], "source": [ "tf.random.stateless_uniform([1, 2], seed=random.PRNGKey(0))" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "19xdloVeWDO8" }, "source": [ "Placeholders don't exist.\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "colab_type": "code", "id": "xO_2XKMgWE4e", "outputId": "711c87b9-e2be-4aa6-f1e8-89bfd1501169" }, "outputs": [ { "data": { "text/plain": [ "DeviceArray([1., 1., 1., 1., 1.], dtype=float32)" ] }, "execution_count": 7, "metadata": { "tags": [] }, "output_type": "execute_result" } ], "source": [ "tf.compat.v1.placeholder_with_default(tf.ones(5), (5,))" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "ZAqOULMELzSg" }, "source": [ "## Math libraries\n", "\n", "TFP's math libraries are now largely working, i.e. `tfp.math`" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "OSPq-R4US42L" }, "source": [ "## Bijectors" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "g_hUjutzMavx" }, "source": [ "Most bijectors have tests passing!" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "iBYup5lTYYJH" }, "source": [ "### Unary bijectors" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "colab_type": "code", "id": "4U9ZF2ZRR_ZJ", "outputId": "4301211d-3937-48b9-8769-3ff12b49b7d7" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[4. 4. 4. 4. 4.]\n", "[0. 0. 0. 0. 0.]\n" ] } ], "source": [ "bij = tfb.Shift(1.)(tfb.Scale(3.))\n", "print(bij.forward(np.ones(5)))\n", "print(bij.inverse(np.ones(5)))" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "J4OC63q2Yebk" }, "source": [ "### Meta bijectors" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 68 }, "colab_type": "code", "id": "XUCiMfaS9Iy9", "outputId": "d6d54db5-c76e-41d2-a68a-ac1e71ac73a6" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1. 0.]\n", " [0. 1.]]\n", "[0.6931472 0.5 0. ]\n" ] } ], "source": [ "b = tfb.FillScaleTriL(diag_bijector=tfb.Exp(), diag_shift=None)\n", "print(b.forward(x=[0., 0., 0.]))\n", "print(b.inverse(y=[[1., 0], [.5, 2]]))" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "colab_type": "code", "id": "ODnHOAUDYLJR", "outputId": "e82c1f2b-4d8f-491e-c0db-9cc5a0a15ca0" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1.3678794 1.3678794 1.3678794 1.3678794 1.3678794]\n" ] } ], "source": [ "b = tfb.Chain([tfb.Exp(), tfb.Softplus()])\n", "# or: \n", "# b = tfb.Exp()(tfb.Softplus())\n", "print(b.forward(-np.ones(5)))" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "uUKux7fgm_uw" }, "source": [ "### MCMC coming soon\n", "\n", "We are migrating TFP's random samplers to be internally-stateless, then will update MCMC to support JAX." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "WUdULAaqYsqB" }, "source": [ "### Some don't work yet\n", "* For example: FFJORD, MAF (WIP), Real NVP" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "PdrCO05uZJTV" }, "source": [ "## Distributions" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "iEEtRmuBZMvO" }, "source": [ "When sampling, we need to pass in a `seed`." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "colab_type": "code", "id": "cKPEn6GnZDKE", "outputId": "0885dd40-f362-43d7-82bb-2dd649505549" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-0.20584235\n" ] } ], "source": [ "dist = tfd.Normal(loc=0., scale=1.)\n", "print(dist.sample(seed=random.PRNGKey(0)))" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "nPyJAhIPZUSW" }, "source": [ "Jax distributions obey the same batching semantics as their TensorFlow counterparts." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "colab_type": "code", "id": "m1bYkjfuZT7U", "outputId": "8edb5da4-60bc-480e-e9c3-24e789ebf482" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(10, 2, 5)\n", "(10, 2)\n" ] } ], "source": [ "dist = tfd.Normal(np.zeros(5), np.ones(5))\n", "s = dist.sample(sample_shape=(10, 2), seed=random.PRNGKey(0))\n", "print(dist.log_prob(s).shape)\n", "\n", "dist = tfd.Independent(tfd.Normal(np.zeros(5), np.ones(5)), 1)\n", "s = dist.sample(sample_shape=(10, 2), seed=random.PRNGKey(0))\n", "print(dist.log_prob(s).shape)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "cJDVtoyfav6A" }, "source": [ "Most meta distributions are working!" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 68 }, "colab_type": "code", "id": "gMccOGWFZQhW", "outputId": "c1aab4f5-3bf4-47e2-e314-064a2b316e7b" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[0.68927777 1.3024291 0.83316153 0.47863364 0.6438408 ]\n", " [0.85886437 0.5110164 0.55384845 2.0785878 1.7635037 ]]\n", "(2,)\n" ] } ], "source": [ "dist = tfd.TransformedDistribution(\n", " tfd.MultivariateNormalDiag(tf.zeros(5), tf.ones(5)),\n", " tfb.Exp())\n", "# or:\n", "# dist = tfb.Exp()(tfd.MultivariateNormalDiag(tf.zeros(5), tf.ones(5)))\n", "s = dist.sample(sample_shape=2, seed=random.PRNGKey(0))\n", "print(s)\n", "print(dist.log_prob(s).shape)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "AO_crGZNbQgm" }, "source": [ "Gaussian processes and PSD kernels also work." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 268 }, "colab_type": "code", "id": "AQH4iALTbS3J", "outputId": "f0266ae1-6d35-43dd-adc4-8f4fb805f0ca" }, "outputs": [ { "data": { "image/png": "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\n/z9npMCub20kAAAAAElFTkSuQmCC\n", "text/plain": [ "\u003cFigure size 432x288 with 1 Axes\u003e" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "k1, k2, k3 = random.split(random.PRNGKey(0), 3)\n", "observation_noise_variance = 0.01\n", "f = lambda x: np.sin(10*x[..., 0]) * np.exp(-x[..., 0]**2)\n", "observation_index_points = tf.random.stateless_uniform(\n", " [50], minval=-1.,maxval= 1., seed=k1)[..., np.newaxis]\n", "observations = f(observation_index_points) + tfd.Normal(loc=0., scale=np.sqrt(observation_noise_variance)).sample(seed=k2)\n", "\n", "index_points = np.linspace(-1., 1., 100)[..., np.newaxis]\n", "\n", "kernel = tfpk.ExponentiatedQuadratic(length_scale=0.1)\n", "\n", "gprm = tfd.GaussianProcessRegressionModel(\n", " kernel=kernel,\n", " index_points=index_points,\n", " observation_index_points=observation_index_points,\n", " observations=observations,\n", " observation_noise_variance=observation_noise_variance)\n", "\n", "samples = gprm.sample(10, seed=k3)\n", "for i in range(10):\n", " plt.plot(index_points, samples[i])\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "L_i0j5YxLqes" }, "source": [ "## Works in progress:\n", "\n", "* Making all bijector/distribution tests pass (at around 90% now)\n", "* Making bijectors/distributions convertible to/from Pytrees\n", "* MCMC (and a push for stateless sampling at large in TFP)" ] } ], "metadata": { "colab": { "collapsed_sections": [], "name": "TFP_and_Jax.ipynb", "provenance": [], "toc_visible": true }, "kernelspec": { "display_name": "Python 3", "name": "python3" } }, "nbformat": 4, "nbformat_minor": 0 }