From fbb370e804d5762edb027df0f92e8196f03833a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul-Christian=20B=C3=BCrkner?= Date: Mon, 23 Sep 2024 11:26:44 +0200 Subject: [PATCH 01/12] update README and TwoMoons example for discussion --- README.md | 82 +-- examples/TwoMoons_FlowMatching.ipynb | 937 +++++++-------------------- 2 files changed, 267 insertions(+), 752 deletions(-) diff --git a/README.md b/README.md index 5a839bb2..9e968a6d 100644 --- a/README.md +++ b/README.md @@ -9,84 +9,92 @@ It provides users with: - A user-friendly API for rapid Bayesian workflows - A rich collection of neural network architectures -- Multi-Backend Support: [PyTorch](https://github.com/pytorch/pytorch), [TensorFlow](https://github.com/tensorflow/tensorflow), [JAX](https://github.com/google/jax), and [NumPy](https://github.com/numpy/numpy) +- Multi-Backend Support via [Keras3](https://keras.io/keras_3/): You can use [PyTorch](https://github.com/pytorch/pytorch), [TensorFlow](https://github.com/tensorflow/tensorflow), [JAX](https://github.com/google/jax), or [NumPy](https://github.com/numpy/numpy) BayesFlow is designed to be a flexible and efficient tool that enables rapid statistical inference fueled by continuous progress in generative AI and Bayesian inference. +## Conceptual Overview + +A cornerstone idea of amortized Bayesian inference is to employ generative +neural networks for parameter estimation, model comparison, and model validation +when working with intractable simulators whose behavior as a whole is too +complex to be described analytically. The figure below presents a higher-level +overview of neurally bootstrapped Bayesian inference. + + + + +## Disclaimer + +This is the current dev version of BayesFlow, which constitutes a complete refactor of the library build on Keras3. This way, you can now use any of the major deep learning libraries as backend for BayesFlow. The refactor is still work in progress with some of the advanced features not yet implemented. We promise to catch up on them soon. + +If you encounter any issues, please don't hesitate to open an issue here on [Github](https://github.com/stefanradev93/BayesFlow/issues) or ask questions on our [Discourse Forums](https://discuss.bayesflow.org/). + ## Install ### Backend -First, install your machine learning backend of choice. Note that BayesFlow **will not run** without a backend. +First, install your machine learning backend of choice. Note that BayesFlow **will not run** without a backend. If you don't know which one to use, we recommend [PyTorch](https://github.com/pytorch/pytorch) to get started. -Once installed, set the appropriate backend environment variable. For example, to use PyTorch: +Once installed, set the appropriate backend environment variable. For example, to use PyTorch, type into your terminal before starting Python: ```bash export KERAS_BACKEND=torch ``` +TODO: can we set this within python too? + If you use conda, you can instead set this individually for each environment: ```bash conda env config vars set KERAS_BACKEND=torch ``` -### Using Conda +This way, you also don't have to manually set the backend every time you are starting Python to use BayesFlow. -We recommend installing with conda (or mamba). +### From Source -```bash -conda install -c conda-forge bayesflow -``` - -### Using pip +To install the development version of BayesFlow from source, use: ```bash -pip install bayesflow +git clone https://github.com/stefanradev93/bayesflow +cd +git checkout dev +conda env create --file environment.yaml --name bayesflow ``` -### From Source +### Using Conda + +TODO: does conda or pip work with the current dev yet? If not, I suggest to remove it for now. -Stable version: +We recommend installing BayesFlow with conda (or mamba). ```bash -git clone https://github.com/stefanradev93/bayesflow -cd bayesflow -conda env create --file environment.yaml --name bayesflow +conda install -c conda-forge bayesflow ``` -Development version: +### Using pip + +You can of course use pip as well: ```bash -git clone https://github.com/stefanradev93/bayesflow -cd bayesflow -git checkout dev -conda env create --file environment.yaml --name bayesflow +pip install bayesflow ``` ## Getting Started -Check out some of our walk-through notebooks: +Check out some of our walk-through notebooks below. We are actively working on porting all notebooks to the new interface so more will be available soon! 1. [Two moons toy example with flow matching](examples/TwoMoons_FlowMatching.ipynb) -2. ...Under construction ## Documentation \& Help Documentation is available at https://bayesflow.org. Please use the [BayesFlow Forums](https://discuss.bayesflow.org/) for any BayesFlow-related questions and discussions, and [GitHub Issues](https://github.com/stefanradev93/BayesFlow/issues) for bug reports and feature requests. -## Conceptual Overview - -A cornerstone idea of amortized Bayesian inference is to employ generative -neural networks for parameter estimation, model comparison, and model validation -when working with intractable simulators whose behavior as a whole is too -complex to be described analytically. The figure below presents a higher-level -overview of neurally bootstrapped Bayesian inference. - - +### Further Reading -### References and Further Reading +TODO: which papers to we want to reference here exactly and according to which criteria? - Radev S. T., D’Alessandro M., Mertens U. K., Voss A., Köthe U., & Bürkner P. C. (2021). Amortized Bayesian Model Comparison with Evidental Deep Learning. @@ -106,10 +114,6 @@ JANA: Jointly amortized neural approximation of complex Bayesian models. *Proceedings of the Thirty-Ninth Conference on Uncertainty in Artificial Intelligence, 216*, 1695-1706. ([arXiv](https://arxiv.org/abs/2302.09125))([PMLR](https://proceedings.mlr.press/v216/radev23a.html)) -## Support - -This project is currently managed by researchers from Rensselaer Polytechnic Institute, TU Dortmund University, and Heidelberg University. It is partially funded by the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation, Project 528702768). The project is further supported by Germany's Excellence Strategy -- EXC-2075 - 390740016 (Stuttgart Cluster of Excellence SimTech) and EXC-2181 - 390900948 (Heidelberg Cluster of Excellence STRUCTURES), as well as the Informatics for Life initiative funded by the Klaus Tschira Foundation. - ## Citing BayesFlow You can cite BayesFlow along the lines of: @@ -156,3 +160,7 @@ You can cite BayesFlow along the lines of: publisher = {PMLR} } ``` + +## Acknowledgments + +This project is currently managed by researchers from Rensselaer Polytechnic Institute, TU Dortmund University, and Heidelberg University. It is partially funded by the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation, Project 528702768). The project is further supported by Germany's Excellence Strategy -- EXC-2075 - 390740016 (Stuttgart Cluster of Excellence SimTech) and EXC-2181 - 390900948 (Heidelberg Cluster of Excellence STRUCTURES), as well as the Informatics for Life initiative funded by the Klaus Tschira Foundation. diff --git a/examples/TwoMoons_FlowMatching.ipynb b/examples/TwoMoons_FlowMatching.ipynb index 668e3a2b..0b37df7a 100644 --- a/examples/TwoMoons_FlowMatching.ipynb +++ b/examples/TwoMoons_FlowMatching.ipynb @@ -14,17 +14,16 @@ "metadata": {}, "source": [ "## Table of Contents\n", - " * [Inference Network and Amortizer](#inference_network_and)\n", - " * [Trainer](#trainer)\n", + " * [Simulator](#simulator)\n", + " * [Dataset](#dataset)\n", + " * [Training](#nn-training)\n", " * [Validation](#validation)\n", - "\t * [Global Calibration](#global_calibration)\n", - "\t * [Two Moons Posterior](#two_moons_posterior)\n", " * [Further Experimentation](#further_experimentation)" ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 15, "id": "d5f88a59", "metadata": {}, "outputs": [], @@ -37,6 +36,7 @@ "import keras\n", "\n", "## REMOVE ON PRODUCTION\n", + "# TODO: what is the point of these lines?\n", "import sys\n", "sys.path.append('../')\n", "\n", @@ -65,47 +65,114 @@ "\\end{align}\n", "$$\n", "\n", - "with $x = (x_1, x_2)$ playing the role of \"observables\", $\\alpha \\sim \\text{Uniform}(-\\pi/2, \\pi/2)$, $r \\sim \\text{Normal}(0.1, 0.01)$, and a prior over the 2D parameter vector $\\theta = (\\theta_1, \\theta_2)$:\n", + "with $x = (x_1, x_2)$ playing the role of \"observables\" (data to be learned from), $\\alpha \\sim \\text{Uniform}(-\\pi/2, \\pi/2)$, and $r \\sim \\text{Normal}(0.1, 0.01)$ being latent variables creating noise in the data, and $\\theta = (\\theta_1, \\theta_2)$ being the parameters that we will later seek to infer from new $x$. We set their priors to\n", "\n", "$$\n", "\\begin{align}\n", - "\\theta_1, \\theta_2 \\sim \\text{Uniform}(-1, 1)\n", + "\\theta_1, \\theta_2 \\sim \\text{Uniform}(-1, 1).\n", "\\end{align}\n", "$$\n", "\n", - "This method is typically used for benchmarking simulation-based inference (SBI) methods (see https://arxiv.org/pdf/2101.04653) and any method for amortized Bayesian inference should be capable of recovering the two moons posterior *without* using a gazillion of simulations. Note, that this is a considerably harder task than modeling the common unconditional two moons data set used often in the context of normalizing flows." + "This model is typically used for benchmarking simulation-based inference (SBI) methods (see https://arxiv.org/pdf/2101.04653) and any method for amortized Bayesian inference should be capable of recovering the two moons posterior *without* using a gazillion of simulations. Note, that this is a considerably harder task than modeling the common unconditional two moons data set used often in the context of normalizing flows.\n", + "\n", + "Let's code up the above described `simulator` for use in Bayesflow:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "c1018d12", + "metadata": {}, + "outputs": [], + "source": [ + "# TODO" + ] + }, + { + "cell_type": "markdown", + "id": "8269d95d", + "metadata": {}, + "source": [ + "The thus created simulator is the same as the one available in bayesflow benchmark module:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "373bf602", + "metadata": {}, + "outputs": [], + "source": [ + "simulator = bf.benchmarks.TwoMoons()" + ] + }, + { + "cell_type": "markdown", + "id": "89e64a6f", + "metadata": {}, + "source": [ + "## Dataset " + ] + }, + { + "cell_type": "markdown", + "id": "23d541b8", + "metadata": {}, + "source": [ + "Next, we will create training and validation data for the bayesflow training phase:" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 18, "id": "0b9a9817", "metadata": {}, "outputs": [], "source": [ - "# Set some hyperparameters\n", "num_train_simulations = 10000\n", - "num_val_simulations = 300\n", + "train_data = simulator.sample(batch_shape=num_train_simulations)\n", "\n", - "# Create simulator object\n", - "simulator = bf.benchmarks.TwoMoons()\n", + "num_val_simulations = 300\n", + "val_data = simulator.sample(batch_shape=num_val_simulations)\n", "\n", - "# Create training and validatin data\n", - "train_data = simulator.sample(batch_shape=num_train_simulations)\n", - "val_data = simulator.sample(batch_shape=num_val_simulations)" + "# TODO: show the structure of the training data?" ] }, { "cell_type": "markdown", - "id": "89e64a6f", + "id": "b56c7192", "metadata": {}, "source": [ - "## Dataset and data adapter" + "To make sure BayesFlow knows how to deal with all the just simulated variables, we have to tell which are considered observables to condition on (\"inference_conditions\") and which are variables to infer later on (\"inference_variables\"). For this purpose, we use the `data_adapter` functionality:" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 19, + "id": "e87dcb51", + "metadata": {}, + "outputs": [], + "source": [ + "data_adapter = bf.ContinuousApproximator.build_data_adapter(\n", + " inference_variables=[\"parameters\"],\n", + " inference_conditions=[\"observables\"],\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "0a17f2bb", + "metadata": {}, + "source": [ + "Next, we create the `dataset` object that are used for \n", + "training our deep approximators. In a nutshell, they are a combination of \n", + "our simulated (training) data and the data adapter we just built. \n", + "These datasets will also help use taking care of batching during training." + ] + }, + { + "cell_type": "code", + "execution_count": 20, "id": "698ebdb2", "metadata": {}, "outputs": [ @@ -113,24 +180,24 @@ "name": "stdout", "output_type": "stream", "text": [ + "Number of training batches: 79\n", + "Number of validation batches: 3\n", "Number of training batches: 79\n", "Number of validation batches: 3\n" ] } ], "source": [ - "# Create data adapter and specify which variables will be inferred based on which conditions\n", - "data_adapter = bf.ContinuousApproximator.build_data_adapter(\n", - " inference_variables=[\"parameters\"],\n", - " inference_conditions=[\"observables\"],\n", - ")\n", - "\n", - "# Create data set wrappers to take care of batching during training\n", "batch_size = 128\n", - "train_dataset = bf.datasets.OfflineDataset(train_data, batch_size=batch_size, data_adapter=data_adapter)\n", - "val_dataset = bf.datasets.OfflineDataset(val_data, batch_size=batch_size, data_adapter=data_adapter)\n", "\n", + "train_dataset = bf.datasets.OfflineDataset(\n", + " train_data, batch_size=batch_size, data_adapter=data_adapter\n", + ")\n", "print(f\"Number of training batches: {train_dataset.num_batches}\")\n", + "\n", + "val_dataset = bf.datasets.OfflineDataset(\n", + " val_data, batch_size=batch_size, data_adapter=data_adapter\n", + ")\n", "print(f\"Number of validation batches: {val_dataset.num_batches}\")" ] }, @@ -139,68 +206,109 @@ "id": "2d4c6eb0", "metadata": {}, "source": [ - "## Traing a neural network to approximate all posteriors " + "## Traing a neural network to approximate all posteriors " ] }, { "cell_type": "markdown", - "id": "2c81679f", + "id": "16395d87", "metadata": {}, "source": [ - "### Optimizer and learning rate" + "### Flow matching as a posterior approximator" + ] + }, + { + "cell_type": "markdown", + "id": "ab816c28", + "metadata": {}, + "source": [ + "With the training dataset prepared, we turn our attention to setting up \n", + "the neural network that will learn to infer the posterior over $\\theta$ \n", + "from any observable input $x$ within the scope of our training data. \n", + "We choose to use a flow matching architecture for this example since\n", + "it can deal well with the multimodal nature of the posteriors that some\n", + "observables imply." ] }, { "cell_type": "code", - "execution_count": 20, - "id": "e8d7e053", + "execution_count": 21, + "id": "09206e6f", "metadata": {}, "outputs": [], "source": [ - "epochs = 300\n", - "\n", - "learning_rate = keras.optimizers.schedules.CosineDecay(\n", - " initial_learning_rate=1e-4,\n", - " decay_steps=epochs * train_dataset.num_batches,\n", - " alpha=1e-7,\n", - " warmup_target=1e-3,\n", - " warmup_steps=int(0.1 * epochs * train_dataset.num_batches),\n", - ")\n", - "\n", - "optimizer = keras.optimizers.AdamW(\n", - " learning_rate=learning_rate,\n", - " weight_decay=1e-3\n", + "inference_network = bf.networks.FlowMatching(\n", + " subnet_kwargs=dict(\n", + " depth=6,\n", + " width=256,\n", + " ),\n", ")" ] }, { "cell_type": "markdown", - "id": "16395d87", + "id": "851e522f", "metadata": {}, "source": [ - "### Flow matching as a posterior approximator" + "This inference network is just a general flow matching architecure, not yet adapted to the specific inference task at hand. To achieve this adaptation, we combine the network with our data adapter, which together form an `approximator`. In this case, we need a `ContinuousApproximator` since the target we want to approximate is the posterior of the *continuous* parameter vector $\\theta$." ] }, { "cell_type": "code", "execution_count": 22, - "id": "b1c98fbd", + "id": "96ca6ffa", "metadata": {}, "outputs": [], "source": [ - "# Use flow matching as the most flexible sample currently available\n", - "inference_network = bf.networks.FlowMatching(\n", - " subnet_kwargs=dict(\n", - " depth=6,\n", - " width=256,\n", - " ),\n", - ")\n", - "\n", - "# Wrap flow matching into an \"approximator\" with some additional utilities\n", "approximator = bf.ContinuousApproximator(\n", " inference_network=inference_network,\n", " data_adapter=data_adapter,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "2c81679f", + "metadata": {}, + "source": [ + "### Optimizer and learning rate" + ] + }, + { + "cell_type": "markdown", + "id": "c777d575", + "metadata": {}, + "source": [ + "Before we can start with the actual training, we have to set up our optimizer. \n", + "Below, we show several of the hyperparameters users can adjust in the built-in Keras3 optimizers.\n", + "For this particular example, most of these hyperparameters don't really matter, but \n", + "you should make sure that TODO is not too large." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "e8d7e053", + "metadata": {}, + "outputs": [], + "source": [ + "epochs = 300\n", + "\n", + "# TODO: do we really need to set all of these manually for this simple example?\n", + "\n", + "learning_rate = keras.optimizers.schedules.CosineDecay(\n", + " initial_learning_rate=1e-4,\n", + " decay_steps=epochs * train_dataset.num_batches,\n", + " alpha=1e-7,\n", + " warmup_target=1e-3,\n", + " warmup_steps=int(0.1 * epochs * train_dataset.num_batches),\n", ")\n", + "\n", + "optimizer = keras.optimizers.AdamW(\n", + " learning_rate=learning_rate,\n", + " weight_decay=1e-3\n", + ")\n", + "\n", "approximator.compile(optimizer=optimizer)" ] }, @@ -212,640 +320,22 @@ "### Training" ] }, + { + "cell_type": "markdown", + "id": "82d5cc46", + "metadata": {}, + "source": [ + "We are ready to train our deep posterior approximator on the TwoMoons example:" + ] + }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "id": "0f496bda", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:bayesflow:Fitting on dataset instance of OfflineDataset.\n", - "INFO:bayesflow:Building on a test batch.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 1/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step - loss: 1.0576 - loss/inference_loss: 1.0576\n", - "Epoch 2/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.7235 - loss/inference_loss: 0.7235\n", - "Epoch 3/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.7187 - loss/inference_loss: 0.7187\n", - "Epoch 4/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6837 - loss/inference_loss: 0.6837\n", - "Epoch 5/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6869 - loss/inference_loss: 0.6869\n", - "Epoch 6/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.6809 - loss/inference_loss: 0.6809\n", - "Epoch 7/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6647 - loss/inference_loss: 0.6647\n", - "Epoch 8/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6943 - loss/inference_loss: 0.6943\n", - "Epoch 9/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6511 - loss/inference_loss: 0.6511\n", - "Epoch 10/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6719 - loss/inference_loss: 0.6719\n", - "Epoch 11/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6603 - loss/inference_loss: 0.6603\n", - "Epoch 12/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6497 - loss/inference_loss: 0.6497\n", - "Epoch 13/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6686 - loss/inference_loss: 0.6686\n", - "Epoch 14/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6641 - loss/inference_loss: 0.6641\n", - "Epoch 15/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6610 - loss/inference_loss: 0.6610\n", - "Epoch 16/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6643 - loss/inference_loss: 0.6643\n", - "Epoch 17/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6434 - loss/inference_loss: 0.6434\n", - "Epoch 18/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6587 - loss/inference_loss: 0.6587\n", - "Epoch 19/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6460 - loss/inference_loss: 0.6460\n", - "Epoch 20/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6583 - loss/inference_loss: 0.6583\n", - "Epoch 21/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6375 - loss/inference_loss: 0.6375\n", - "Epoch 22/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6443 - loss/inference_loss: 0.6443\n", - "Epoch 23/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6130 - loss/inference_loss: 0.6130\n", - "Epoch 24/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6325 - loss/inference_loss: 0.6325\n", - "Epoch 25/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6529 - loss/inference_loss: 0.6529\n", - "Epoch 26/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6402 - loss/inference_loss: 0.6402\n", - "Epoch 27/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6470 - loss/inference_loss: 0.6470\n", - "Epoch 28/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6555 - loss/inference_loss: 0.6555\n", - "Epoch 29/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.6400 - loss/inference_loss: 0.6400\n", - "Epoch 30/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6368 - loss/inference_loss: 0.6368\n", - "Epoch 31/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6535 - loss/inference_loss: 0.6535\n", - "Epoch 32/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6230 - loss/inference_loss: 0.6230\n", - "Epoch 33/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6131 - loss/inference_loss: 0.6131\n", - "Epoch 34/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6518 - loss/inference_loss: 0.6518\n", - "Epoch 35/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.6293 - loss/inference_loss: 0.6293\n", - "Epoch 36/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6478 - loss/inference_loss: 0.6478\n", - "Epoch 37/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6190 - loss/inference_loss: 0.6190\n", - "Epoch 38/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6349 - loss/inference_loss: 0.6349\n", - "Epoch 39/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6365 - loss/inference_loss: 0.6365\n", - "Epoch 40/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6084 - loss/inference_loss: 0.6084\n", - "Epoch 41/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6456 - loss/inference_loss: 0.6456\n", - "Epoch 42/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6222 - loss/inference_loss: 0.6222\n", - "Epoch 43/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6212 - loss/inference_loss: 0.6212\n", - "Epoch 44/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6431 - loss/inference_loss: 0.6431\n", - "Epoch 45/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6164 - loss/inference_loss: 0.6164\n", - "Epoch 46/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6159 - loss/inference_loss: 0.6159\n", - "Epoch 47/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6088 - loss/inference_loss: 0.6088\n", - "Epoch 48/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6104 - loss/inference_loss: 0.6104\n", - "Epoch 49/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6349 - loss/inference_loss: 0.6349\n", - "Epoch 50/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6158 - loss/inference_loss: 0.6158\n", - "Epoch 51/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6089 - loss/inference_loss: 0.6089\n", - "Epoch 52/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6147 - loss/inference_loss: 0.6147\n", - "Epoch 53/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6191 - loss/inference_loss: 0.6191\n", - "Epoch 54/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6365 - loss/inference_loss: 0.6365\n", - "Epoch 55/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6185 - loss/inference_loss: 0.6185\n", - "Epoch 56/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6150 - loss/inference_loss: 0.6150\n", - "Epoch 57/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6063 - loss/inference_loss: 0.6063\n", - "Epoch 58/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6159 - loss/inference_loss: 0.6159\n", - "Epoch 59/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5939 - loss/inference_loss: 0.5939\n", - "Epoch 60/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6317 - loss/inference_loss: 0.6317\n", - "Epoch 61/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5847 - loss/inference_loss: 0.5847\n", - "Epoch 62/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.6057 - loss/inference_loss: 0.6057\n", - "Epoch 63/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6124 - loss/inference_loss: 0.6124\n", - "Epoch 64/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6154 - loss/inference_loss: 0.6154\n", - "Epoch 65/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6245 - loss/inference_loss: 0.6245\n", - "Epoch 66/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5899 - loss/inference_loss: 0.5899\n", - "Epoch 67/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5951 - loss/inference_loss: 0.5951\n", - "Epoch 68/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6247 - loss/inference_loss: 0.6247\n", - "Epoch 69/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6150 - loss/inference_loss: 0.6150\n", - "Epoch 70/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6096 - loss/inference_loss: 0.6096\n", - "Epoch 71/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5903 - loss/inference_loss: 0.5903\n", - "Epoch 72/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6115 - loss/inference_loss: 0.6115\n", - "Epoch 73/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6120 - loss/inference_loss: 0.6120\n", - "Epoch 74/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6456 - loss/inference_loss: 0.6456\n", - "Epoch 75/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6208 - loss/inference_loss: 0.6208\n", - "Epoch 76/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6128 - loss/inference_loss: 0.6128\n", - "Epoch 77/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5858 - loss/inference_loss: 0.5858\n", - "Epoch 78/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5983 - loss/inference_loss: 0.5983\n", - "Epoch 79/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6066 - loss/inference_loss: 0.6066\n", - "Epoch 80/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5972 - loss/inference_loss: 0.5972\n", - "Epoch 81/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6155 - loss/inference_loss: 0.6155\n", - "Epoch 82/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6062 - loss/inference_loss: 0.6062\n", - "Epoch 83/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6042 - loss/inference_loss: 0.6042\n", - "Epoch 84/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.6144 - loss/inference_loss: 0.6144\n", - "Epoch 85/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5987 - loss/inference_loss: 0.5987\n", - "Epoch 86/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - loss: 0.5691 - loss/inference_loss: 0.5691\n", - "Epoch 87/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - loss: 0.5947 - loss/inference_loss: 0.5947\n", - "Epoch 88/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5949 - loss/inference_loss: 0.5949\n", - "Epoch 89/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5720 - loss/inference_loss: 0.5720\n", - "Epoch 90/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.6073 - loss/inference_loss: 0.6073\n", - "Epoch 91/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5962 - loss/inference_loss: 0.5962\n", - "Epoch 92/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5984 - loss/inference_loss: 0.5984\n", - "Epoch 93/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6227 - loss/inference_loss: 0.6227\n", - "Epoch 94/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5948 - loss/inference_loss: 0.5948\n", - "Epoch 95/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5941 - loss/inference_loss: 0.5941\n", - "Epoch 96/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.6051 - loss/inference_loss: 0.6051\n", - "Epoch 97/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6040 - loss/inference_loss: 0.6040\n", - "Epoch 98/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6014 - loss/inference_loss: 0.6014\n", - "Epoch 99/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6228 - loss/inference_loss: 0.6228\n", - "Epoch 100/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5883 - loss/inference_loss: 0.5883\n", - "Epoch 101/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.6271 - loss/inference_loss: 0.6271\n", - "Epoch 102/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5967 - loss/inference_loss: 0.5967\n", - "Epoch 103/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5990 - loss/inference_loss: 0.5990\n", - "Epoch 104/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.6030 - loss/inference_loss: 0.6030\n", - "Epoch 105/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6322 - loss/inference_loss: 0.6322\n", - "Epoch 106/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6002 - loss/inference_loss: 0.6002\n", - "Epoch 107/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5825 - loss/inference_loss: 0.5825\n", - "Epoch 108/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5984 - loss/inference_loss: 0.5984\n", - "Epoch 109/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5704 - loss/inference_loss: 0.5704\n", - "Epoch 110/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5858 - loss/inference_loss: 0.5858\n", - "Epoch 111/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6133 - loss/inference_loss: 0.6133\n", - "Epoch 112/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6039 - loss/inference_loss: 0.6039\n", - "Epoch 113/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5814 - loss/inference_loss: 0.5814\n", - "Epoch 114/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6112 - loss/inference_loss: 0.6112\n", - "Epoch 115/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6016 - loss/inference_loss: 0.6016\n", - "Epoch 116/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5653 - loss/inference_loss: 0.5653\n", - "Epoch 117/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5859 - loss/inference_loss: 0.5859\n", - "Epoch 118/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5940 - loss/inference_loss: 0.5940\n", - "Epoch 119/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5958 - loss/inference_loss: 0.5958\n", - "Epoch 120/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6202 - loss/inference_loss: 0.6202\n", - "Epoch 121/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6058 - loss/inference_loss: 0.6058\n", - "Epoch 122/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.6042 - loss/inference_loss: 0.6042\n", - "Epoch 123/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5906 - loss/inference_loss: 0.5906\n", - "Epoch 124/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - loss: 0.5835 - loss/inference_loss: 0.5835\n", - "Epoch 125/300\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5938 - loss/inference_loss: 0.5938\n", - "Epoch 126/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5925 - loss/inference_loss: 0.5925\n", - "Epoch 127/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5819 - loss/inference_loss: 0.5819\n", - "Epoch 128/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.6011 - loss/inference_loss: 0.6011\n", - "Epoch 129/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5838 - loss/inference_loss: 0.5838\n", - "Epoch 130/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - loss: 0.5758 - loss/inference_loss: 0.5758\n", - "Epoch 131/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5886 - loss/inference_loss: 0.5886\n", - "Epoch 132/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5738 - loss/inference_loss: 0.5738\n", - "Epoch 133/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5973 - loss/inference_loss: 0.5973\n", - "Epoch 134/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - loss: 0.5872 - loss/inference_loss: 0.5872\n", - "Epoch 135/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - loss: 0.5528 - loss/inference_loss: 0.5528\n", - "Epoch 136/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 6ms/step - loss: 0.5917 - loss/inference_loss: 0.5917\n", - "Epoch 137/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 6ms/step - loss: 0.5838 - loss/inference_loss: 0.5838\n", - "Epoch 138/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 6ms/step - loss: 0.5975 - loss/inference_loss: 0.5975\n", - "Epoch 139/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - loss: 0.5566 - loss/inference_loss: 0.5566\n", - "Epoch 140/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 6ms/step - loss: 0.5845 - loss/inference_loss: 0.5845\n", - "Epoch 141/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - loss: 0.5740 - loss/inference_loss: 0.5740\n", - "Epoch 142/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 6ms/step - loss: 0.5791 - loss/inference_loss: 0.5791\n", - "Epoch 143/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - loss: 0.6096 - loss/inference_loss: 0.6096\n", - "Epoch 144/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5714 - loss/inference_loss: 0.5714\n", - "Epoch 145/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - loss: 0.6015 - loss/inference_loss: 0.6015\n", - "Epoch 146/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5981 - loss/inference_loss: 0.5981\n", - "Epoch 147/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5907 - loss/inference_loss: 0.5907\n", - "Epoch 148/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5709 - loss/inference_loss: 0.5709\n", - "Epoch 149/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.6002 - loss/inference_loss: 0.6002\n", - "Epoch 150/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5614 - loss/inference_loss: 0.5614\n", - "Epoch 151/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5895 - loss/inference_loss: 0.5895\n", - "Epoch 152/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5427 - loss/inference_loss: 0.5427\n", - "Epoch 153/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5873 - loss/inference_loss: 0.5873\n", - "Epoch 154/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5840 - loss/inference_loss: 0.5840\n", - "Epoch 155/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5818 - loss/inference_loss: 0.5818\n", - "Epoch 156/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5731 - loss/inference_loss: 0.5731\n", - "Epoch 157/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5603 - loss/inference_loss: 0.5603\n", - "Epoch 158/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5819 - loss/inference_loss: 0.5819\n", - "Epoch 159/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5678 - loss/inference_loss: 0.5678\n", - "Epoch 160/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5838 - loss/inference_loss: 0.5838\n", - "Epoch 161/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5831 - loss/inference_loss: 0.5831\n", - "Epoch 162/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5913 - loss/inference_loss: 0.5913\n", - "Epoch 163/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5608 - loss/inference_loss: 0.5608\n", - "Epoch 164/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5889 - loss/inference_loss: 0.5889\n", - "Epoch 165/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5664 - loss/inference_loss: 0.5664\n", - "Epoch 166/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5682 - loss/inference_loss: 0.5682\n", - "Epoch 167/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5821 - loss/inference_loss: 0.5821\n", - "Epoch 168/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5862 - loss/inference_loss: 0.5862\n", - "Epoch 169/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.6008 - loss/inference_loss: 0.6008\n", - "Epoch 170/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5689 - loss/inference_loss: 0.5689\n", - "Epoch 171/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5773 - loss/inference_loss: 0.5773\n", - "Epoch 172/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5783 - loss/inference_loss: 0.5783\n", - "Epoch 173/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5580 - loss/inference_loss: 0.5580\n", - "Epoch 174/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5539 - loss/inference_loss: 0.5539\n", - "Epoch 175/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5797 - loss/inference_loss: 0.5797\n", - "Epoch 176/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5790 - loss/inference_loss: 0.5790\n", - "Epoch 177/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5776 - loss/inference_loss: 0.5776\n", - "Epoch 178/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5956 - loss/inference_loss: 0.5956\n", - "Epoch 179/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5822 - loss/inference_loss: 0.5822\n", - "Epoch 180/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5906 - loss/inference_loss: 0.5906\n", - "Epoch 181/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5709 - loss/inference_loss: 0.5709\n", - "Epoch 182/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5688 - loss/inference_loss: 0.5688\n", - "Epoch 183/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5769 - loss/inference_loss: 0.5769\n", - "Epoch 184/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5767 - loss/inference_loss: 0.5767\n", - "Epoch 185/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5827 - loss/inference_loss: 0.5827\n", - "Epoch 186/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5463 - loss/inference_loss: 0.5463\n", - "Epoch 187/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5641 - loss/inference_loss: 0.5641\n", - "Epoch 188/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5788 - loss/inference_loss: 0.5788\n", - "Epoch 189/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5656 - loss/inference_loss: 0.5656\n", - "Epoch 190/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5685 - loss/inference_loss: 0.5685\n", - "Epoch 191/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5662 - loss/inference_loss: 0.5662\n", - "Epoch 192/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5666 - loss/inference_loss: 0.5666\n", - "Epoch 193/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5749 - loss/inference_loss: 0.5749\n", - "Epoch 194/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5776 - loss/inference_loss: 0.5776\n", - "Epoch 195/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5611 - loss/inference_loss: 0.5611\n", - "Epoch 196/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5618 - loss/inference_loss: 0.5618\n", - "Epoch 197/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5775 - loss/inference_loss: 0.5775\n", - "Epoch 198/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5858 - loss/inference_loss: 0.5858\n", - "Epoch 199/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5459 - loss/inference_loss: 0.5459\n", - "Epoch 200/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5469 - loss/inference_loss: 0.5469\n", - "Epoch 201/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5678 - loss/inference_loss: 0.5678\n", - "Epoch 202/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5738 - loss/inference_loss: 0.5738\n", - "Epoch 203/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5622 - loss/inference_loss: 0.5622\n", - "Epoch 204/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5631 - loss/inference_loss: 0.5631\n", - "Epoch 205/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5479 - loss/inference_loss: 0.5479\n", - "Epoch 206/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5625 - loss/inference_loss: 0.5625\n", - "Epoch 207/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5973 - loss/inference_loss: 0.5973\n", - "Epoch 208/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5775 - loss/inference_loss: 0.5775\n", - "Epoch 209/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5664 - loss/inference_loss: 0.5664\n", - "Epoch 210/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5496 - loss/inference_loss: 0.5496\n", - "Epoch 211/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5628 - loss/inference_loss: 0.5628\n", - "Epoch 212/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5829 - loss/inference_loss: 0.5829\n", - "Epoch 213/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5738 - loss/inference_loss: 0.5738\n", - "Epoch 214/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5697 - loss/inference_loss: 0.5697\n", - "Epoch 215/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5721 - loss/inference_loss: 0.5721\n", - "Epoch 216/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5767 - loss/inference_loss: 0.5767\n", - "Epoch 217/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5690 - loss/inference_loss: 0.5690\n", - "Epoch 218/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5879 - loss/inference_loss: 0.5879\n", - "Epoch 219/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5928 - loss/inference_loss: 0.5928\n", - "Epoch 220/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5755 - loss/inference_loss: 0.5755\n", - "Epoch 221/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5508 - loss/inference_loss: 0.5508\n", - "Epoch 222/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5565 - loss/inference_loss: 0.5565\n", - "Epoch 223/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5820 - loss/inference_loss: 0.5820\n", - "Epoch 224/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5784 - loss/inference_loss: 0.5784\n", - "Epoch 225/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5681 - loss/inference_loss: 0.5681\n", - "Epoch 226/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5949 - loss/inference_loss: 0.5949\n", - "Epoch 227/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5568 - loss/inference_loss: 0.5568\n", - "Epoch 228/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5664 - loss/inference_loss: 0.5664\n", - "Epoch 229/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5786 - loss/inference_loss: 0.5786\n", - "Epoch 230/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5736 - loss/inference_loss: 0.5736\n", - "Epoch 231/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5573 - loss/inference_loss: 0.5573\n", - "Epoch 232/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5734 - loss/inference_loss: 0.5734\n", - "Epoch 233/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5726 - loss/inference_loss: 0.5726\n", - "Epoch 234/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 8ms/step - loss: 0.5711 - loss/inference_loss: 0.5711\n", - "Epoch 235/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5618 - loss/inference_loss: 0.5618\n", - "Epoch 236/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5809 - loss/inference_loss: 0.5809\n", - "Epoch 237/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5545 - loss/inference_loss: 0.5545\n", - "Epoch 238/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5691 - loss/inference_loss: 0.5691\n", - "Epoch 239/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5673 - loss/inference_loss: 0.5673\n", - "Epoch 240/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5734 - loss/inference_loss: 0.5734\n", - "Epoch 241/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5437 - loss/inference_loss: 0.5437\n", - "Epoch 242/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5750 - loss/inference_loss: 0.5750\n", - "Epoch 243/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5455 - loss/inference_loss: 0.5455\n", - "Epoch 244/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5651 - loss/inference_loss: 0.5651\n", - "Epoch 245/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5642 - loss/inference_loss: 0.5642\n", - "Epoch 246/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5650 - loss/inference_loss: 0.5650\n", - "Epoch 247/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5721 - loss/inference_loss: 0.5721\n", - "Epoch 248/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5503 - loss/inference_loss: 0.5503\n", - "Epoch 249/300\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5495 - loss/inference_loss: 0.5495\n", - "Epoch 250/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5582 - loss/inference_loss: 0.5582\n", - "Epoch 251/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5692 - loss/inference_loss: 0.5692\n", - "Epoch 252/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5473 - loss/inference_loss: 0.5473\n", - "Epoch 253/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5550 - loss/inference_loss: 0.5550\n", - "Epoch 254/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5640 - loss/inference_loss: 0.5640\n", - "Epoch 255/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5636 - loss/inference_loss: 0.5636\n", - "Epoch 256/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5571 - loss/inference_loss: 0.5571\n", - "Epoch 257/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5639 - loss/inference_loss: 0.5639\n", - "Epoch 258/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5401 - loss/inference_loss: 0.5401\n", - "Epoch 259/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5829 - loss/inference_loss: 0.5829\n", - "Epoch 260/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5584 - loss/inference_loss: 0.5584\n", - "Epoch 261/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5559 - loss/inference_loss: 0.5559\n", - "Epoch 262/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5538 - loss/inference_loss: 0.5538\n", - "Epoch 263/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5655 - loss/inference_loss: 0.5655\n", - "Epoch 264/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5604 - loss/inference_loss: 0.5604\n", - "Epoch 265/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5583 - loss/inference_loss: 0.5583\n", - "Epoch 266/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5784 - loss/inference_loss: 0.5784\n", - "Epoch 267/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5724 - loss/inference_loss: 0.5724\n", - "Epoch 268/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5648 - loss/inference_loss: 0.5648\n", - "Epoch 269/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5489 - loss/inference_loss: 0.5489\n", - "Epoch 270/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5633 - loss/inference_loss: 0.5633\n", - "Epoch 271/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5579 - loss/inference_loss: 0.5579\n", - "Epoch 272/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5891 - loss/inference_loss: 0.5891\n", - "Epoch 273/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5559 - loss/inference_loss: 0.5559\n", - "Epoch 274/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - loss: 0.5308 - loss/inference_loss: 0.5308\n", - "Epoch 275/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5485 - loss/inference_loss: 0.5485\n", - "Epoch 276/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5446 - loss/inference_loss: 0.5446\n", - "Epoch 277/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5813 - loss/inference_loss: 0.5813\n", - "Epoch 278/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5753 - loss/inference_loss: 0.5753\n", - "Epoch 279/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5563 - loss/inference_loss: 0.5563\n", - "Epoch 280/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5661 - loss/inference_loss: 0.5661\n", - "Epoch 281/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5506 - loss/inference_loss: 0.5506\n", - "Epoch 282/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5546 - loss/inference_loss: 0.5546\n", - "Epoch 283/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5459 - loss/inference_loss: 0.5459\n", - "Epoch 284/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5560 - loss/inference_loss: 0.5560\n", - "Epoch 285/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5523 - loss/inference_loss: 0.5523\n", - "Epoch 286/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5789 - loss/inference_loss: 0.5789\n", - "Epoch 287/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5543 - loss/inference_loss: 0.5543\n", - "Epoch 288/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5763 - loss/inference_loss: 0.5763\n", - "Epoch 289/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5582 - loss/inference_loss: 0.5582\n", - "Epoch 290/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5789 - loss/inference_loss: 0.5789\n", - "Epoch 291/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5670 - loss/inference_loss: 0.5670\n", - "Epoch 292/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5488 - loss/inference_loss: 0.5488\n", - "Epoch 293/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.5429 - loss/inference_loss: 0.5429\n", - "Epoch 294/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5690 - loss/inference_loss: 0.5690\n", - "Epoch 295/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5549 - loss/inference_loss: 0.5549\n", - "Epoch 296/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5652 - loss/inference_loss: 0.5652\n", - "Epoch 297/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5582 - loss/inference_loss: 0.5582\n", - "Epoch 298/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5554 - loss/inference_loss: 0.5554\n", - "Epoch 299/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5657 - loss/inference_loss: 0.5657\n", - "Epoch 300/300\n", - "\u001b[1m79/79\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.5631 - loss/inference_loss: 0.5631\n" - ] - } - ], + "outputs": [], "source": [ + "# TODO: can we show the training less verbosely? 300 epochs create a lot of output in an ipy notebook\n", "history = approximator.fit(\n", " epochs=epochs,\n", " dataset=train_dataset,\n", @@ -859,37 +349,24 @@ "id": "b90a6062", "metadata": {}, "source": [ - "## Validation \n", - "We can use simulation-based calibration(SBC) for free (due to amortization) checking of computational faithfulness.\n", - "\n", - "1. Talts, S., Betancourt, M., Simpson, D., Vehtari, A., & Gelman, A. (2018). Validating Bayesian inference algorithms with simulation-based calibration. arXiv preprint arXiv:1804.06788.\n", - "2. Säilynoja, T., Bürkner, P. C., & Vehtari, A. (2022). Graphical test for discrete uniformity and its applications in goodness-of-fit evaluation and multiple sample comparison. Statistics and Computing, 32(2), 32." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f76289b3", - "metadata": {}, - "outputs": [], - "source": [ - "# TODO" + "## Validation " ] }, { "cell_type": "markdown", - "id": "e9ee69a1", + "id": "ca62b21d", "metadata": {}, "source": [ "### Two Moons Posterior \n", "\n", - "The two moons posterior at point $x = (0, 0)$ should resemble two crescent shapes. Below, we plot the corresponding posterior samples and posterior density. These results suggest that our spline flow setup can approximate the expected analytical posterior fairly well." + "The two moons posterior at point $x = (0, 0)$ should resemble two crescent shapes. Below, we plot the corresponding posterior samples and posterior density. \n", + "These results suggest that our flow matching setup can approximate the expected analytical posterior well." ] }, { "cell_type": "code", - "execution_count": 24, - "id": "065384db", + "execution_count": 25, + "id": "8562caeb", "metadata": {}, "outputs": [ { @@ -898,13 +375,13 @@ "(-0.5, 0.5)" ] }, - "execution_count": 24, + "execution_count": null, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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tTqawKu4uFgMHTpUjBs3rs1omB/96EdCp9N5ZXKt2267Tdx9991tttfU1Ihly5aJmJgY4efnJ1JSUsSmTZtc7gdALFiwoN1ruHsuIYT47LPPHN9r8i5JCCG8n7YQkbetWrUKq1evhtFodNmLnrrHYrFg7NixGDBgAD799NOeLo7HfPDBB3jggQdQUFDg1JfGXTt27MCcOXNw/PhxR21Sd2RkZOD8+fPYv39/t89FyrAJg4ioCx5++GHMmDED/fv3R2lpKd544w2cOXMGa9eu7emiedR9992Hb33rW1izZg3+9Kc/KT4+MzMTCxYsuC7JQ35+PjZv3tzlpkvqHiYQRERdUFNTgyeeeAJGoxFarRbjxo3Djh07cMcdd/R00TxKkiT87W9/w7Zt2yDLstOU1u546aWXrltZCgsL8ac//Qm33nrrdTsnuY9NGERERKQYh3ESERGRYkwgiIiISDEmEERERKRYn0sghBCorq4Gu3YQERF5Tp9LIGpqaqDX61FTU9PTRVFMlmWUlpZCluWeLsoNgzH3Psbc+xhz77sRYt7nEggiIiLyPCYQREREpBgTCCIiIlKMCQQREREpxgSCiIiIFGMCQURERIoxgSAiIiLFmEAQERGRYkwgiIiISDEmEERERKQYEwgiIiJSjAkEERERKcYEgoiIiBRjAkFERESKMYEgIiIixZhAEBERkWJMIIiIiEgxJhBERESkGBMIIiIiUowJBBERESnGBIKIiIgUYwJBREREijGBICIiIsWYQBAREZFiTCCIiIhIMSYQREREpJhXEoh169Zh8ODB8Pf3x/jx47Fv3z63jtu/fz80Gg3Gjh3r2QISERGRIh5PIDZv3ozly5fj6aefRk5ODm677TbcddddKCws7PA4k8mERYsWYfr06Z4uIhERESnk8QTilVdewcMPP4wf/vCHGDFiBF577TXExcXhz3/+c4fHPfLII1i4cCEmTZrk6SISERGRQhpPnrypqQlHjx7FypUrnbbPnDkTBw4caPe49evXIz8/H2+//Taef/75Dq/R2NiIxsZGx+vq6moAgCzLkGW5G6X3PlmWIYTwuXL7Msbc+xhz72PMvc+XY65SuVe34NEEory8HDabDdHR0U7bo6OjUVpa6vKYc+fOYeXKldi3bx80ms6Lt2bNGqxevbrNdqPRiIaGhq4VvIfIsgyTyQQhhNsfIHUPY+59jLn3Mebe58sxj4mJcWs/jyYQdpIkOb0WQrTZBgA2mw0LFy7E6tWrcdNNN7l17qeeegorVqxwvK6urkZcXBwMBgNCQ0O7V3Avk2UZkiTBYDD43BfOVzHm3seYex9j7n03Qsw9mkBERkZCrVa3qW0oKytrUysBADU1Nfjyyy+Rk5ODxx57DMA31UAajQaffvoppk2b5nSMTqeDTqdrcy6VSuWTH5okST5bdl/FmHsfY+59jLn39fWYe/Su/Pz8MH78eOzevdtp++7duzF58uQ2+4eGhuLkyZM4duyY48/SpUuRmJiIY8eOITU11ZPFJSIiIjd5vAljxYoVyMjIwC233IJJkybhr3/9KwoLC7F06VIAzU0Qly9fxltvvQWVSoXk5GSn46OiouDv799mOxEREfUcjycQDzzwACoqKvDcc8+hpKQEycnJ2LFjBxISEgAAJSUlnc4JQURERL2LJIQQPV2I66m6uhp6vR4mk8knO1GWlZUhKiqqz7aZ9TaMufcx5t7HmHvfjRDzvnlXRERE5FFMIIiIiEgxJhBERESkGBMIIiIiUowJBBERESnGBIKIiIgUYwJBREREijGBICIiIsWYQBAREZFiTCCIiIhIMSYQREREpBgTCCIiIlKMCQQREREpxgSCiIiIFGMCQURERIoxgSAiIiLFmEAQERGRYkwgiIiISDEmEERERKQYEwgiIiJSjAkEERE5ySs04pWNmcgrNPZ0UagXYwJBRNSDeuPDelvmKbz7yVFsyzzV00WhXkzT0wUgIrqR2R/WALBicVoPl6ZZelqy099ErjCBICK6zvIKjdiWeQrpackYFm/ocN/e+LAeFm/oNckM9V5swiAius6UNAHYH9adJRpEvQ0TCCKi6yw9LRkLZ49XXKvgqj9ET/aR6I39M6j3YAJBRHSdtVer0NkD2VXNRett9nN8dihX8cM9/1K5omPYmZI6wj4QREQelldoxPqtWcg+cwnFZdUAnDtM2t+vqqlHfP8wvLXtMAz9gjBp7GBUVJmRmpKAiiozPjuUi5c3ZOJMfimCA3Woa2hC/qVyDI2LxJjEWOzJOoeqmnqEhQRgybxUDIs3XOuPcRJp4wYgM/sy3v0kG0BzLUln/TR6Y/8M6j0kIYTo6UJcT9XV1dDr9TCZTAgNDe3p4igiyzLKysoQFRUFlYqVQ97AmHtfX4p5R50lW763fmsW3tp2BBKA6MgQ/O7xuZg+MdGx76Kn/old+89CrZLg769FrbkJQQFa6Pw0qDE3YlBsOErKa6BWSTDVNgAAVBIgSRIiwgJhscqQhUBdgwUWiw3+fhpkpH8Ll0orsT/nAmSbDclDwmCT/FHfaMHIof1RY27AnqxzGJ5gwN9WL3Aqf8uyA3C7Qyh9oy99z9vDGggiok60lyi0NwQzr9CI/3vh38i9YMSxs0U48XUxVJKEfvoANFls2JN1zqm2IPt0EYQAbLLAzYkDkH2mCHX1FpjrLQCAoismWGUZFovNcQ2VSgWbLKPsqhmSBLT8KdhoseKf24+godHavK8E1DdYcepCEWQBnD1fBo1ajSaLDbkXruDVt/bifFEFhgyMwOOLbsf6rVl4f2cOKqrMiAgLwrufHHX82x4DJSNNqG9iAkFE1Al7otD6IdpeFf+2zFP46lwpGi1WZGblodFiRYBOCyEEGptsyDx8DqXlNbBYbdBq1IjQByAoQItBseEoKKlEQ5MNAs0PfgFAFgJhIf4or6yDShKwyYDVJjuu17oeWQg4kgdXbLKATW5+X61S4eO9X6G+0YLs05dwOr8EI4f2BwBU1dQDAGZNSQIAp2SpZfLkTnMI9T1MIIiIWmn969qeIFRUmbHxo8PYn3MeL65IbzNfgr0vw6XSSkiSBCGAJkvzg7q+0YJ6Y3ONgqmmHgOi9aita0KTxYqCkioAQG6BEVbrN4nBwJgwXL5igtVqg/GqGQBgu86Nzk1WG4RortkQAjidfwWNTTbMnJKEnDNFKCi+iv6GUIQE+SM1JQHpacnIKzQ69c1YvzULu/afBdB7JsMiz2MCQUTUSuumCXuikFdoxNkLV5BXWI5tmacc27ZlnsKYxFi8vGEPjp25DJssIF07l6vnvU0WuFRa1abmoGXyoJKA8kozbLJnu6m5qr24ePkqdH5q5F8qhxBA4bUE53ReKbbtOQmbLCPQ3w9jkgbgi+zzCNcHwBAejDGJsQCUTaRFvosJBBFRK+01TQyLN+DFFemOh2NzX4cPro2K8MNVU53jgd/ZY7+z7uuyAOoaLF29hW4RQsbZ82VtkwsAjdf6YVSbG1FcVoWKKjOMV2shAGz57wlMn5jYK6fnpuuPCQQRUSsdTeU8LN6AMYmxWPTUP1FibO7HYLXaeuxh35pWo4KlRU1GVzR3r+i85iP/0lUAcHTi/OzQ13h67ceYljocFVVmVFSZkVdoZC1EH8UEgojITfaq+e17TyKvsAIAoFZJ8HArAwDAT6tGSKAOtfVN8NOo0GSxwWqzwdYqV2idPEho7igpwTN0fhpYLDYICFRV12HTjqOICAtyjN6ICAtiLUQfxQSCiMhNr761F9syTyFCH+DY5ok+CjqtBpCAxqZvRlJMGB2PEUNiUFVTj/NF5SgsrkRdQxPM9RZo1CpoNWr4adWoqWtEdEQwggN0uFxmQl2DBQH+Gqg1Kvj7aaDValBb13jdym0vY5C/FgJA4uBop6afMYmxeGVjJvtD9EFMIIiI3HQ6vxSNTVZUVNVDpZIgX8fkwU+rRnz/MJRW1ODmxAE4dKLA6f2vL5Yh/1IFJAmoqq5HWGgAdDYtNBo1VJKEIXGRaGhsQkFxFeZMTcaSeamY9eM/A2juSzFoQDjGp9wEQML6rVkABFQSoNE0zwfRXQ1NViQNiYahXxDWb81yNGO8vCETxWUmAOwP0dcwgSAiuqbliIrjucVtfjXHxYThq7xSNFmtnXaCdIcEIMBfg4YmG6alDoe5vgkXiipR12jB9Ik3Ifv0JWjUKhir6jBuZByMlWacyL0MSZIw5eYhjimsj+cWI/9SOf6z7zQSYsMBAOu3ZkFCc2KSmhKPR747GWNGDcf5ogp8sPs4rprqoNaoHJNTaTUShJCQEBsGq1VGhakO9Q0Wt2sqbLLAmfxSnD1/BQH+Wpy9cAUncothk2XcPGIgp8Pug/rm/JpERF1gHz2w7r0vXC4iFRLkD7VKgkqSoNV07X+fWo0KYcH+iAoPwqxbk2C1CcjXhnXGRIZi7IhYPPGDaRibNBD+Oj/MnpqMny9Ow29+cifGjRgInZ8Go2+KxeOLbseKxWmYPjERKxanISwkAGqVCv46rWNOhuGDDPDTapA0OBr9DXrkX2oefjphdDx0fhqEBPo7ukoKAUwaOwjPL5tzrZmjyTEcVa2SEOiv7fTe5GuzaQohcCL3MsJC/HHXbSMdc2YAXOGzL2ENBBHRNfZfyS1rIFoKCwlAgL8WocH+qDU3wk8rYK5v6vCcKpWEkEAd6hstmJY6HGOTBjrOb+gXhEullQAkjBwag6wTBVg4ezymT0x01CS0rAVZMi/VaSbMluzvtSx7VU09Tp0rhammef2MDR9mYdOObCTEhmNR+reQNDgKL775Ga6a6hCuD8RX50qx9Ln3UXNtvQ2geSyGTRZoaHJ/lIl9Cm5TbSMELuJHz76HkUNj8Pii2znEsw9hAkFEdE3L4ZstF7sC4PjFfNdtI1FjbkD26SJcNdU53lepJNjXJgwK8IOfVoNRQ6ORNCQG01KHOzWJvLIxE+9+chQJsf1QY27CwtnjnaaDbl0WV+XrqOwJseGO2hN/Pw30If4oMZqQc/Yymiw2FBRXYu7tychIn4DYKD3WvfcFEgcZ8M/tR9HYZEW4PhD1DU2ot6+l0Y3+Ho5JqPKvOFYJ5RDPvoEJBBGRG+wLTA1LMCD3QhnM9Y0AmudACA7U4dEFU3DVVO/Yf9f+s5gybqjLhMRVTUdHyUFnWs/8aP+VP2tKEn6y4FbMvX0UPvviGErKTBh9U3+MGxHnKMPx3GIUFFci/1I5mixWBAf54fVffwcJseGORbaEkJFz5nK3+n0IIXCptBLD4g0c4tlHMIEgInKTTZbR0GhBQmw/fH2xDACQkjgAf/zV/QDgVINgb2pwpaOajo64uypoy5k0h8UbIMsyalMSUGfVID1ttNOx9n2PnS1CRVUd7rp1pKNMr//6uwCAnz7/L2Sfvux2OVtSSXDMk3Hw2EXkFRqdEigO8fRdTCCIiNywZF4qzl64grPnryA+Nhz3Tk9xVMm3bJYAmh/iSn9Zt0wOAChaPtzVA7n19fsb9FieMRwqlXPnz5brfIxNOtUm6ckrNOJ8UTl0Wg1ssuy0Cqg7WrZ8mGobsPipt+Hnp0ZcTD/sPpjLIZ4+jAkEEZEb7OtgPPnKNuQVlmPGpESXD/GuDFfMKzQ6zmvXUaLgao2OFYvT2iQx7l7bnqy4Omb91izkXihD8k39YegXhP8ezIUsiy7Pvnnu2j2evWBEgE6Lm0cM4BBPH8UEgojITa0X07petmWeQl5hOYbFRzqdt71EoT1dSWKUjIoICfIH8E2tgs5P4zRbphJ+GhViIkPw6IJb2Xzho5hAEBEp0N5DvDvDE1v3WejKOToqGwCUGE14d9fpNn0gxiTGYn/OecdS3K3Zm27yCssxbsRABPj7ocbcCD+tGt9KjsP+nIuO0SdK1DdacaGoAuve+wIJseFMInwQJ5IiInJB6YRH6WnJjuGYStkf/J58iGadKMA/tx251lTyzT3ZR2Eczy1ut2wvrkjH4nsmYMm8VKx69E4kxPbDmuVzMGJIDAJ0GkhdXKnLJgucOlfSZsKuljjxVO/FGggiumG0N4rBFaU1Ct0ZhukNqSkJ+O+Xl3CuoHk2SntZ3Wn2aHlvw+INyEifAOCbuTHe35kDU4vJpzpiX/rbTpZFh9fmxFO9l1dqINatW4fBgwfD398f48ePx759+9rdd8uWLZgxYwYMBgNCQ0MxadIk7Nq1yxvFJKI+zv4w6ugXr113ahR6o/4GPdYsn4vF90xwuqeu1H7YawWA5uGqKpUErbZ5Ua/OBOi0UKm+2a+2rgkHj13A/cvfxGeHctvUOPS1z6Ev8XgNxObNm7F8+XKsW7cOU6ZMwV/+8hfcddddOH36NOLj49vs/7///Q8zZszACy+8gLCwMKxfvx5z585FVlYWbr75Zk8Xl4j6MCWdDHt7jUJXDI2LvC73ZJ9UK/9SOcJCAhARFgRTbQNk0bx2hkoltbsIV12D85TYNlnGU699jCaLDcfOXsadt45A1rWVSO2JTV/7HPoKSXSl94sCqampGDduHP785z87to0YMQL33nsv1qxZ49Y5Ro0ahQceeAC/+c1vOt23uroaer0eJpMJoaGhXS53T5BlGWVlZYiKimozVps8gzH3Psbcu5qbbU4ibdwAjBnVdh6Irnh67ceOWTmNV2thtdlQUlYN6dqU1yqVBLVaBY1KckyH7a7YqFBMuXmI0xwbvuhG+J57tAaiqakJR48excqVK522z5w5EwcOHHDrHLIso6amBuHh4Z4oIhFRn7Yt8xQ27chGoMaKMaOGX5dztly4a0/WOZw537xgV5PFisiwQFhtApWmOqi07j1iVJKEiLBASJIEi8WG0vJqZJ0o4FTXvZxHE4jy8nLYbDZER0c7bY+OjkZpaalb5/jDH/4As9mM+fPnu3y/sbERjY2NjtfV1dUAmhMPWVY2Y1pPk2UZQgifK7cvY8y9jzH3rrm3jwIgY8LoAdct5kMGRmB5xlTkXypH7sUrOJFbDJvNBkkC/LRqJA6OwMFjF2GxWqFya4SGwNUqM2ZOSYK5oQn33J4MY5UZc28f5bPfE1/+nrtbY+KVURhSq441Qog221zZtGkTVq1ahY8++ghRUVEu91mzZg1Wr17dZrvRaERDg3u9gnsLWZZhMpkghOizVV69DWPufYy5d4XogAUzRsBkMqGsrExxzEuMJmSdKEBqSgL6G/RO73246wgazTX49s2xiI8Jw+nzV1BVXQdDqBqpI6NQY25s56yuXb1aAY1Khf1HT2PowEjUVleirMz3HsCAb3/PY2Ji3NrPowlEZGQk1Gp1m9qGsrKyNrUSrW3evBkPP/ww/vWvf+GOO+5od7+nnnoKK1ascLyurq5GXFycYxSHL5FlGZIkwWAw+NwXzlcx5t7HmHtfd2L+7q7T2LTjBOqsGizPcG4CKShrwLH8qxhuVeOppekoKL6KV97KhMYvGJcryh1LeaskCXIn3e1UKkCWry0d/tUVBOgKoNYFtbmmr7gRvuceTSD8/Pwwfvx47N69G/PmzXNs3717N+655552j9u0aRMeeughbNq0CbNnz+7wGjqdDjqdrs12lUrlkx+aJEk+W3ZfxZh7H2PefUrmtAC6HvP0tNEAJKSnJbc5Vh8SAEDCxcuV2L73K6xYnIbMw3nYtCMbOq26eXinRoP6RovLc2s1KliszTUMsg3X/m5ONGxCoKKqDueLKny2I2Vf/557vAljxYoVyMjIwC233IJJkybhr3/9KwoLC7F06VIAzTUIly9fxltvvQWgOXlYtGgR1q5di4kTJzpqLwICAqDX69u9DhHRjcRbEyx1NIxyybxUx7/tK4FW1dTDYrWhyWKFSqVqN3kAmmscWtNp1bDaZESHB+P9nTkAgN/+bE73boI8wuNp0QMPPIDXXnsNzz33HMaOHYv//e9/2LFjBxISEgAAJSUlKCwsdOz/l7/8BVarFT/96U/Rv39/x5+f/exnni4qEZHP6G0TLO3JOudIaGIigtFksaHJYuvwGJuLDCIowA+/eGg6JqQMctrOKa17H690onz00Ufx6KOPunxvw4YNTq/37t3r+QIREbWgtDmgN+iJCZZax2lb5ilHLcHMKUlIiO2HGnMDCktNXb5GVU09jp0twqXSKsyckuSo5eCU1r0P18IgohseH07uaR2n9LRk5F8qx/miCgDA2fNX0NBkhVajghAybDZAQEDRdIWShN0HciELgXB9oCOh68pS5eRZTCCI6IbHh5N7WsdpWLwBQ+MikXWiAONGDERggB+MlWbo/DSIidQ7RmF0JDRIhxpzIwRwLfFono3SEB6Ce6eNxisbMx01Hkzuepe+2TWUiEgBbyyn3RcMizcgPS0Z2zJPtVnsasm8VPzu8bnQh/ijyWJFRZXZrXNWX0seAMBilWG1yUjo3w//eWMpjJVmbPzocJslyKl3YAJBRNQHdNTJMP9SOT787ATyL5V3+zr2Zoz1W7McK3Lak6/pExPxxm/mIyjAD+b69kdfdCb3Yhk+O5SL3QfPIlwfiLzCcrdWUCXvYgJBRNQHdLRU+fa9p/D5l/nYvrf7D2F7jQMAl9ebPjGx09EX7QnQNbeqNzbZ8PxfPsWxM8Xw12nbLEFOvQP7QBAR9QEd9eOYe3syAjVWTL+1+w9he3NPXqEREWFBjuvZR2gY+gUhMiwQV66aoZLgmCjKHfaVO6trm5chmHzzIDy64FZMn5jY7XLT9ccEgoioD+iok+HQuEiETE9BVFSkW+dyZ1hry+vlFRrxfy/8G2fyr0CSAHO9BaOGxSCvoByA8rUsJJWESWMS8MLydMXHkvewCYOIiJx01BzS3v5n8q+gvtGCugYLJAmoNTeg0WLt0vVlWWBb5lecOKqXYw0EERE5cXdYq72mYkxiLEYMjcbxs5dhvbaWRdGVqi5fX5KA0GB/zs3RyzGBICLqQ67HrJqtmyfaO9+2zFPY+NFhDIuPxBM/mIaXN2Qi5/QlyAKwtWi50Gk1kIXsVn+IqPBg3DNtNKalDsfx3GJ2nuzFmEAQEfUhXZlVs7MkwdX58gqNqKgyIzYqFHmF5djy3xNoaLTAX6dBXcM3TRdajQo22QabLCAB6GhSSp2fBk8+PB0Z6RMAgJ0nezkmEEREfUhXZtXsKOlo73zbMk9h1/6zmDUlCTMmBWH3wVyczi9tM221SqVCY5N7fSFkIXD2Qhle2ZiJMYmxjhoITvDVOzGBICLqQ7oy5XNHSUd752t5zLB4A8YkxuLlDZk4frbI0Q8CACxudqQM8tfi7qmjADTPL7E/5zwKiisBsA9Eb8UEgojoBudunwdXx+QVGvH02o9xqbQSxqs1kOVvkgetRuXo99BZ84UsBF7/9Xfx2aFcnL1wBfdOGw1jpZl9IHoxJhBEROSgpA9F8/wPH+BE7mVYbXKb5gtri56UnS3IGRUeDAA4nluMguJKGCvNrHno5ZhAEBGRgzt9KOy1FBVVZpzJL4XVKrtMENxdxjsoQItl35/q6PvQ2fWpd2ACQUREDu70odiWeQpvfnAQktQ86ZOrPEGS3EsgwvWBmD7xJpy9UIZd+88CYJ8HX8GZKImISJH0tGRIkoSyq2Y0tDPCQgKgkpoTCVdUKgnjRg7A4IER+CL7PABg4ezxrHnwIayBICIiRYbFG6AP9kfZ1dp295E7qX0QAggK0CGvsBzD4iOxZF4qh2v6GCYQRETklpYjNIbGRyLvUjkgmmsZOksYWtJqVEhNScCjC27lXA8+jAkEERG55dW39mJb5insPnAGXxeUQ5IkCAi3kwdJAuJiwvDiinTHLJOcbdJ3sQ8EERG55XxROZosNpw8V4oacyMkNK9z4adVd3qsJAH+flpcNdXj5Q178PTaj7nSpo9jDQQREXXI3nSx8O7xCPT3Q+IgA/716XEIWWBM0gAIIXAg50K7NREqqXmdi376AAT6++Hk1yXIvWBERFgQR1z4MNZAEBER8gqNeGVjpstaAfvkUsZKMz547WG8sDwd/3ljKR793m14cUU6RgyJaXe4hQTAX6dFP30gqqrrUV1bD41ahYTYfqioMrMWwocxgSAiIkeSsC3zVJv30tOS2wyxtM8XMSzegCXzUhEZFuh4T6NWQatpbtYwhAfjwTm3YMrNQ2CTBWrrmjBiaAz8dRp8/PlXLq9HvoFNGERE5EgOxiTG4pWNmU4jI1qvlfHqW3txvqgCT/wgDdMnJmJYvAFrn7ofz//lUzQ1WTF2xEBMTEnAh3tO4tEFt2L6xETkFRoRFhLguN7Hn3+FYfGRnPfBhzGBICIiR5LwysZMx1oY6WnJTgtr5RUa8eQr25B1ogAWqw3r3vvCaTTF8dxivPvJUQyNi0RG+gRkpE8A8E0fCvtcD3mFzf0fOHzTtzGBICIih5ZrYbReWGtb5inkFZZjeIIB/jotHl1wa7vHttTyPK2TEvJdTCCIiMihZXNF64Sg5d+uHv7traPRUVJCvksSwt310nxDdXU19Ho9TCYTQkNDe7o4isiyjLKyMkRFRUGlYv9Wb2DMvY8x977eFPOWs1n25RqI3hRzT2ENBBEReY07q32Sb+ibaRERERF5FBMIIiIiUowJBBERESnGBIKIiIgUYwJBREREijGBICIiIsWYQBAREZFiTCCIiIhIMSYQREREpBgTCCIiIlKMCQQREREpxgSCiIiIFGMCQURERIoxgSAiIiLFmEAQERGRYkwgiIiISDEmEERERKQYEwgiIiJSjAkEERERKcYEgoiIiBTzSgKxbt06DB48GP7+/hg/fjz27dvX4f6ff/45xo8fD39/fwwZMgRvvPGGN4pJREREbvJ4ArF582YsX74cTz/9NHJycnDbbbfhrrvuQmFhocv9L1y4gLvvvhu33XYbcnJy8Ktf/QrLli3DBx984OmiEhERkZskIYTw5AVSU1Mxbtw4/PnPf3ZsGzFiBO69916sWbOmzf5PPvkktm3bhjNnzji2LV26FMePH8fBgwc7vV51dTX0ej1MJhNCQ0Ovz014iSzLKCsrQ1RUFFQqti55A2PufYy59zHm3ncjxFzjyZM3NTXh6NGjWLlypdP2mTNn4sCBAy6POXjwIGbOnOm0bdasWXjzzTdhsVig1Wqd3mtsbERjY6PjdXV1NYDmD0+W5etxG14jyzKEED5Xbl/GmHsfY+59jLn3+XLM3U14PJpAlJeXw2azITo62ml7dHQ0SktLXR5TWlrqcn+r1Yry8nL079/f6b01a9Zg9erVbc5jNBrR0NDQzTvwLlmWYTKZIITosxlrb8OYex9j7n2Muff5csxjYmLc2s+jCYSdJElOr4UQbbZ1tr+r7QDw1FNPYcWKFY7X1dXViIuLg8Fg8MkmDEmSYDAYfO4L56sYc+9jzL2PMfe+GyHmHk0gIiMjoVar29Q2lJWVtallsIuJiXG5v0ajQURERJv9dToddDpdm+0qlconPzRJkny27L6KMfc+xtz7GHPv6+sx9+hd+fn5Yfz48di9e7fT9t27d2Py5Mkuj5k0aVKb/T/99FPccsstbfo/EBERUc/weFq0YsUK/P3vf8c//vEPnDlzBo8//jgKCwuxdOlSAM1NEIsWLXLsv3TpUhQUFGDFihU4c+YM/vGPf+DNN9/EE0884emiEhERkZs83gfigQceQEVFBZ577jmUlJQgOTkZO3bsQEJCAgCgpKTEaU6IwYMHY8eOHXj88cfx+uuvIzY2Fv/v//0/3H///Z4uKhEREbnJ4/NAeBvngSAlGHPvY8y9jzH3vhsh5n3zroiIiMijmEAQERGRYkwgiIiISDEmEERERKQYEwgiIiJSjAkEERERKcYEgoiIiBRjAkFERESKMYEgIiIixZhAEBERkWJMIIiIiEgxJhBERESkGBMIIiIiUowJBBERESnGBIKIiIgUYwJBREREijGBICIiIsWYQBAREZFimp4uAJFdXqER67dmAQCWzEvFsHhDD5eIiIjawwSCelxeoRHbMk+hosqM93fmwCbLOHvhCl5ckc4kgoiol2ITBvW4bZmn8O4nRwEA8++8GYmDo5FXWI5tmad6uGRERNQe1kBQj0tPS3b8PSze4KiRGJMYi1c2Zjq2ExFR78EaCPK6vEIjXtmYibxCIwBgWLwB6WnJ2JZ5CnmFRgyLN2DF4jQczy3Gu58cdWxveQwREfUsJhDkdfYmi5ZNFC232ZOFMYmxWDh7PNLTkrF+axb+9O4+/N8L/3ZKIj47lIv7l7+Jzw7l9sStEBHdsNiEQV5nb7IYkxiLp9d+DACYljrc8V7LPhErFqc5jrNYbTiTfwVPvrINL65IBwCsfHU7LpVUAQCmT0z01i0QEd3wmECQ19mbKF7ZmIn3d+YAACLCghzJgqFfEKw2Gz49cAbvfvIlGhotWDIvFYvSv4XsM0U4e745iUgaHI26+ibE9Q/DvdNGs78EEZEXMYGgHpOeloyKKrPj3/bOk9v3nkJxWTWKy6od+760PhMzJydiyMAINDRakHOmCDGRoXj4/kkd1loQEZFnMIGgHhURFoQxibF49a292J9zHmZzExos1jb7ybLAzi/OAgDUKgl+Wg3CQgIcyULLkRxEROR5TCCox9hrDfbnnMehEwWwWGxQqyTYZNHhcTZZoNFiRdLgKMc2e7MIERF5B0dhUI/IKzSiosqM1JQExESGon9kCNQqCbLoOHmwk2WBD/ec9HApiYioPayBII+x92lo3bExr9CI/3vhA+ReuIKE2HBcKKqAuJY4uJM/+PtpEBcThkcX3NrptYiIyDNYA0Ee42q+B/v23AtlsFhlXDWZUddgQX2jtdOmCzuNRoX7Z451GrbZ3rWIiMgzWANBHtNex8YxibFIHByFIQMj8PmRPMXnTRwc7TRqIz0tmZ0oiYi8jAkEeUzrjo0tV900Xq3FkIERCA32R3mVGbKbtQ/6YH/88Vf3Y1i8Aa9szHQauslOlERE3sMEgrxmW+YpbPzoMIIC/FBRWYt/7Tqm+ByBAVpHHwfWOhAR9RwmEOQ1YxJj4adVo6D4KixWuUvnaGyyOf7NoZtERD2HnSjJI1ytnnk8txhNFhtuGhSFqH5BXTrvhNHx16uIRETUDayBII9oObW0fTXNS6WVCNcHol9oAPx1Wtw8cgB27f/arfPptGqkTxuNxxfd7sFSExGRu5hAkEe07J+wLfMUNu3IRn1DEwQAIQsIAGq1+xVgMZEhCAsJ8ExhiYhIMTZhkEe07J+Qf6kcalXzFNTyteQBACQF5yspr8H7O3OwLfOUy+YRIiLyLtZAkMd8digXK1/djrKKWjQ0Wdq876/ToLauqcNz+PtpEB0RjLj+/VBZXY/8S+V49a29+HT/WVRUmfHbn83xVPGJiKgDTCDIY9a99wUulVQhKNAPOqGBEAKNlm9GUXSWPABAQ5MVhSVVCA7yR1FpFYpKqzAsIdKTxSYiIjewCYO6pWVzQuumhXunjUZkv+ZOk7ckx0Gjaft1k9xoxxAAGpusmDR2EIIC/XDHxJvwkwW3Ysm81Ot8N0RE5C7WQFC3tBxtAcBpZsizF8pQYaqHLJthqm2Aub5tM0Zrflo1tGoVzA3f7KtRq3DziIEoLa9GaXkN3vtPDja9tNiji2Zxca7uYfyI+j7WQFC3pKclY+Hs8Y71KBbOHo8xibF4ZWMmqmrqodOqER4aCJ1GDa1G1abGofXqmyqVhKShMY4OljqtBvPuSMF9d6QgJjIUkWFBMF6txfqtWR69Ly7O1T2MH1HfxxoI6pbWs0GmpyXjyVe2Ia+wHHOmjsLsqaPwny9Oo9bceX8HAAj01yLnTBH8/NRostjQZLGitLwax3OLkXWiAHH9w5BXUO6p23HgNNndw/gR9X1MIKjLXFVTr9+ahZwzRUiIDQcAnM4vhdncBI1agtXW8YJZWo0KVdX1kMU3U1ZLkoTJYwchPS0ZFVVmVNXUY9yIOLf7P3S1Kp3TZHcP40fU97EJg7qsvWpqtUoFf50Wu/afRWOTFSqVBEN4MPy06g7PZ7HKsC/KGRyghSQBQgj8c/uXjiaLrBMFiAgLcjsZYFU6EZFnsAaCusxVNfWSeamICAvCmMRYHM8tRv6lclwoqkCJscatc0oSoFZJ8PPToLbeArVKQqWpHu/vzMH8O2929LfoThndwU6AREQdYw0EdZm9mrrlA3ZYvAHpack4nluMMYmxKDGaYJPbb7pQq77pVfnNPyUAEtQqCVqNGiOHxWD+nTdjybzUNtdzt4wAFM1e6amaC86iSUR9hUcTiMrKSmRkZECv10Ov1yMjIwNVVVXt7m+xWPDkk09i9OjRCAoKQmxsLBYtWoTi4mJPFpOus22Zp7Dxo8NY+ep2HDh2scN9A/y1jn/LonlUhlajQl1DE/QhARgaH4knfpCG3/5sTpdrAvIKjXjylW3Y+NFhtxOClqNLric2qRBRX+HRBGLhwoU4duwYdu7ciZ07d+LYsWPIyMhod/+6ujpkZ2fjmWeeQXZ2NrZs2YKvv/4a6enpniwmXWfN1f6RqKtvwtCBEYiNCsW4EQNcThrVcjZKSWque7BYZVitNtTWNaKguBLr3vvC8Yu9K7/gm9fPKMew+Ei3EwJXtSvXg6cSEyIib5OEaD0S//o4c+YMRo4ciUOHDiE1tbnH/KFDhzBp0iScPXsWiYmJbp3nyJEjmDBhAgoKChAfH9/p/tXV1dDr9TCZTAgNDe3WPXibLMsoKytDVFQUVCrfbl367FAu1r33Be6dNhpnL5Qh+8wlnL9Ugcrq+naPUakkQACyENCoVRg0IBw6Pw3KKmqQNCQaL65Id/yCXzh7vKNponV/hc5e2zVvP4m0cQMwZtRwn4+5r+hL33NfwZh7340Qc491ojx48CD0er0jeQCAiRMnQq/X48CBA24nECaTCZIkISwszEMlJU84nluMguJKfLjnJE7kFsNitUHqZN5quUVfCSFkFJeZEBYagKiIEOQVljuSAMC5U2TL2TBXLE5r87q9IYX2ZcYDNVaMGTW82/dMRHQj8VgCUVpaiqioqDbbo6KiUFpa6tY5GhoasHLlSixcuLDd2oTGxkY0NjY6XldXVwNozv5kWe5CyXuOLMsQQvhcuV2Ze/soAAIpN8Xiw89O4n9fnkPZVXOLjpLtk9A8fbVaAkqN1TCbGxAS7A9DWCCGDIzA8oypAOCIk/1ac28fBVmW27zuuIwyJowe0Cdi7iv60vfcVzDm3ufLMXe3xkRxArFq1SqsXr26w32OHDkCAC5/cQohOv0lCjR3qFywYAFkWca6deva3W/NmjUuy2M0GtHQ0NDpdXoTWZZhMpkghPD5Kq8QHbBw1kiUGE2oM5sQHaZFlD7MrWOb53/45m+7zEMnMCM1wfG6xGhC1okCpKYkYOGskQCaqwzt17a/7qiMC2aMgMlkQllZmc/H3Ff0pe+5r2DMvc+XYx4TE+PWfooTiMceewwLFizocJ9BgwbhxIkTuHLlSpv3jEYjoqOjOzzeYrFg/vz5uHDhAvbs2dNhX4annnoKK1ascLyurq5GXFwcDAaDT/aBkCQJBoPB575wreVfKseGD7OQc/YyTuZehsWqLAuXJECtVsFmk6GSVLDJMmS1P2oaVdi+9xTm3p6MzOzL2LTjBOqsGizP6FoTRF+Kua9gzL2PMfe+GyHmihOIyMhIREZGdrrfpEmTYDKZcPjwYUyYMAEAkJWVBZPJhMmTJ7d7nD15OHfuHDIzMxEREdHhdXQ6HXQ6XZvtKpXKJz80SZJ8tuwtbd/7Fd7feQw2WWBYQhRqzQ2oMNWhvtECWydTWgOAJICkIc1NYOcvVcCgD8bTP56J7Xu/wrufZAOQkJ42+trfyR3Gq7NJofpKzH0JY+59jLn39fWYe+yuRowYgTvvvBM/+tGPcOjQIRw6dAg/+tGPMGfOHKcOlElJSdi6dSsAwGq14jvf+Q6+/PJLvPPOO7DZbCgtLUVpaSmamtxbjIl6h/S0ZMy/82Z87+5x+NvqBfje7Fsgy8Kt5AEABICrJjMam6ywyTJSborFnqxzyL9UjllTkhQNg+zu3Auc/ImIqC2PTmX9zjvvYNmyZZg5cyYAID09HX/605+c9snNzYXJZAIAFBUVYdu2bQCAsWPHOu2XmZmJ22+/3ZPFpetoWLwBv/3ZHOQVGrF+axaqaurhr9OirsHi9jlKjDXQqGuhVqthrDTj4LVJqX6y4FYMizfglY2ZTqMtANe1Dd1dGbL1qA4iIvJwAhEeHo633367w31aTkMxaNAgeGhaCvKS1g/w9VuzsPGjw5BlGWpVx4tpuWK1CajVwM1JsRg3YiCAtgmB/W/7jJN5hc3Lfdsf9t1dGZJLUxMRtcXFtOi6Wr81C+/vzEFFlRm//dkcVNXUw2qTIcsCVpu1S+dsbLJi044c7P77o45aBVc1DV2ZcdIdXJqaiKitvtmzg3oVjVoFfbC/y6ms3VVX3+RY0juv0Ij/e+ED/OndfY5tADAmMRbD4iPx6LUmDruO+jDkXyrHh5+dQP6l8q4XjojoBsQaCLqu7Mt522sAwkICEKDTYuaUJJwvqsDRry516bwCwL8/PeZ4fSa/FI0WG6pqvpka2z775fHcYkyf+E1H3Y76MGzfewpHjuWjzqrBisXTulQ2IqIbERMIuq5aV/e3TCgKiq9i8a/eQZPF1qVzV1bXY8OHWbh3egpGDI1B7oUrCAsJcDRnjEmMRUWVGRVVZuQVGt3qRDn39mQEaqyYfmv3mzw6Gy7a285LRNQdbMIgj2q5quXx3GJYbc0TSmnUXWvPsFhlnM4vwRM/SMNjC7+NJfNSHTUMx3OLEREWhF37z7o9ZHNoXCTunZ6CoXGdz23S2XBOTy3VzSXAiag3Yg0EeU16WjKOnS1C9ulLGDcyDrV1jfgi+4Li85zOv4KVr2xDcJA/8i+V4747UhzntxuTGItXNmYiPS2502GYJUYT/rj5CAAJS+altvsrv7PzeGq0RkfnZe0EEfUUjy3n3VO4nHfvZ5+/wRAejFPnSmC12mCTu/419NOqEREWiHB9EH79yEwkxIY7hnPOmTrKsZ89OWj50B0yMAJ/3fRfvPpOFmTRPMdEeyMuvPGwtl/D0C8IH+45iUcX3Oroz+Hq+vZYzpqS5HSfAHptYnGjfM97E8bc+26EmLMGgrzO/kt6TGIstvz3BD4/kgdjZS26mso2WWwoMdagxFiDx57/N3Q6DRoarBg1vHlBmF37z2Lh7PEAmh+4FVVm7Np/FgCwPGMqUlMS8J3yRtinxbZr/cDuaDinu8lF6/1avgbgSHz8tGoUlTZPsGZPINZvzcKmHdnYfTAXC+8eh3d3HIWhXzBSUxKQfeYSci+UQa1SISIsCAA4+RUReRQTCOoxCbHhCAsJQG1dI8JDA9FPH4CYyFDknC6CWcGMlXaSBFTW1EOYBOJj++HFFemO9yqqzHj1rb34z74ziIkMgSE8GGMSYwEA/Q16/H//NxvniyqcHu5KZqDsaN+WScK2zFPY+NFh7M85jxdXpDsdBwBnz1+BVqtGZFgg6hssCArwQ16hEQXFV/H+zmzU1jXi+NnLOH62CFabgEoCQoL9oZZUSBwcjXEjBjolQZz8iog8hQkEeY39QdqyBgAAbLJAo8WK78y8GQBw+GRhl84vBKCSgMBALZY9+G1HTUBVTT22ZZ5CdEQw6hstKCi+ikB/PxzPLUbahG9W8WydBLjT92BMYiyO5xY7khFXNRgt73dMYiz8tGqcOFuM7/1iI2ZMugmSBBj6BWHS2MHYn3MeR7+6hCvlNbDJwnGcub4JptrGa/GSHbU1AoCppgFR4cEYN2KgUx8O1jwQkScxgSCvsT+gZ01JwsLZ49s8mO2v8y+VY1vmKTQ2KZ+50iYL1NZZ8I+tWTh0ogA15gbsO3oeTU1WNDRaEaDTIiG2HyaPHex0/fxL5aioMmPWlCSMSYzF02s/BoB2O1Xa72V/znkUFFc6ym+f2Krl6JDUlAQkxPZzJBvVtQ2orW+EydyA9R8egc0m4+m1n0CtViEhNgzBgTrUNzbXwAgB/Pfg10gcFAm1SoJNFk5NPTqtGrIArDYbNu3IBgD89mdzFMeNiEgpJhDkNS1/0bd8KLd+4L3+6+/ifFE5jn5V1OVrfZVXiq/ySh2vNWoVausa4a/T4qF5qchIb15iXpabh5Vu+DAL7+88hvl33ozjucXYtCMbFqvNUb7PDuVi3Xtf4NEFtyIhNtyRbExLHY49WedQUWV2TOMNNNd6nC+qwMih0Th2pggXSyoRFOCHsqs1qKqpdyQBtmvDWhuuJUun88sgoblmwc5qk/FVfhkAQKtRwWqVHe/LAhieEIn8wgpYbLLTxFpERJ7EBIK8RsmaEk/8YBp+/tKHqKiqQ3CAHxotVtTWdX1Jd6tNhtUmo66huXbCWGmGEDLe/OAgEuNCofILBND84L9UWgkhZEjXXj+99mN88r+vUGqswVVTHWrrGlFd24Ah1+aOuFRaiT1Z5xATGYKBMWEIDw3Azi/OwFzfhJBAHUy1DQCAnV+cba94TjrqS2qxyk6vmyw2+Ov8MGp4f+ReKHOaWKs3jsAgor6DCQT1Sgmx4Zj97W+GYL7z8Zdt9lFJgEolwWpTNnwjv8CI3/39v1CpJEAI1ITrcOaMEf1CA1BiNOHgsYuwyQJBAVocO1OEgpJKqFUqxPUPQ1OTFQXFlVCpJBw7U4QTuZehUavQZLGhsKQKABxNDX5aNeoaup70qFSABMAmt/O+JCGyXxCe+EEaEmLDnTpqcgQGEXkaEwjqlbZlnsKu/Wcd8xsMHhiBry+WOVXfR/YLwriRcdi1/6yiIaAN16bSluXmUQxAc1NC2VUzKkwFjjkp6hosOFdYDo1aQv/IENQ3WFBjbXAcCzT3uWhdK2A/vqtTdtvJ7SQOANDfEILYKD2e+ME0xzBPe7LA5ceJyBuYQFCvZH/42UcwzJqShHB9IE6dK4FWowIgQQiBkCB/GPoFo7yyFpAkyLJAkL8WQYF+KLtqVnxdW4uf+/akRFKpUFha1eV5Kq43lUpCuD4IhcWVWPnqdvzucTgtHsblx4nIG5hAUK9kfwjmFRqdVvdsOemSfYikEAJarQaNTVaoVBJUahUsVhlajapN7UBXWLpZk3C9qFTStWYbFUYOjUFtXSMulVRh3XtfOCUQRETe0Dfn16Q+o+ViXPZ/FxRfxZOvbIOhX/OMi/Gx/RDor0VUeDB0WjVqzI2w2mT0Cwno4dJ3n6FfEIID/SABiI4Ixrw7xuCeaaMRFhKAZQ9+G1PGDcajC27t6WIS0Q2INRDkc9a99wUO5FxEYUklhABmTUnCuBFxyD5ThJNfFwMA6uqb0ORiHgmV1Dz0sSf5aVRoaqdmRAIQGqzDpLGDERfTD0mDo/CHjZloaLKixtzkWDX03U+OIiIsCB+89rAXS05E9A0mEORz7L+47502GsZKs2PkQXGZCWEhATBW1sImC8iiuelBp1Wj0d4MIUnQqCTHsuKeJklA/8gQWKwyKqrMUKlUCAsNcPTP0KhV8NdpYLPJ8NNokJIU65iCe1vmKby7Ixul5TWIiQzB7G+P4jTVRNRrMIEgnzN9YmKbNv/0tGRUVJlx4NgFGCtrAXwznHJYggH+Oi2Ony2CTRbdWvlTCZUk4eaRA/HHX92PV9/aiw92H4fVJqPa3IhRw6JRYqxBpakOtXVN0GpUuCW5OXkYFm9wrLKZmpKAQH+t06qcAIdnElHPYwJBfcKweAMiwoJQVlGDQH8tmiw2pKYkoL7RiiEDI3DfHSl4ecMenMm/An+dFlU19fDTqKG2j+NEcyfFsBB/NFlsHU5aJUlod0SGPtgf+hB/FF0xQfrm1DhfVHFt2KiEcH0gfv3ILDz/l09x1VQHALhpUJQjeQDan7WTiKi3YAJBfUZ6WjL255zH2fNXMG5ktNNql0PjIvHHX30H67dmOaZ7DgsJQFFpJUpKS6FRqzA6MRbjRsRh045sR5IQrg9AZXXz1NNqlQRJAqRrmUG/0ABM/dZwDBkYjn9u/xIpN8UiLqYfPv78K9w8YiAAoLjMhG2Zp/DED9Lw8oZMNDQ24aqpHsdzizFyaAzOFRgxPMGAv61e4JQocCgmEfV2TCCozxgWb8CjC251rFkxLN7Q5pd8RFgQdu0/i4Wzx2PF4jScKyjDOx/+Dxr/cnzvrnE4e6EMt44bjPzCcvj5afDQvFS8uyMbJ78uhkatwoihMRgyMALniypQXGbC0LhIrFichp//YDoAtDvsdFi8AdMnJjpNMw0AQ+MiWctARD6JCQT1Kcdzi1FQXInjucWYPjGxzS/51rM0Do2LRExkKIxXL+LDPSdRUFwJQ3gwyq7WYv6dNyMjfQImjR3stMrmsHhDm0TAFVe1CK23sZaBiHwVEwjqUzqbxtnVQz01JQF1Vg3GJA7A8dxi5F8qR16B0emY1iuGttfEwHUoiOhGwQSC+pSu9B3ob9BjecZwqFQqRzODvWlBKa5DQUQ3CiYQRK10pwMjOz8S0Y2CU1kTERGRYkwgiIiISDEmEERERKQYEwgiIiJSjAkEERERKcYEgoiIiBRjAkFERESKMYEgIiIixZhAEBERkWJMIIiIiEgxJhBERESkGBMIIiIiUowJBBERESnGBIKIiIgUYwJBREREijGBICIiIsWYQBAREZFiTCCIiIhIMSYQREREpBgTCCIiIlKMCQQREREpxgSCiIiIFGMCQURERIp5NIGorKxERkYG9Ho99Ho9MjIyUFVV5fbxjzzyCCRJwmuvveaxMhIREZFyHk0gFi5ciGPHjmHnzp3YuXMnjh07hoyMDLeO/fDDD5GVlYXY2FhPFpGIiIi6QOOpE585cwY7d+7EoUOHkJqaCgD429/+hkmTJiE3NxeJiYntHnv58mU89thj2LVrF2bPnu2pIhIREVEXeSyBOHjwIPR6vSN5AICJEydCr9fjwIED7SYQsiwjIyMDv/jFLzBq1KhOr9PY2IjGxkbH6+rqasd5ZFnu5l14lyzLEEL4XLl9GWPufYy59zHm3ufLMVep3Guc8FgCUVpaiqioqDbbo6KiUFpa2u5xL774IjQaDZYtW+bWddasWYPVq1e32W40GtHQ0OB+gXsBWZZhMpkghHD7A6TuYcy9jzH3Psbc+3w55jExMW7tpziBWLVqlcsHdktHjhwBAEiS1OY9IYTL7QBw9OhRrF27FtnZ2e3u09pTTz2FFStWOF5XV1cjLi4OBoMBoaGhbp2jt5BlGZIkwWAw+NwXzlcx5t7HmHsfY+59N0LMFScQjz32GBYsWNDhPoMGDcKJEydw5cqVNu8ZjUZER0e7PG7fvn0oKytDfHy8Y5vNZsPPf/5zvPbaa7h48WKbY3Q6HXQ6XZvtKpXKJz80SZJ8tuy+ijH3Psbc+xhz7+vrMVecQERGRiIyMrLT/SZNmgSTyYTDhw9jwoQJAICsrCyYTCZMnjzZ5TEZGRm44447nLbNmjULGRkZWLJkidKiEhERkYd4rA/EiBEjcOedd+JHP/oR/vKXvwAAfvzjH2POnDlOHSiTkpKwZs0azJs3DxEREYiIiHA6j1arRUxMTIejNoiIiMi7PFqv8s4772D06NGYOXMmZs6ciZSUFPzzn/902ic3Nxcmk8mTxSAiIqLrzGM1EAAQHh6Ot99+u8N9hBAdvu+q3wMRERH1rL7Zs4OIiIg8igkEERERKcYEgoiIiBRjAkFERESKMYEgIiIixZhAEBERkWJMIIiIiEgxJhBERESkGBMIIiIiUowJBBERESnGBIKIiIgUYwJBREREijGBICIiIsWYQBAREZFiTCCIiIhIMSYQREREpBgTCCIiIlKMCQQREREpxgSCiIiIFGMCQURERIoxgSAiIiLFmEAQERGRYkwgiIiISDFNTxfgehNCAACqq6t7uCTKybKMmpoa+Pv7Q6VibucNjLn3Mebex5h7n6/HPCQkBJIkdbhPn0sgampqAABxcXE9XBIiIiLfZDKZEBoa2uE+krD/ZO8jZFlGcXGxW9lTb1NdXY24uDhcunSp0w+Org/G3PsYc+9jzL3P12N+Q9ZAqFQqDBw4sKeL0S2hoaE++YXzZYy59zHm3seYe19fjrnvNcwQERFRj2MCQURERIoxgehFdDodnn32Weh0up4uyg2DMfc+xtz7GHPvuxFi3uc6URIREZHnsQaCiIiIFGMCQURERIoxgSAiIiLFmEAQERGRYkwgelhlZSUyMjKg1+uh1+uRkZGBqqoqt49/5JFHIEkSXnvtNY+Vsa9RGnOLxYInn3wSo0ePRlBQEGJjY7Fo0SIUFxd7r9A+Zt26dRg8eDD8/f0xfvx47Nu3r8P9P//8c4wfPx7+/v4YMmQI3njjDS+VtO9QEvMtW7ZgxowZMBgMCA0NxaRJk7Br1y4vlrZvUPo9t9u/fz80Gg3Gjh3r2QJ6GBOIHrZw4UIcO3YMO3fuxM6dO3Hs2DFkZGS4deyHH36IrKwsxMbGeriUfYvSmNfV1SE7OxvPPPMMsrOzsWXLFnz99ddIT0/3Yql9x+bNm7F8+XI8/fTTyMnJwW233Ya77roLhYWFLve/cOEC7r77btx2223IycnBr371KyxbtgwffPCBl0vuu5TG/H//+x9mzJiBHTt24OjRo0hLS8PcuXORk5Pj5ZL7LqUxtzOZTFi0aBGmT5/upZJ6kKAec/r0aQFAHDp0yLHt4MGDAoA4e/Zsh8cWFRWJAQMGiFOnTomEhATx6quveri0fUN3Yt7S4cOHBQBRUFDgiWL6tAkTJoilS5c6bUtKShIrV650uf8vf/lLkZSU5LTtkUceERMnTvRYGfsapTF3ZeTIkWL16tXXu2h9Vldj/sADD4hf//rX4tlnnxVjxozxYAk9jzUQPejgwYPQ6/VITU11bJs4cSL0ej0OHDjQ7nGyLCMjIwO/+MUvMGrUKG8Utc/oasxbM5lMkCQJYWFhHiil72pqasLRo0cxc+ZMp+0zZ85sN74HDx5ss/+sWbPw5ZdfwmKxeKysfUVXYt6afenp8PBwTxSxz+lqzNevX4/8/Hw8++yzni6iV/S5xbR8SWlpKaKiotpsj4qKQmlpabvHvfjii9BoNFi2bJkni9cndTXmLTU0NGDlypVYuHBhn10kp6vKy8ths9kQHR3ttD06Orrd+JaWlrrc32q1ory8HP379/dYefuCrsS8tT/84Q8wm82YP3++J4rY53Ql5ufOncPKlSuxb98+aDR949HLGggPWLVqFSRJ6vDPl19+CQAul0sVQrS7jOrRo0exdu1abNiwweeWK/ckT8a8JYvFggULFkCWZaxbt+6630df0TqWncXX1f6utlP7lMbcbtOmTVi1ahU2b97sMrmm9rkbc5vNhoULF2L16tW46aabvFU8j+sbaVAv89hjj2HBggUd7jNo0CCcOHECV65cafOe0Whsk9na7du3D2VlZYiPj3dss9ls+PnPf47XXnsNFy9e7FbZfZUnY25nsVgwf/58XLhwAXv27GHtgwuRkZFQq9VtfoWVlZW1G9+YmBiX+2s0GkRERHisrH1FV2Jut3nzZjz88MP417/+hTvuuMOTxexTlMa8pqYGX375JXJycvDYY48BaG42EkJAo9Hg008/xbRp07xS9uuJCYQHREZGIjIystP9Jk2aBJPJhMOHD2PChAkAgKysLJhMJkyePNnlMRkZGW3+Q581axYyMjKwZMmS7hfeR3ky5sA3ycO5c+eQmZnJB1s7/Pz8MH78eOzevRvz5s1zbN+9ezfuuecel8dMmjQJ27dvd9r26aef4pZbboFWq/VoefuCrsQcaK55eOihh7Bp0ybMnj3bG0XtM5TGPDQ0FCdPnnTatm7dOuzZswf//ve/MXjwYI+X2SN6sAMnCSHuvPNOkZKSIg4ePCgOHjwoRo8eLebMmeO0T2JiotiyZUu75+AoDGWUxtxisYj09HQxcOBAcezYMVFSUuL409jY2BO30Ku99957QqvVijfffFOcPn1aLF++XAQFBYmLFy8KIYRYuXKlyMjIcOx//vx5ERgYKB5//HFx+vRp8eabbwqtViv+/e9/99Qt+BylMX/33XeFRqMRr7/+utP3uaqqqqduwecojXlrfWEUBhOIHlZRUSEefPBBERISIkJCQsSDDz4oKisrnfYBINavX9/uOZhAKKM05hcuXBAAXP7JzMz0evl9weuvvy4SEhKEn5+fGDdunPj8888d7y1evFhMnTrVaf+9e/eKm2++Wfj5+YlBgwaJP//5z14use9TEvOpU6e6/D4vXrzY+wX3YUq/5y31hQSCy3kTERGRYhyFQURERIoxgSAiIiLFmEAQERGRYkwgiIiISDEmEERERKQYEwgiIiJSjAkEERERKcYEgoiIiBRjAkFERESKMYEgIiIixZhAEBERkWJMIIiIiEix/x8JkuTPesUEtgAAAABJRU5ErkJggg==", + "image/png": "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am8Cr8LCQnHDDTeIUaNGtbob5he/+IXQ6XQemVxrwoQJ4q677mq1vbq6WixZskRER0cLHx8fMXz4cLFp0yan+wEQc+fObfM1XD2XEEJ89dVX9s81eZYkhBCejy1E5GkrVqzAypUrUVpa6nQUPV0bs9mMkSNHom/fvti5c2d3F8dtPv74YzzwwAO4cOGCw1gaV23fvh0zZszAkSNH7K1J1yI1NRXnzp3Dvn37rvlcpAy7MIiIOmHRokWYMmUK+vTpg+LiYrz99ts4deoU1qxZ091Fc6v77rsPP/jBD7Bq1Sr85S9/UXx8eno65s6d2yXh4ezZs9iyZUunuy7p2jBAEBF1QnV1NZ544gmUlpZCq9Vi1KhR2L59O+64447uLppbSZKEv//970hLS4Msyw5TWrvilVde6bKyFBQU4C9/+QvGjx/fZeck17ELg4iIiBTjbZxERESkGAMEERERKcYAQURERIr1ugAhhEBVVRU4tIOIiMh9el2AqK6uhl6vR3V1dXcXRTFZllFcXAxZlru7KNcN1rnnsc49j3XueddDnfe6AEFERETuxwBBREREijFAEBERkWIMEERERKQYAwQREREpxgBBREREijFAEBERkWIMEERERKQYAwQREREpxgBBREREijFAEBERkWIMEERERKQYAwQREREpxgBBREREijFAEBERkWIMEERERKQYAwQREREpxgBBREREijFAEBERkWIMEERERKQYAwQREREpxgBBREREijFAEBERkWIMEERERKQYAwQREREpxgBBREREinkkQKxduxYDBgyAr68vRo8ejT179rh03L59+6DRaDBy5Ej3FpCIiIgUcXuA2LJlC5YuXYqnn34a2dnZmDBhAqZPn46CgoJ2jzMajZg/fz4mT57s7iISERGRQm4PEK+99hoWLVqEn//85xgyZAhWr16NuLg4vPXWW+0e9/DDD2PevHkYO3asu4tIRERECmnceXKTyYTMzEwsX77cYfvUqVOxf//+No9bt24dzp49i/fffx/PP/98u6/R2NiIxsZG++OqqioAgCzLkGX5GkrvebIsQwjhdeX2Zqxzz2Odex7r3PO8uc5VKtfaFtwaIMrKymC1WhEVFeWwPSoqCsXFxU6POXPmDJYvX449e/ZAo+m4eKtWrcLKlStbbS8tLUVDQ0PnCt5NZFmG0WiEEMLlN5CuDevc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81jnnsc697zeXuduvSofHx+MHj0au3btcti+a9cujBs3zukxY8eObbX/zp07ceutt7Ya/0BERETdw+2xaNmyZfi///s/vPvuuzh16hQef/xxFBQUYPHixQCauiDmz59v33/x4sW4cOECli1bhlOnTuHdd9/FO++8gyeeeMLdRSUiIiIXuX0MxAMPPIDy8nI899xzKCoqwrBhw7B9+3b069cPAFBUVOQwJ8SAAQOwfft2PP7443jzzTcRExOD//3f/8WPfvQjdxeViIiIXOT2eSA8jfNAkBKsc89jnXse69zzroc6751XRURERG7FAEFERESKMUAQERGRYgwQREREpBgDBBERESnGAEFERESKMUAQERGRYgwQREREpBgDBBERESnGAEFERESKMUAQERGRYgwQREREpBgDBBERESnGAEFERESKMUAQERGRYgwQREREpBgDBBERESnGAEFERESKMUAQERGRYgwQ1OPkFZTitQ3pyCso7e6iEBFRGxggqNu0FRTS0o9j47ZMpKUf73BfIiLqHpruLgBdv2xBAQCWLUixb5+VMszh75b7zkoZhrT045iVMgwJ8QYPlpiIiGzYAkHdZlbKMMy7e7RDUACAhHiDPSTYWhxGJMagX0woRiTGOG2hICIiz2ILBHWbhHiDveUhr6AUr7/3Nc5dKscTP0vB7owz+OeObJRX1uKF38zAkdxCXCiswO6MMwCAabcNbhU8iIjIcxggqEdISz+OtPTjMJkteHX9bgCAVRaorK7H02u+QGV1PabdNhgA8OW+05h392h2XxARdSN2YVC3aDkockRiDML0flBJwKmzV3Ay7woSBxgQEuSHTduz8PnuY8g6dQmTkgZh3t2jMSIxhoMqiYi6EVsgqFukpR/Hhs8PYdeB0xgYG4GTZ4tRVFoNAKhrMEMlAVXVDUg/9F/otGo0mMzIzb+CI7mFWLYgBa9tSHc6AJOIiDyDAYLcLq+g1OGuibyCUpRX1iJM74+cU5eReeJSq2NUKhXOFJQBALQaFUYk9sXA2HCUV9Yir6AUs1KGobyy1v6Y3RlERJ7FAEFuZ7troryyFuEhATh7sQz/2nMKEgSssnB6jMUq2/+7f0wYBsaG49ylchQUXsXp/Ct4edkshIcEYOO2TISHBLAVgojIwxggyO1srQVZpy6hoPAqtFo1TGYLTGZrh8fqtBqMHBKL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", "text/plain": [ "
" ] @@ -917,13 +394,13 @@ "# Set the number of posterior draws you want to get\n", "num_samples = 5000\n", "\n", - "# Prepare figure\n", - "f, axes = plt.subplots(1, figsize=(6, 4))\n", - "\n", "# Obtain samples from amortized posterior\n", - "obs_data = np.zeros((1, 2)).astype(np.float32)\n", + "obs_data = [0, 0]\n", "samples_at_origin = approximator.sample(conditions={\"observables\": obs_data}, num_samples=num_samples)[\"parameters\"]\n", "\n", + "# Prepare figure\n", + "f, axes = plt.subplots(1, figsize=(6, 4))\n", + "\n", "# Plot samples\n", "axes.scatter(samples_at_origin[0, :, 0], samples_at_origin[0, :, 1], color=\"#153c7a\", alpha=0.75, s=0.5)\n", "sns.despine(ax=axes)\n", @@ -935,12 +412,42 @@ }, { "cell_type": "markdown", - "id": "66248a2f", + "id": "01821d24", "metadata": {}, "source": [ - "## Further Experimentation \n", "\n", - "# TODO" + "The posterior looks as we have expected in this case. However, in general, we do not know how the posterior is supposed to look like for any specific dataset. As such, we need diagnostics that validate the correctness of the inferred posterior. One such diagnostic is simulation-based calibration(SBC), which we can apply for free due to amortization. For more details on SBC and the create diagnostic plots, see:\n", + "\n", + "1. Talts, S., Betancourt, M., Simpson, D., Vehtari, A., & Gelman, A. (2018). Validating Bayesian inference algorithms with simulation-based calibration. *arXiv preprint*.\n", + "2. Säilynoja, T., Bürkner, P. C., & Vehtari, A. (2022). Graphical test for discrete uniformity and its applications in goodness-of-fit evaluation and multiple sample comparison. *Statistics and Computing*." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "f76289b3", + "metadata": {}, + "outputs": [], + "source": [ + "# Will be added soon." + ] + }, + { + "cell_type": "markdown", + "id": "66248a2f", + "metadata": {}, + "source": [ + "## Further Experimentation " + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "89dcb727", + "metadata": {}, + "outputs": [], + "source": [ + "# Will be added soon." ] } ], From d9028d1f7dd7a1aaed6dfcf2ce12184cfa1ec5a8 Mon Sep 17 00:00:00 2001 From: Marvin Schmitt <35921281+marvinschmitt@users.noreply.github.com> Date: Mon, 23 Sep 2024 13:03:03 +0300 Subject: [PATCH 02/12] Update README.md --- README.md | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 9e968a6d..7ceee038 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ overview of neurally bootstrapped Bayesian inference. ## Disclaimer -This is the current dev version of BayesFlow, which constitutes a complete refactor of the library build on Keras3. This way, you can now use any of the major deep learning libraries as backend for BayesFlow. The refactor is still work in progress with some of the advanced features not yet implemented. We promise to catch up on them soon. +This is the current dev version of BayesFlow, which constitutes a complete refactor of the library built on Keras3. This way, you can now use any of the major deep learning libraries as backend for BayesFlow. The refactor is still work in progress with some of the advanced features not yet implemented. We are actively working on them and promise to catch up soon. If you encounter any issues, please don't hesitate to open an issue here on [Github](https://github.com/stefanradev93/BayesFlow/issues) or ask questions on our [Discourse Forums](https://discuss.bayesflow.org/). @@ -43,7 +43,12 @@ Once installed, set the appropriate backend environment variable. For example, t export KERAS_BACKEND=torch ``` -TODO: can we set this within python too? +You can also set the environment variable directly in the Python script: + +```python +import os +os.environ["KERAS_BACKEND"] = "torch" +``` If you use conda, you can instead set this individually for each environment: @@ -66,20 +71,14 @@ conda env create --file environment.yaml --name bayesflow ### Using Conda -TODO: does conda or pip work with the current dev yet? If not, I suggest to remove it for now. - -We recommend installing BayesFlow with conda (or mamba). - -```bash -conda install -c conda-forge bayesflow -``` +The dev version is not conda-installable yet. ### Using pip You can of course use pip as well: ```bash -pip install bayesflow +pip install git+https://github.com/stefanradev93/bayesflow@dev ``` ## Getting Started From 8dab127911bab56886a5fdf1f94972eb4c6d2e70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul-Christian=20B=C3=BCrkner?= Date: Mon, 23 Sep 2024 12:08:54 +0200 Subject: [PATCH 03/12] Update README.md --- README.md | 42 ++++++++++-------------------------------- 1 file changed, 10 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 7ceee038..1558c6df 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ import os os.environ["KERAS_BACKEND"] = "torch" ``` -If you use conda, you can instead set this individually for each environment: +If you use conda, you can alternatively set this individually for each environment in your terminal: ```bash conda env config vars set KERAS_BACKEND=torch @@ -58,27 +58,27 @@ conda env config vars set KERAS_BACKEND=torch This way, you also don't have to manually set the backend every time you are starting Python to use BayesFlow. -### From Source +### Using pip -To install the development version of BayesFlow from source, use: +You can install the dev version with pip: ```bash -git clone https://github.com/stefanradev93/bayesflow -cd -git checkout dev -conda env create --file environment.yaml --name bayesflow +pip install git+https://github.com/stefanradev93/bayesflow@dev ``` ### Using Conda The dev version is not conda-installable yet. -### Using pip +### From Source -You can of course use pip as well: +To install the dev version from source, use: ```bash -pip install git+https://github.com/stefanradev93/bayesflow@dev +git clone https://github.com/stefanradev93/bayesflow +cd +git checkout dev +conda env create --file environment.yaml --name bayesflow ``` ## Getting Started @@ -91,28 +91,6 @@ Check out some of our walk-through notebooks below. We are actively working on p Documentation is available at https://bayesflow.org. Please use the [BayesFlow Forums](https://discuss.bayesflow.org/) for any BayesFlow-related questions and discussions, and [GitHub Issues](https://github.com/stefanradev93/BayesFlow/issues) for bug reports and feature requests. -### Further Reading - -TODO: which papers to we want to reference here exactly and according to which criteria? - -- Radev S. T., D’Alessandro M., Mertens U. K., Voss A., Köthe U., & Bürkner P. -C. (2021). Amortized Bayesian Model Comparison with Evidental Deep Learning. -IEEE Transactions on Neural Networks and Learning Systems. -doi:10.1109/TNNLS.2021.3124052 available for free at: https://arxiv.org/abs/2004.10629 - -- Schmitt, M., Radev, S. T., & Bürkner, P. C. (2022). Meta-Uncertainty in -Bayesian Model Comparison. In International Conference on Artificial Intelligence -and Statistics, 11-29, PMLR, available for free at: https://arxiv.org/abs/2210.07278 - -- Elsemüller, L., Schnuerch, M., Bürkner, P. C., & Radev, S. T. (2023). A Deep -Learning Method for Comparing Bayesian Hierarchical Models. ArXiv preprint, -available for free at: https://arxiv.org/abs/2301.11873 - -- Radev, S. T., Schmitt, M., Pratz, V., Picchini, U., Köthe, U., & Bürkner, P.-C. (2023). -JANA: Jointly amortized neural approximation of complex Bayesian models. -*Proceedings of the Thirty-Ninth Conference on Uncertainty in Artificial Intelligence, 216*, 1695-1706. -([arXiv](https://arxiv.org/abs/2302.09125))([PMLR](https://proceedings.mlr.press/v216/radev23a.html)) - ## Citing BayesFlow You can cite BayesFlow along the lines of: From fe40b4eb50e54a1cde9c5aaa082beec9c09bf47b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul-Christian=20B=C3=BCrkner?= Date: Mon, 23 Sep 2024 12:23:16 +0200 Subject: [PATCH 04/12] Update TwoMoons_FlowMatching.ipynb --- examples/TwoMoons_FlowMatching.ipynb | 54 ++++++++++++++-------------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/examples/TwoMoons_FlowMatching.ipynb b/examples/TwoMoons_FlowMatching.ipynb index 0b37df7a..45b400f8 100644 --- a/examples/TwoMoons_FlowMatching.ipynb +++ b/examples/TwoMoons_FlowMatching.ipynb @@ -8,22 +8,9 @@ "# Two Moons: Tackling Bimodal Posteriors" ] }, - { - "cell_type": "markdown", - "id": "3ed81254", - "metadata": {}, - "source": [ - "## Table of Contents\n", - " * [Simulator](#simulator)\n", - " * [Dataset](#dataset)\n", - " * [Training](#nn-training)\n", - " * [Validation](#validation)\n", - " * [Further Experimentation](#further_experimentation)" - ] - }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 2, "id": "d5f88a59", "metadata": {}, "outputs": [], @@ -33,12 +20,16 @@ "import seaborn as sns\n", "from matplotlib import cm\n", "\n", + "# if you haven't set your keras backend yet\n", + "# import os\n", + "# os.environ[\"KERAS_BACKEND\"] = \"torch\"\n", + "\n", "import keras\n", "\n", - "## REMOVE ON PRODUCTION\n", - "# TODO: what is the point of these lines?\n", - "import sys\n", - "sys.path.append('../')\n", + "# If you are a bayesflow developer, this ensures that the latest\n", + "# dev version can be found\n", + "# import sys\n", + "# sys.path.append('../')\n", "\n", "import bayesflow as bf" ] @@ -98,7 +89,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 4, "id": "373bf602", "metadata": {}, "outputs": [], @@ -124,10 +115,21 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 6, "id": "0b9a9817", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'parameters': (10000, 2), 'observables': (10000, 2)}" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "num_train_simulations = 10000\n", "train_data = simulator.sample(batch_shape=num_train_simulations)\n", @@ -135,7 +137,7 @@ "num_val_simulations = 300\n", "val_data = simulator.sample(batch_shape=num_val_simulations)\n", "\n", - "# TODO: show the structure of the training data?" + "{key:keras.ops.shape(value) for key,value in train_data.items()}" ] }, { @@ -282,7 +284,7 @@ "Before we can start with the actual training, we have to set up our optimizer. \n", "Below, we show several of the hyperparameters users can adjust in the built-in Keras3 optimizers.\n", "For this particular example, most of these hyperparameters don't really matter, but \n", - "you should make sure that TODO is not too large." + "you should make sure that the learning rate is roughly 1e-4." ] }, { @@ -292,12 +294,12 @@ "metadata": {}, "outputs": [], "source": [ - "epochs = 300\n", - "\n", - "# TODO: do we really need to set all of these manually for this simple example?\n", + "epochs = 100\n", "\n", "learning_rate = keras.optimizers.schedules.CosineDecay(\n", " initial_learning_rate=1e-4,\n", + " # the hyperparameter setting below are just for robustness \n", + " # usually setting the learning rate to 1e-4 alone should be fine\n", " decay_steps=epochs * train_dataset.num_batches,\n", " alpha=1e-7,\n", " warmup_target=1e-3,\n", From 08a3e26ba45cd4a1ede7f0e7583ab3d879df238c Mon Sep 17 00:00:00 2001 From: larskue Date: Mon, 23 Sep 2024 14:05:56 +0200 Subject: [PATCH 05/12] allow default simulator args, such as 'rng' --- bayesflow/simulators/lambda_simulator.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/bayesflow/simulators/lambda_simulator.py b/bayesflow/simulators/lambda_simulator.py index 9d0deee6..ab1aaf73 100644 --- a/bayesflow/simulators/lambda_simulator.py +++ b/bayesflow/simulators/lambda_simulator.py @@ -8,7 +8,14 @@ class LambdaSimulator(Simulator): - def __init__(self, sample_fn: callable, *, is_batched: bool = False, cast_dtypes: Mapping[str, str] = "default"): + def __init__( + self, + sample_fn: callable, + *, + is_batched: bool = False, + cast_dtypes: Mapping[str, str] = "default", + reserved_arguments: Mapping[str, any] = "default", + ): """Implements a simulator based on a (batched or unbatched) sampling function. Outputs will always be in batched format. :param sample_fn: The sampling function. @@ -19,6 +26,8 @@ def __init__(self, sample_fn: callable, *, is_batched: bool = False, cast_dtypes :param cast_dtypes: Output data types to cast arrays to. By default, we convert float64 (the default for numpy on x64 systems) to float32 (the default for deep learning on any system). + :param reserved_arguments: Reserved keyword arguments to pass to the sampling function. + By default, functions requesting an argument 'rng' will be passed the default numpy random generator. """ self.sample_fn = sample_fn self.is_batched = is_batched @@ -28,7 +37,15 @@ def __init__(self, sample_fn: callable, *, is_batched: bool = False, cast_dtypes self.cast_dtypes = cast_dtypes + if reserved_arguments == "default": + reserved_arguments = {"rng": np.random.default_rng()} + + self.reserved_arguments = reserved_arguments + def sample(self, batch_shape: Shape, **kwargs) -> dict[str, np.ndarray]: + # add reserved arguments + kwargs = self.reserved_arguments | kwargs + # try to use only valid keyword arguments kwargs = filter_kwargs(kwargs, self.sample_fn) From 9c21520ff8a141363551c0f3edbc668cf7cd1764 Mon Sep 17 00:00:00 2001 From: larskue Date: Mon, 23 Sep 2024 14:07:01 +0200 Subject: [PATCH 06/12] possible fix to #187 --- bayesflow/approximators/continuous_approximator.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/bayesflow/approximators/continuous_approximator.py b/bayesflow/approximators/continuous_approximator.py index eac9ed27..85da35d7 100644 --- a/bayesflow/approximators/continuous_approximator.py +++ b/bayesflow/approximators/continuous_approximator.py @@ -131,7 +131,6 @@ def sample( *, conditions: Mapping[str, Tensor], num_samples: int = None, - numpy: bool = True, batch_shape: Shape = None, ) -> dict[str, Tensor]: if num_samples is None and batch_shape is None: @@ -144,11 +143,9 @@ def sample( conditions = { "inference_variables": self._sample(num_samples=num_samples, batch_shape=batch_shape, **conditions) } + conditions = keras.tree.map_structure(keras.ops.convert_to_numpy, conditions) conditions = self.data_adapter.deconfigure(conditions) - if numpy: - conditions = keras.tree.map_structure(keras.ops.convert_to_numpy, conditions) - return conditions def _sample( From ba38923ff1b3575ca9cdde52508407669a87c425 Mon Sep 17 00:00:00 2001 From: larskue Date: Mon, 23 Sep 2024 14:07:14 +0200 Subject: [PATCH 07/12] update two moons example --- examples/TwoMoons_FlowMatching.ipynb | 489 ++++++++++++++++----------- 1 file changed, 291 insertions(+), 198 deletions(-) diff --git a/examples/TwoMoons_FlowMatching.ipynb b/examples/TwoMoons_FlowMatching.ipynb index 45b400f8..7c115aec 100644 --- a/examples/TwoMoons_FlowMatching.ipynb +++ b/examples/TwoMoons_FlowMatching.ipynb @@ -10,29 +10,34 @@ }, { "cell_type": "code", - "execution_count": 2, "id": "d5f88a59", - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-23T11:57:54.280143Z", + "start_time": "2024-09-23T11:57:54.277209Z" + } + }, "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import seaborn as sns\n", - "from matplotlib import cm\n", "\n", - "# if you haven't set your keras backend yet\n", - "# import os\n", - "# os.environ[\"KERAS_BACKEND\"] = \"torch\"\n", + "# ensure the backend is set\n", + "import os\n", + "if \"KERAS_BACKEND\" not in os.environ:\n", + " # set this to \"torch\", \"tensorflow\", or \"jax\"\n", + " os.environ[\"KERAS_BACKEND\"] = \"torch\"\n", "\n", "import keras\n", "\n", - "# If you are a bayesflow developer, this ensures that the latest\n", - "# dev version can be found\n", - "# import sys\n", - "# sys.path.append('../')\n", + "# for BayesFlow devs: this ensures that the latest dev version can be found\n", + "import sys\n", + "sys.path.append('../')\n", "\n", "import bayesflow as bf" - ] + ], + "outputs": [], + "execution_count": 13 }, { "cell_type": "markdown", @@ -64,302 +69,389 @@ "\\end{align}\n", "$$\n", "\n", - "This model is typically used for benchmarking simulation-based inference (SBI) methods (see https://arxiv.org/pdf/2101.04653) and any method for amortized Bayesian inference should be capable of recovering the two moons posterior *without* using a gazillion of simulations. Note, that this is a considerably harder task than modeling the common unconditional two moons data set used often in the context of normalizing flows.\n", - "\n", - "Let's code up the above described `simulator` for use in Bayesflow:" + "This model is typically used for benchmarking simulation-based inference (SBI) methods (see https://arxiv.org/pdf/2101.04653) and any method for amortized Bayesian inference should be capable of recovering the two moons posterior *without* using a gazillion of simulations. Note, that this is a considerably harder task than modeling the common unconditional two moons data set used often in the context of normalizing flows." ] }, { - "cell_type": "code", - "execution_count": 16, - "id": "c1018d12", "metadata": {}, - "outputs": [], - "source": [ - "# TODO" - ] + "cell_type": "markdown", + "source": "BayesFlow offers many ways to define your data generating process. Here, we use sequential functions to build a simulator object for online training:", + "id": "21bf228e706a010" }, { - "cell_type": "markdown", - "id": "8269d95d", - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-23T11:57:54.328836Z", + "start_time": "2024-09-23T11:57:54.324188Z" + } + }, + "cell_type": "code", "source": [ - "The thus created simulator is the same as the one available in bayesflow benchmark module:" - ] + "def alpha_prior(rng):\n", + " alpha = rng.uniform(-np.pi / 2, np.pi / 2)\n", + " return dict(alpha=alpha)\n", + "\n", + "def r_prior(rng):\n", + " r = rng.normal(0.1, 0.01)\n", + " return dict(r=r)\n", + "\n", + "def theta_prior(rng):\n", + " theta = rng.uniform(-1, 1, 2)\n", + " return dict(theta=theta)\n", + "\n", + "def forward_model(theta, alpha, r):\n", + " x1 = -np.abs(theta[0] + theta[1]) / np.sqrt(2) + r * np.cos(alpha) + 0.25\n", + " x2 = (-theta[0] + theta[1]) / np.sqrt(2) + r * np.sin(alpha)\n", + " return dict(x=np.array([x1, x2]))" + ], + "id": "f761b142a0e1da66", + "outputs": [], + "execution_count": 14 }, { + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-23T11:57:54.390455Z", + "start_time": "2024-09-23T11:57:54.387182Z" + } + }, "cell_type": "code", - "execution_count": 4, - "id": "373bf602", - "metadata": {}, + "source": "simulator = bf.simulators.CompositeLambdaSimulator([alpha_prior, r_prior, theta_prior, forward_model])", + "id": "4b89c861527c13b8", "outputs": [], - "source": [ - "simulator = bf.benchmarks.TwoMoons()" - ] + "execution_count": 15 }, { - "cell_type": "markdown", - "id": "89e64a6f", "metadata": {}, - "source": [ - "## Dataset " - ] - }, - { "cell_type": "markdown", - "id": "23d541b8", - "metadata": {}, - "source": [ - "Next, we will create training and validation data for the bayesflow training phase:" - ] + "source": "Let's generate some data to see what the simulator does:", + "id": "f6e1eb5777c59eba" }, { - "cell_type": "code", - "execution_count": 6, - "id": "0b9a9817", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'parameters': (10000, 2), 'observables': (10000, 2)}" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-23T11:57:54.447364Z", + "start_time": "2024-09-23T11:57:54.433438Z" } - ], - "source": [ - "num_train_simulations = 10000\n", - "train_data = simulator.sample(batch_shape=num_train_simulations)\n", - "\n", - "num_val_simulations = 300\n", - "val_data = simulator.sample(batch_shape=num_val_simulations)\n", - "\n", - "{key:keras.ops.shape(value) for key,value in train_data.items()}" - ] - }, - { - "cell_type": "markdown", - "id": "b56c7192", - "metadata": {}, - "source": [ - "To make sure BayesFlow knows how to deal with all the just simulated variables, we have to tell which are considered observables to condition on (\"inference_conditions\") and which are variables to infer later on (\"inference_variables\"). For this purpose, we use the `data_adapter` functionality:" - ] - }, - { + }, "cell_type": "code", - "execution_count": 19, - "id": "e87dcb51", - "metadata": {}, - "outputs": [], - "source": [ - "data_adapter = bf.ContinuousApproximator.build_data_adapter(\n", - " inference_variables=[\"parameters\"],\n", - " inference_conditions=[\"observables\"],\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "0a17f2bb", - "metadata": {}, "source": [ - "Next, we create the `dataset` object that are used for \n", - "training our deep approximators. In a nutshell, they are a combination of \n", - "our simulated (training) data and the data adapter we just built. \n", - "These datasets will also help use taking care of batching during training." - ] + "# generate 128 random draws from the joint distribution p(r, alpha, theta, x)\n", + "sample_data = simulator.sample((128,))" + ], + "id": "e6218e61d529e357", + "outputs": [], + "execution_count": 16 }, { + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-23T11:57:54.489441Z", + "start_time": "2024-09-23T11:57:54.485317Z" + } + }, "cell_type": "code", - "execution_count": 20, - "id": "698ebdb2", - "metadata": {}, + "source": [ + "print(\"Type of sample_data:\\n\\t\", type(sample_data))\n", + "print(\"Keys of sample_data:\\n\\t\", sample_data.keys())\n", + "print(\"Types of sample_data values:\\n\\t\", {k: type(v) for k, v in sample_data.items()})\n", + "print(\"Shapes of sample_data values:\\n\\t\", {k: v.shape for k, v in sample_data.items()})" + ], + "id": "46174ccb0167026c", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Number of training batches: 79\n", - "Number of validation batches: 3\n", - "Number of training batches: 79\n", - "Number of validation batches: 3\n" + "Type of sample_data:\n", + "\t \n", + "Keys of sample_data:\n", + "\t dict_keys(['alpha', 'r', 'theta', 'x'])\n", + "Types of sample_data values:\n", + "\t {'alpha': , 'r': , 'theta': , 'x': }\n", + "Shapes of sample_data values:\n", + "\t {'alpha': (128, 1), 'r': (128, 1), 'theta': (128, 2), 'x': (128, 2)}\n" ] } ], - "source": [ - "batch_size = 128\n", - "\n", - "train_dataset = bf.datasets.OfflineDataset(\n", - " train_data, batch_size=batch_size, data_adapter=data_adapter\n", - ")\n", - "print(f\"Number of training batches: {train_dataset.num_batches}\")\n", - "\n", - "val_dataset = bf.datasets.OfflineDataset(\n", - " val_data, batch_size=batch_size, data_adapter=data_adapter\n", - ")\n", - "print(f\"Number of validation batches: {val_dataset.num_batches}\")" - ] + "execution_count": 17 }, { "cell_type": "markdown", - "id": "2d4c6eb0", + "id": "8269d95d", "metadata": {}, - "source": [ - "## Traing a neural network to approximate all posteriors " - ] + "source": "BayesFlow also provides this simulator and a collection of others in the `bayesflow.benchmarks` module." }, { - "cell_type": "markdown", - "id": "16395d87", "metadata": {}, + "cell_type": "markdown", "source": [ - "### Flow matching as a posterior approximator" - ] + "## Data Adapter\n", + "\n", + "The next step is to tell BayesFlow how to deal with all the simulated variables. You may also think of this as informing BayesFlow about the data flow, i.e., which variables go into which network.\n", + "\n", + "For this example, we want to learn the posterior distribution $p(\\theta | x)$, so we **infer** $\\theta$, **conditioning** on $x$." + ], + "id": "5ac9e8d81088b94" + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-23T11:57:54.539575Z", + "start_time": "2024-09-23T11:57:54.536761Z" + } + }, + "cell_type": "code", + "source": [ + "data_adapter = bf.ContinuousApproximator.build_data_adapter(\n", + " inference_variables=[\"theta\"],\n", + " inference_conditions=[\"x\"],\n", + ")" + ], + "id": "b6c057787bb01cc6", + "outputs": [], + "execution_count": 18 }, { "cell_type": "markdown", - "id": "ab816c28", + "id": "2d4c6eb0", "metadata": {}, "source": [ - "With the training dataset prepared, we turn our attention to setting up \n", - "the neural network that will learn to infer the posterior over $\\theta$ \n", - "from any observable input $x$ within the scope of our training data. \n", - "We choose to use a flow matching architecture for this example since\n", - "it can deal well with the multimodal nature of the posteriors that some\n", - "observables imply." + "## Traing a neural network to approximate all posteriors\n", + "\n", + "The next step is to set up the neural network that will approximate the posterior $p(\\theta|x)$.\n", + "\n", + "We choose Flow Matching as the architecture for this example, as it can deal well with the multimodal nature of the posteriors that some observables imply." ] }, { "cell_type": "code", - "execution_count": 21, "id": "09206e6f", - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-23T11:57:54.612396Z", + "start_time": "2024-09-23T11:57:54.583221Z" + } + }, "source": [ "inference_network = bf.networks.FlowMatching(\n", + " subnet=\"mlp\",\n", " subnet_kwargs=dict(\n", " depth=6,\n", " width=256,\n", " ),\n", ")" - ] + ], + "outputs": [], + "execution_count": 19 }, { "cell_type": "markdown", "id": "851e522f", "metadata": {}, - "source": [ - "This inference network is just a general flow matching architecure, not yet adapted to the specific inference task at hand. To achieve this adaptation, we combine the network with our data adapter, which together form an `approximator`. In this case, we need a `ContinuousApproximator` since the target we want to approximate is the posterior of the *continuous* parameter vector $\\theta$." - ] + "source": "This inference network is just a general Flow Matching architecture, not yet adapted to the specific inference task at hand (i.e., posterior appproximation). To achieve this adaptation, we combine the network with our data adapter, which together form an `approximator`. In this case, we need a `ContinuousApproximator` since the target we want to approximate is the posterior of the *continuous* parameter vector $\\theta$." }, { "cell_type": "code", - "execution_count": 22, "id": "96ca6ffa", - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-23T11:57:54.635516Z", + "start_time": "2024-09-23T11:57:54.632271Z" + } + }, "source": [ "approximator = bf.ContinuousApproximator(\n", " inference_network=inference_network,\n", " data_adapter=data_adapter,\n", ")" - ] + ], + "outputs": [], + "execution_count": 20 }, { - "cell_type": "markdown", - "id": "2c81679f", "metadata": {}, + "cell_type": "markdown", "source": [ - "### Optimizer and learning rate" - ] + "### Optimizer and Learning Rate\n", + "For this example, it is sufficient to use a static learning rate. In practice, you may want to use a learning rate schedule, like [cosine decay](https://keras.io/api/optimizers/learning_rate_schedules/cosine_decay/)." + ], + "id": "566264eadc76c2c" }, { - "cell_type": "markdown", - "id": "c777d575", - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-23T11:57:54.685012Z", + "start_time": "2024-09-23T11:57:54.678332Z" + } + }, + "cell_type": "code", "source": [ - "Before we can start with the actual training, we have to set up our optimizer. \n", - "Below, we show several of the hyperparameters users can adjust in the built-in Keras3 optimizers.\n", - "For this particular example, most of these hyperparameters don't really matter, but \n", - "you should make sure that the learning rate is roughly 1e-4." - ] + "learning_rate = 1e-4\n", + "optimizer = keras.optimizers.Adam(learning_rate=learning_rate)" + ], + "id": "e8d7e053", + "outputs": [], + "execution_count": 21 }, { + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-23T11:57:54.728065Z", + "start_time": "2024-09-23T11:57:54.723396Z" + } + }, "cell_type": "code", - "execution_count": 23, - "id": "e8d7e053", - "metadata": {}, + "source": "approximator.compile(optimizer=optimizer)", + "id": "51808fcd560489ac", "outputs": [], - "source": [ - "epochs = 100\n", - "\n", - "learning_rate = keras.optimizers.schedules.CosineDecay(\n", - " initial_learning_rate=1e-4,\n", - " # the hyperparameter setting below are just for robustness \n", - " # usually setting the learning rate to 1e-4 alone should be fine\n", - " decay_steps=epochs * train_dataset.num_batches,\n", - " alpha=1e-7,\n", - " warmup_target=1e-3,\n", - " warmup_steps=int(0.1 * epochs * train_dataset.num_batches),\n", - ")\n", - "\n", - "optimizer = keras.optimizers.AdamW(\n", - " learning_rate=learning_rate,\n", - " weight_decay=1e-3\n", - ")\n", - "\n", - "approximator.compile(optimizer=optimizer)" - ] + "execution_count": 22 }, { "cell_type": "markdown", "id": "708b1303", "metadata": {}, "source": [ - "### Training" + "### Training\n", + "\n", + "We are ready to train our deep posterior approximator on the two moons example. We pass the simulator object to the `fit` method, which will generate training data on the fly (i.e., online training).\n", + "\n", + "Internally, BayesFlow creates a [keras PyDataset](https://keras.io/api/utils/python_utils/#pydataset-class) from your simulator object, which is then passed onto keras `fit` method. You can also create the dataset yourself using either the BayesFlow wrappers such as `bf.datasets.OnlineDataset` or write your own dataset class that inherits from `keras.utils.PyDataset`." ] }, { - "cell_type": "markdown", - "id": "82d5cc46", - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-23T11:58:36.531931Z", + "start_time": "2024-09-23T11:58:36.530025Z" + } + }, + "cell_type": "code", "source": [ - "We are ready to train our deep posterior approximator on the TwoMoons example:" - ] + "epochs = 30\n", + "batches_per_epoch = 100\n", + "\n", + "# \"auto\" attempts to make the batch size large enough to fill the memory budget\n", + "batch_size = \"auto\"\n", + "# memory budget is only used when batch_size is \"auto\"\n", + "memory_budget = \"2 GB\"" + ], + "id": "beb53eb861b3109", + "outputs": [], + "execution_count": 25 }, { "cell_type": "code", - "execution_count": null, "id": "0f496bda", - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-23T12:02:39.158049Z", + "start_time": "2024-09-23T11:59:19.983836Z" + } + }, "source": [ - "# TODO: can we show the training less verbosely? 300 epochs create a lot of output in an ipy notebook\n", "history = approximator.fit(\n", + " batch_size=batch_size,\n", + " memory_budget=memory_budget,\n", " epochs=epochs,\n", - " dataset=train_dataset,\n", + " num_batches=batches_per_epoch,\n", + " simulator=simulator,\n", " workers=None,\n", " use_multiprocessing=False,\n", ")" - ] + ], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:bayesflow:Building dataset from simulator instance of CompositeLambdaSimulator.\n", + "INFO:bayesflow:Estimating memory footprint of one sample at 24.0 B.\n", + "INFO:bayesflow:Using a batch size of 1024.\n", + "INFO:bayesflow:Building on a test batch.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m8s\u001B[0m 65ms/step - loss: 0.8973 - loss/inference_loss: 0.8973\n", + "Epoch 2/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 65ms/step - loss: 0.6423 - loss/inference_loss: 0.6423\n", + "Epoch 3/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 65ms/step - loss: 0.6131 - loss/inference_loss: 0.6131\n", + "Epoch 4/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 62ms/step - loss: 0.6044 - loss/inference_loss: 0.6044\n", + "Epoch 5/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 65ms/step - loss: 0.5979 - loss/inference_loss: 0.5979\n", + "Epoch 6/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 61ms/step - loss: 0.5998 - loss/inference_loss: 0.5998\n", + "Epoch 7/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 64ms/step - loss: 0.5897 - loss/inference_loss: 0.5897\n", + "Epoch 8/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 65ms/step - loss: 0.5895 - loss/inference_loss: 0.5895\n", + "Epoch 9/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 63ms/step - loss: 0.5855 - loss/inference_loss: 0.5855\n", + "Epoch 10/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 65ms/step - loss: 0.5837 - loss/inference_loss: 0.5837\n", + "Epoch 11/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 63ms/step - loss: 0.5870 - loss/inference_loss: 0.5870\n", + "Epoch 12/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 63ms/step - loss: 0.5787 - loss/inference_loss: 0.5787\n", + "Epoch 13/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 61ms/step - loss: 0.5826 - loss/inference_loss: 0.5826\n", + "Epoch 14/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 61ms/step - loss: 0.5803 - loss/inference_loss: 0.5803\n", + "Epoch 15/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 60ms/step - loss: 0.5768 - loss/inference_loss: 0.5768\n", + "Epoch 16/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 59ms/step - loss: 0.5784 - loss/inference_loss: 0.5784\n", + "Epoch 17/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 60ms/step - loss: 0.5711 - loss/inference_loss: 0.5711\n", + "Epoch 18/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 59ms/step - loss: 0.5781 - loss/inference_loss: 0.5781\n", + "Epoch 19/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 61ms/step - loss: 0.5776 - loss/inference_loss: 0.5776\n", + "Epoch 20/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 64ms/step - loss: 0.5711 - loss/inference_loss: 0.5711\n", + "Epoch 21/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 63ms/step - loss: 0.5711 - loss/inference_loss: 0.5711\n", + "Epoch 22/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 64ms/step - loss: 0.5681 - loss/inference_loss: 0.5681\n", + "Epoch 23/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 60ms/step - loss: 0.5699 - loss/inference_loss: 0.5699\n", + "Epoch 24/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 60ms/step - loss: 0.5686 - loss/inference_loss: 0.5686\n", + "Epoch 25/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 60ms/step - loss: 0.5672 - loss/inference_loss: 0.5672\n", + "Epoch 26/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 59ms/step - loss: 0.5647 - loss/inference_loss: 0.5647\n", + "Epoch 27/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 61ms/step - loss: 0.5674 - loss/inference_loss: 0.5674\n", + "Epoch 28/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 62ms/step - loss: 0.5651 - loss/inference_loss: 0.5651\n", + "Epoch 29/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 61ms/step - loss: 0.5693 - loss/inference_loss: 0.5693\n", + "Epoch 30/30\n", + "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 61ms/step - loss: 0.5629 - loss/inference_loss: 0.5629\n" + ] + } + ], + "execution_count": 27 }, { "cell_type": "markdown", "id": "b90a6062", "metadata": {}, - "source": [ - "## Validation " - ] + "source": "## Validation" }, { "cell_type": "markdown", "id": "ca62b21d", "metadata": {}, "source": [ - "### Two Moons Posterior \n", + "### Two Moons Posterior\n", "\n", "The two moons posterior at point $x = (0, 0)$ should resemble two crescent shapes. Below, we plot the corresponding posterior samples and posterior density. \n", "These results suggest that our flow matching setup can approximate the expected analytical posterior well." @@ -401,13 +493,14 @@ "samples_at_origin = approximator.sample(conditions={\"observables\": obs_data}, num_samples=num_samples)[\"parameters\"]\n", "\n", "# Prepare figure\n", - "f, axes = plt.subplots(1, figsize=(6, 4))\n", + "f, axes = plt.subplots(1, figsize=(6, 6))\n", "\n", "# Plot samples\n", "axes.scatter(samples_at_origin[0, :, 0], samples_at_origin[0, :, 1], color=\"#153c7a\", alpha=0.75, s=0.5)\n", "sns.despine(ax=axes)\n", "axes.set_title(r\"Posterior samples at origin $x=(0, 0)$\")\n", "axes.grid(alpha=0.3)\n", + "axes.set_aspect(\"equal\", adjustable=\"box\")\n", "axes.set_xlim([-0.5, 0.5])\n", "axes.set_ylim([-0.5, 0.5])" ] @@ -418,7 +511,7 @@ "metadata": {}, "source": [ "\n", - "The posterior looks as we have expected in this case. However, in general, we do not know how the posterior is supposed to look like for any specific dataset. As such, we need diagnostics that validate the correctness of the inferred posterior. One such diagnostic is simulation-based calibration(SBC), which we can apply for free due to amortization. For more details on SBC and the create diagnostic plots, see:\n", + "The posterior looks as we have expected in this case. However, in general, we do not know how the posterior is supposed to look like for any specific dataset. As such, we need diagnostics that validate the correctness of the inferred posterior. One such diagnostic is simulation-based calibration(SBC), which we can apply for free due to amortization. For more details on SBC and diagnostic plots, see:\n", "\n", "1. Talts, S., Betancourt, M., Simpson, D., Vehtari, A., & Gelman, A. (2018). Validating Bayesian inference algorithms with simulation-based calibration. *arXiv preprint*.\n", "2. Säilynoja, T., Bürkner, P. C., & Vehtari, A. (2022). Graphical test for discrete uniformity and its applications in goodness-of-fit evaluation and multiple sample comparison. *Statistics and Computing*." From 73094673e7543d31bb26efadca06c29abe3f2921 Mon Sep 17 00:00:00 2001 From: larskue Date: Mon, 23 Sep 2024 14:08:00 +0200 Subject: [PATCH 08/12] link all relevant install instructions in README --- README.md | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 1558c6df..104e7e8c 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ It provides users with: - A user-friendly API for rapid Bayesian workflows - A rich collection of neural network architectures -- Multi-Backend Support via [Keras3](https://keras.io/keras_3/): You can use [PyTorch](https://github.com/pytorch/pytorch), [TensorFlow](https://github.com/tensorflow/tensorflow), [JAX](https://github.com/google/jax), or [NumPy](https://github.com/numpy/numpy) +- Multi-Backend Support via [Keras3](https://keras.io/keras_3/): You can use [PyTorch](https://github.com/pytorch/pytorch), [TensorFlow](https://github.com/tensorflow/tensorflow), or [JAX](https://github.com/google/jax) BayesFlow is designed to be a flexible and efficient tool that enables rapid statistical inference fueled by continuous progress in generative AI and Bayesian inference. @@ -27,28 +27,23 @@ overview of neurally bootstrapped Bayesian inference. ## Disclaimer -This is the current dev version of BayesFlow, which constitutes a complete refactor of the library built on Keras3. This way, you can now use any of the major deep learning libraries as backend for BayesFlow. The refactor is still work in progress with some of the advanced features not yet implemented. We are actively working on them and promise to catch up soon. +This is the current dev version of BayesFlow, which constitutes a complete refactor of the library built on Keras 3. This way, you can now use any of the major deep learning libraries as backend for BayesFlow. The refactor is still work in progress with some of the advanced features not yet implemented. We are actively working on them and promise to catch up soon. -If you encounter any issues, please don't hesitate to open an issue here on [Github](https://github.com/stefanradev93/BayesFlow/issues) or ask questions on our [Discourse Forums](https://discuss.bayesflow.org/). +If you encounter any issues, please don't hesitate to open an issue here on [Github](https://github.com/stefanradev93/BayesFlow/issues) or ask questions on our [Discourse Forums](https://discuss.bayesflow.org/). ## Install ### Backend -First, install your machine learning backend of choice. Note that BayesFlow **will not run** without a backend. If you don't know which one to use, we recommend [PyTorch](https://github.com/pytorch/pytorch) to get started. +First, install one machine learning backend of choice. Note that BayesFlow **will not run** without a backend. -Once installed, set the appropriate backend environment variable. For example, to use PyTorch, type into your terminal before starting Python: +[Install JAX](https://jax.readthedocs.io/en/latest/installation.html) +[Install PyTorch](https://pytorch.org/get-started/locally/) +[Install TensorFlow](https://www.tensorflow.org/install) -```bash -export KERAS_BACKEND=torch -``` +If you are new to machine learning and don't know which one to use, we recommend PyTorch to get started. -You can also set the environment variable directly in the Python script: - -```python -import os -os.environ["KERAS_BACKEND"] = "torch" -``` +Once installed, [set the backend environment variable as required by keras.](https://keras.io/getting_started/#configuring-your-backend) If you use conda, you can alternatively set this individually for each environment in your terminal: @@ -66,18 +61,17 @@ You can install the dev version with pip: pip install git+https://github.com/stefanradev93/bayesflow@dev ``` -### Using Conda +### Using Conda (coming soon) The dev version is not conda-installable yet. ### From Source -To install the dev version from source, use: +If you want to contribute to BayesFlow, we recommend installing the dev branch from source: ```bash -git clone https://github.com/stefanradev93/bayesflow +git clone -b dev git@github.com:stefanradev93/bayesflow.git cd -git checkout dev conda env create --file environment.yaml --name bayesflow ``` From dc2466c25d08743c004fdddd412ce3fd4b9b60f5 Mon Sep 17 00:00:00 2001 From: larskue Date: Mon, 23 Sep 2024 15:32:24 +0200 Subject: [PATCH 09/12] update notebook again --- examples/TwoMoons_FlowMatching.ipynb | 221 ++++++++++++++------------- 1 file changed, 118 insertions(+), 103 deletions(-) diff --git a/examples/TwoMoons_FlowMatching.ipynb b/examples/TwoMoons_FlowMatching.ipynb index 7c115aec..217397f7 100644 --- a/examples/TwoMoons_FlowMatching.ipynb +++ b/examples/TwoMoons_FlowMatching.ipynb @@ -13,8 +13,8 @@ "id": "d5f88a59", "metadata": { "ExecuteTime": { - "end_time": "2024-09-23T11:57:54.280143Z", - "start_time": "2024-09-23T11:57:54.277209Z" + "end_time": "2024-09-23T12:46:11.346815Z", + "start_time": "2024-09-23T12:46:11.344476Z" } }, "source": [ @@ -26,7 +26,7 @@ "import os\n", "if \"KERAS_BACKEND\" not in os.environ:\n", " # set this to \"torch\", \"tensorflow\", or \"jax\"\n", - " os.environ[\"KERAS_BACKEND\"] = \"torch\"\n", + " os.environ[\"KERAS_BACKEND\"] = \"jax\"\n", "\n", "import keras\n", "\n", @@ -37,7 +37,7 @@ "import bayesflow as bf" ], "outputs": [], - "execution_count": 13 + "execution_count": 49 }, { "cell_type": "markdown", @@ -81,8 +81,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2024-09-23T11:57:54.328836Z", - "start_time": "2024-09-23T11:57:54.324188Z" + "end_time": "2024-09-23T12:46:11.388263Z", + "start_time": "2024-09-23T12:46:11.385178Z" } }, "cell_type": "code", @@ -106,20 +106,20 @@ ], "id": "f761b142a0e1da66", "outputs": [], - "execution_count": 14 + "execution_count": 50 }, { "metadata": { "ExecuteTime": { - "end_time": "2024-09-23T11:57:54.390455Z", - "start_time": "2024-09-23T11:57:54.387182Z" + "end_time": "2024-09-23T12:46:11.433829Z", + "start_time": "2024-09-23T12:46:11.431467Z" } }, "cell_type": "code", "source": "simulator = bf.simulators.CompositeLambdaSimulator([alpha_prior, r_prior, theta_prior, forward_model])", "id": "4b89c861527c13b8", "outputs": [], - "execution_count": 15 + "execution_count": 51 }, { "metadata": {}, @@ -130,8 +130,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2024-09-23T11:57:54.447364Z", - "start_time": "2024-09-23T11:57:54.433438Z" + "end_time": "2024-09-23T12:46:11.484514Z", + "start_time": "2024-09-23T12:46:11.477075Z" } }, "cell_type": "code", @@ -141,13 +141,13 @@ ], "id": "e6218e61d529e357", "outputs": [], - "execution_count": 16 + "execution_count": 52 }, { "metadata": { "ExecuteTime": { - "end_time": "2024-09-23T11:57:54.489441Z", - "start_time": "2024-09-23T11:57:54.485317Z" + "end_time": "2024-09-23T12:46:11.530636Z", + "start_time": "2024-09-23T12:46:11.527823Z" } }, "cell_type": "code", @@ -174,7 +174,7 @@ ] } ], - "execution_count": 17 + "execution_count": 53 }, { "cell_type": "markdown", @@ -197,8 +197,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2024-09-23T11:57:54.539575Z", - "start_time": "2024-09-23T11:57:54.536761Z" + "end_time": "2024-09-23T12:46:11.579516Z", + "start_time": "2024-09-23T12:46:11.577479Z" } }, "cell_type": "code", @@ -210,7 +210,7 @@ ], "id": "b6c057787bb01cc6", "outputs": [], - "execution_count": 18 + "execution_count": 54 }, { "cell_type": "markdown", @@ -229,8 +229,8 @@ "id": "09206e6f", "metadata": { "ExecuteTime": { - "end_time": "2024-09-23T11:57:54.612396Z", - "start_time": "2024-09-23T11:57:54.583221Z" + "end_time": "2024-09-23T12:46:11.633859Z", + "start_time": "2024-09-23T12:46:11.622576Z" } }, "source": [ @@ -243,7 +243,7 @@ ")" ], "outputs": [], - "execution_count": 19 + "execution_count": 55 }, { "cell_type": "markdown", @@ -256,8 +256,8 @@ "id": "96ca6ffa", "metadata": { "ExecuteTime": { - "end_time": "2024-09-23T11:57:54.635516Z", - "start_time": "2024-09-23T11:57:54.632271Z" + "end_time": "2024-09-23T12:46:11.679015Z", + "start_time": "2024-09-23T12:46:11.676655Z" } }, "source": [ @@ -267,7 +267,7 @@ ")" ], "outputs": [], - "execution_count": 20 + "execution_count": 56 }, { "metadata": {}, @@ -281,8 +281,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2024-09-23T11:57:54.685012Z", - "start_time": "2024-09-23T11:57:54.678332Z" + "end_time": "2024-09-23T12:46:11.723529Z", + "start_time": "2024-09-23T12:46:11.721223Z" } }, "cell_type": "code", @@ -292,20 +292,20 @@ ], "id": "e8d7e053", "outputs": [], - "execution_count": 21 + "execution_count": 57 }, { "metadata": { "ExecuteTime": { - "end_time": "2024-09-23T11:57:54.728065Z", - "start_time": "2024-09-23T11:57:54.723396Z" + "end_time": "2024-09-23T12:46:11.767440Z", + "start_time": "2024-09-23T12:46:11.765348Z" } }, "cell_type": "code", "source": "approximator.compile(optimizer=optimizer)", "id": "51808fcd560489ac", "outputs": [], - "execution_count": 22 + "execution_count": 58 }, { "cell_type": "markdown", @@ -322,14 +322,14 @@ { "metadata": { "ExecuteTime": { - "end_time": "2024-09-23T11:58:36.531931Z", - "start_time": "2024-09-23T11:58:36.530025Z" + "end_time": "2024-09-23T12:46:11.811178Z", + "start_time": "2024-09-23T12:46:11.809169Z" } }, "cell_type": "code", "source": [ "epochs = 30\n", - "batches_per_epoch = 100\n", + "batches_per_epoch = 1000\n", "\n", "# \"auto\" attempts to make the batch size large enough to fill the memory budget\n", "batch_size = \"auto\"\n", @@ -338,15 +338,15 @@ ], "id": "beb53eb861b3109", "outputs": [], - "execution_count": 25 + "execution_count": 59 }, { "cell_type": "code", "id": "0f496bda", "metadata": { "ExecuteTime": { - "end_time": "2024-09-23T12:02:39.158049Z", - "start_time": "2024-09-23T11:59:19.983836Z" + "end_time": "2024-09-23T13:10:46.367507Z", + "start_time": "2024-09-23T12:46:11.855464Z" } }, "source": [ @@ -376,69 +376,69 @@ "output_type": "stream", "text": [ "Epoch 1/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m8s\u001B[0m 65ms/step - loss: 0.8973 - loss/inference_loss: 0.8973\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m48s\u001B[0m 48ms/step - loss: 0.6327 - loss/inference_loss: 0.6327\n", "Epoch 2/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 65ms/step - loss: 0.6423 - loss/inference_loss: 0.6423\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m48s\u001B[0m 48ms/step - loss: 0.5769 - loss/inference_loss: 0.5769\n", "Epoch 3/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 65ms/step - loss: 0.6131 - loss/inference_loss: 0.6131\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m48s\u001B[0m 48ms/step - loss: 0.5668 - loss/inference_loss: 0.5668\n", "Epoch 4/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 62ms/step - loss: 0.6044 - loss/inference_loss: 0.6044\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5633 - loss/inference_loss: 0.5633\n", "Epoch 5/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 65ms/step - loss: 0.5979 - loss/inference_loss: 0.5979\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m48s\u001B[0m 48ms/step - loss: 0.5582 - loss/inference_loss: 0.5582\n", "Epoch 6/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 61ms/step - loss: 0.5998 - loss/inference_loss: 0.5998\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5545 - loss/inference_loss: 0.5545\n", "Epoch 7/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 64ms/step - loss: 0.5897 - loss/inference_loss: 0.5897\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5472 - loss/inference_loss: 0.5472\n", "Epoch 8/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 65ms/step - loss: 0.5895 - loss/inference_loss: 0.5895\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m48s\u001B[0m 48ms/step - loss: 0.5456 - loss/inference_loss: 0.5456\n", "Epoch 9/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 63ms/step - loss: 0.5855 - loss/inference_loss: 0.5855\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5444 - loss/inference_loss: 0.5444\n", "Epoch 10/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 65ms/step - loss: 0.5837 - loss/inference_loss: 0.5837\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5454 - loss/inference_loss: 0.5454\n", "Epoch 11/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 63ms/step - loss: 0.5870 - loss/inference_loss: 0.5870\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5415 - loss/inference_loss: 0.5415\n", "Epoch 12/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 63ms/step - loss: 0.5787 - loss/inference_loss: 0.5787\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m50s\u001B[0m 50ms/step - loss: 0.5416 - loss/inference_loss: 0.5416\n", "Epoch 13/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 61ms/step - loss: 0.5826 - loss/inference_loss: 0.5826\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m50s\u001B[0m 50ms/step - loss: 0.5417 - loss/inference_loss: 0.5417\n", "Epoch 14/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 61ms/step - loss: 0.5803 - loss/inference_loss: 0.5803\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5421 - loss/inference_loss: 0.5421\n", "Epoch 15/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 60ms/step - loss: 0.5768 - loss/inference_loss: 0.5768\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5395 - loss/inference_loss: 0.5395\n", "Epoch 16/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 59ms/step - loss: 0.5784 - loss/inference_loss: 0.5784\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m50s\u001B[0m 50ms/step - loss: 0.5390 - loss/inference_loss: 0.5390\n", "Epoch 17/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 60ms/step - loss: 0.5711 - loss/inference_loss: 0.5711\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m50s\u001B[0m 50ms/step - loss: 0.5393 - loss/inference_loss: 0.5393\n", "Epoch 18/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 59ms/step - loss: 0.5781 - loss/inference_loss: 0.5781\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m50s\u001B[0m 50ms/step - loss: 0.5380 - loss/inference_loss: 0.5380\n", "Epoch 19/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 61ms/step - loss: 0.5776 - loss/inference_loss: 0.5776\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m50s\u001B[0m 50ms/step - loss: 0.5363 - loss/inference_loss: 0.5363\n", "Epoch 20/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 64ms/step - loss: 0.5711 - loss/inference_loss: 0.5711\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5377 - loss/inference_loss: 0.5377\n", "Epoch 21/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 63ms/step - loss: 0.5711 - loss/inference_loss: 0.5711\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5389 - loss/inference_loss: 0.5389\n", "Epoch 22/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 64ms/step - loss: 0.5681 - loss/inference_loss: 0.5681\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5388 - loss/inference_loss: 0.5388\n", "Epoch 23/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 60ms/step - loss: 0.5699 - loss/inference_loss: 0.5699\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5378 - loss/inference_loss: 0.5378\n", "Epoch 24/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 60ms/step - loss: 0.5686 - loss/inference_loss: 0.5686\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5357 - loss/inference_loss: 0.5357\n", "Epoch 25/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 60ms/step - loss: 0.5672 - loss/inference_loss: 0.5672\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m50s\u001B[0m 50ms/step - loss: 0.5349 - loss/inference_loss: 0.5349\n", "Epoch 26/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 59ms/step - loss: 0.5647 - loss/inference_loss: 0.5647\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5379 - loss/inference_loss: 0.5379\n", "Epoch 27/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 61ms/step - loss: 0.5674 - loss/inference_loss: 0.5674\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m50s\u001B[0m 50ms/step - loss: 0.5363 - loss/inference_loss: 0.5363\n", "Epoch 28/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m7s\u001B[0m 62ms/step - loss: 0.5651 - loss/inference_loss: 0.5651\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m50s\u001B[0m 50ms/step - loss: 0.5346 - loss/inference_loss: 0.5346\n", "Epoch 29/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 61ms/step - loss: 0.5693 - loss/inference_loss: 0.5693\n", + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5344 - loss/inference_loss: 0.5344\n", "Epoch 30/30\n", - "\u001B[1m100/100\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 61ms/step - loss: 0.5629 - loss/inference_loss: 0.5629\n" + "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m50s\u001B[0m 50ms/step - loss: 0.5375 - loss/inference_loss: 0.5375\n" ] } ], - "execution_count": 27 + "execution_count": 60 }, { "cell_type": "markdown", @@ -454,43 +454,25 @@ "### Two Moons Posterior\n", "\n", "The two moons posterior at point $x = (0, 0)$ should resemble two crescent shapes. Below, we plot the corresponding posterior samples and posterior density. \n", - "These results suggest that our flow matching setup can approximate the expected analytical posterior well." + "These results suggest that our flow matching setup can approximate the expected analytical posterior well. (Note that you can achieve even better fit the longer you train.)" ] }, { "cell_type": "code", - "execution_count": 25, "id": "8562caeb", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(-0.5, 0.5)" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhAAAAF2CAYAAAA/RaFTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABQpklEQVR4nO3deXxU1cE+8OfOksk+2SYJIQmLwYAgIFgSEIoBAVFAsRYpNlCkrVQtRWor1voK/lS0WoXXirZ9FbDKUvcgFKESLWvALOykBAIBkpCFZLJnlnt+f8QZM8kkmRsyk0x4vp8Pxblz751zz0yZZ8459xxJCCFAREREpICquwtARERE3ocBgoiIiBRjgCAiIiLFGCCIiIhIMQYIIiIiUowBgoiIiBRjgCAiIiLFGCCIiIhIMQYIIiIiUowBgoiIiBRjgCAiIiLFGCCoQ+vXr4ckSfY/Go0GsbGxWLhwIS5fvtzlr7d//36sWLEClZWVXX5u4PvrOX/+vFvO3xv05Dpy9+fDmWupj55cl5313HPP4aabboIsy/ZtNTU1WLp0KWJiYuDr64uRI0di8+bNnTq/q+d655130LdvX9TW1nb6WugaCKIOrFu3TgAQ69atEwcOHBC7d+8WK1asEDqdTgwYMEDU1NR06eu98sorAoDIz8/v0vPalJSUiAMHDoiGhga3nL83sL3n7noProW7Px/OXMtnprd93i5fviwCAgLEhx9+6LB9ypQpIiQkRLz99tti9+7d4uc//7kAID744APFr+Hqucxmsxg0aJD4n//5n2u6JuocBgjqkO3L5PDhww7bn3nmGQFAvP/++136eu76gqitre3S87n7vN2JAaJJb3xvr9Xvf/970bdvX2G1Wu3btm3bJgCIjRs3Ouw7ZcoUERMTIywWi8vnV3quV199Vej1er5X3YBdGNRpycnJAIALFy7Yt+3duxeTJ09GUFAQ/P39MW7cOGzbts3huNLSUvzyl79EXFwcdDodDAYDbrvtNvz73//GihUr8Lvf/Q4AMGDAAHu3yddff20//syZM5g3bx4iIyOh0+kwZMgQvPnmmw6vsWLFCkiShKysLNx///0IDQ3FDTfcAKDtJmVXyt7eeZ1p71pt8vLysHDhQgwaNAj+/v7o27cvZs6ciWPHjjl97aNHj+LHP/4x9Ho9wsLCsGzZMlgsFuTm5uLOO+9EUFAQ+vfvjz/96U9Oj8/OzsZ9992H4OBg6PV6/PSnP0VpaWmb16Ck3l29ZmdcqQdXPh/OXOt76+wz8/nnn2P48OHQ6XQYOHAg1qxZYz9Hc86Ote134sQJ/OQnP4Fer0dUVBQeeughGI3Gdq+lqKgIgYGBmDt3rsP2L774AlqtFk8//XS7x18Lk8mEd955B/PmzYNK9f3Xx6efforAwED8+Mc/dth/4cKFKCwsREZGhsuvofRcDz74IKqqqjrdXUKdp+nuApD3ysvLAwAYDAYAwDfffIMpU6Zg+PDheOedd6DT6bB27VrMnDkTmzZtwgMPPAAASE1NRVZWFl544QXceOONqKysRFZWFsrLy/Hzn/8cV69exRtvvIFPPvkEffr0AQDcdNNNAICTJ09i3LhxiI+Px5///GdER0fjyy+/xJIlS1BWVoZnn33WoYz33Xcf5s6di8WLF7fbT+pq2ZWet71rtSksLER4eDheeuklGAwGXL16FRs2bEBSUhKys7ORmJjocM45c+bgpz/9KR5++GHs2rULf/rTn2A2m/Hvf/8bjzzyCJ544gls3LgRTz75JBISEnDfffc5HD979mzMmTMHixcvxokTJ/DMM8/g5MmTyMjIgFardXodSurdlWt2xpV66Ojz4Yw73tsdO3bgvvvuww9/+ENs2bIFFosFr776Kq5cudLuNbb0ox/9CA888AAWLVqEY8eO4amnngIAvPvuu20e06dPH/z+97+3h6nRo0fj66+/xo9//GP86le/wgsvvOD0OCEErFarS+XSaJx/NWRkZKC8vBwpKSkO248fP44hQ4a0Om748OH258eNG+fSays9V3R0NAYPHoxt27bhoYcecuk1qIt0dxMI9Xy25uyDBw8Ks9ksqqurxRdffCEMBoMICgoSxcXFQgghkpOTRWRkpKiurrYfa7FYxLBhw0RsbKyQZVkIIURgYKBYunRpm6/XXhP1tGnTRGxsrDAajQ7bH3vsMeHr6yuuXr0qhBDi2WefFQCc9o06a553teztndeZjq7VGYvFIkwmkxg0aJB4/PHH7dttr/3nP//ZYf+RI0cKAOKTTz6xbzObzcJgMIj77ruv1fHNzymEEB988EGrrqiWdeRqvXf2mp1pqx6UdmF0xXvbsj5+8IMfiLi4ONHY2Gjfp7q6WoSHh4uW/6w6+7zZXutPf/qTw76PPPKI8PX1tZepLbW1tSImJkZMnjxZHDp0SAQFBYmFCxe2e1x6eroA4NKftur25ZdfFgDs/5+3GTRokJg2bVqr/QsLCwUA8eKLL7Z7Pdd6rgcffFBERUW5/BrUNdiFQS5LTk6GVqtFUFAQZsyYgejoaPzrX/9CVFQUamtrkZGRgfvvvx+BgYH2Y9RqNVJTU3Hp0iXk5uYCAMaMGYP169fj+eefx8GDB2E2m116/YaGBnz11VeYPXs2/P39YbFY7H/uuusuNDQ04ODBgw7H/OhHP+rwvErKruS8gGvXarFY8OKLL+Kmm26Cj48PNBoNfHx8cObMGZw6darV/jNmzHB4PGTIEEiShOnTp9u3aTQaJCQkOHQv2Tz44IMOj+fMmQONRoP09HSn16C03jv7/iqtB1e4472tra3Ft99+i3vvvRc+Pj727YGBgZg5c6ai8s2aNcvh8fDhw9HQ0ICSkpJ2j/P398fzzz+Pr776CikpKZg+fTr+/ve/t+o+aW706NE4fPiwS39iYmKcnqOwsBCSJCEiIqLVc+29dnvPKd3f2XORkZEoKSmBxWJR9Dp0bRggyGXvvfceDh8+jOzsbBQWFuLo0aO47bbbAAAVFRUQQtiblJuz/WNka8LesmULFixYgP/7v//D2LFjERYWhvnz56O4uLjd1y8vL4fFYsEbb7wBrVbr8Oeuu+4CAJSVlTkc46w8LSkpu5LzAq5d67Jly/DMM8/g3nvvxdatW5GRkYHDhw9jxIgRqK+vb3XOsLAwh8c+Pj7w9/eHr69vq+0NDQ2tjo+OjnZ4rNFoEB4e3mYXg9J67+z7q7QeXOGO99Z2zqioqFbPOdvWnvDwcIfHOp0OAFy63htvvBFA0xfq+vXroVar290/MDAQI0eOdOlP82DUXH19PbRabavXauvzc/XqVQCtP7Pt6cy5fH19IYRw+nkn9+EYCHLZkCFDcOuttzp9LjQ0FCqVCkVFRa2eKywsBAD7r5aIiAisXr0aq1evRkFBAdLS0rB8+XKUlJRgx44dbb5+aGio/Zfjo48+6nSfAQMGODx25ZePkrIrOa/tuI6u9f3338f8+fPx4osvOhxbVlaGkJAQl15HieLiYvTt29f+2GKxoLy8vNWXmY3Seu/s++uOenDHexsaGgpJkpyOd+goJHWVnJwczJgxA7fddhv27duHd999t833xuabb75pNXahLfn5+ejfv3+r7RERETCZTKitrUVAQIB9+80334xNmzbBYrE4jF2wDYAdNmyYS6/b2XNdvXoVOp3OoZWJ3I8tENQlAgICkJSUhE8++cTh15Msy3j//fcRGxtr/8XUXHx8PB577DFMmTIFWVlZANr+Febv74+UlBRkZ2dj+PDhuPXWW1v9aetL0B1lV8rZtQJNX1i2a7bZtm2bWybpAoAPPvjA4fE///lPWCwW3H777U73v5Z6b+uanXG1HpT8SnfHexsQEIBbb70Vn332GUwmk317TU0NvvjiC0Xn6ozc3FxMmzYNY8eORXp6Ou655x6sWLGiw7s3uqILY/DgwQCAs2fPOmyfPXs2ampq8PHHHzts37BhA2JiYpCUlOTy9XXmXOfOnWt3IC25B1sgqMusWrUKU6ZMQUpKCp544gn4+Phg7dq1OH78ODZt2gRJkmA0GpGSkoJ58+Zh8ODBCAoKwuHDh+2j2oGmXyAAsGbNGixYsABarRaJiYkICgrCmjVrMH78eEyYMAG/+tWv0L9/f1RXVyMvLw9bt27F7t273VZ2pVy5VqBpTMP69esxePBgDB8+HJmZmXjllVcQGxvbqWvpyCeffAKNRoMpU6bY78IYMWIE5syZ0+Yxrta7q9fsjKv10N7nwxl3vLfPPfcc7r77bkybNg2/+c1vYLVa8corryAwMNDe1O4O58+fxx133IHExER8/PHH0Gq1eOmllzBs2DC8+OKLePnll9s8NigoqM0WRFfZQubBgwftd0UAwPTp0zFlyhT86le/QlVVFRISErBp0ybs2LED77//fqsuD0mSMHHiRKe33yo9lyzLOHToEBYtWnRN10ad0K1DOMkrtDWRlDN79uwRkyZNEgEBAcLPz08kJyeLrVu32p9vaGgQixcvFsOHDxfBwcHCz89PJCYmimeffdZhIpinnnpKxMTECJVKJQCI9PR0+3P5+fnioYceEn379hVarVYYDAYxbtw48fzzz9v3sY1yLy0tbfN6Wo4076jsHZ23JVevtaKiQixatEhERkYKf39/MX78eLFnzx4xceJEMXHixA5fe8GCBSIgIKDV60+cOFEMHTq01fGZmZli5syZIjAwUAQFBYmf/OQn4sqVKx3WkSv17uo1O+NqPQjR/ufDmWt9b53Vx6effipuvvlm4ePjI+Lj48VLL70klixZIkJDQzs8tq3Xam8Cr8LCQnHDDTeIUaNGtbob5he/+IXQ6XQemVxrwoQJ4q677mq1vbq6WixZskRER0cLHx8fMXz4cLFp0yan+wEQc+fObfM1XD2XEEJ89dVX9s81eZYkhBCejy1E5GkrVqzAypUrUVpa6nQUPV0bs9mMkSNHom/fvti5c2d3F8dtPv74YzzwwAO4cOGCw1gaV23fvh0zZszAkSNH7K1J1yI1NRXnzp3Dvn37rvlcpAy7MIiIOmHRokWYMmUK+vTpg+LiYrz99ts4deoU1qxZ091Fc6v77rsPP/jBD7Bq1Sr85S9/UXx8eno65s6d2yXh4ezZs9iyZUunuy7p2jBAEBF1QnV1NZ544gmUlpZCq9Vi1KhR2L59O+64447uLppbSZKEv//970hLS4Msyw5TWrvilVde6bKyFBQU4C9/+QvGjx/fZeck17ELg4iIiBTjbZxERESkGAMEERERKcYAQURERIr1ugAhhEBVVRU4tIOIiMh9el2AqK6uhl6vR3V1dXcXRTFZllFcXAxZlru7KNcN1rnnsc49j3XueddDnfe6AEFERETuxwBBREREijFAEBERkWIMEERERKQYAwQREREpxgBBREREijFAEBERkWIMEERERKQYAwQREREpxgBBREREijFAEBERkWIMEERERKQYAwQREREpxgBBREREijFAEBERkWIMEERERKQYAwQREREpxgBBREREijFAEBERkWIMEERERKQYAwQREREpxgBBREREijFAEBERkWIMEERERKQYAwQREREpxgBBREREinkkQKxduxYDBgyAr68vRo8ejT179rh03L59+6DRaDBy5Ej3FpCIiIgUcXuA2LJlC5YuXYqnn34a2dnZmDBhAqZPn46CgoJ2jzMajZg/fz4mT57s7iISERGRQm4PEK+99hoWLVqEn//85xgyZAhWr16NuLg4vPXWW+0e9/DDD2PevHkYO3asu4tIRERECmnceXKTyYTMzEwsX77cYfvUqVOxf//+No9bt24dzp49i/fffx/PP/98u6/R2NiIxsZG++OqqioAgCzLkGX5GkrvebIsQwjhdeX2Zqxzz2Odex7r3PO8uc5VKtfaFtwaIMrKymC1WhEVFeWwPSoqCsXFxU6POXPmDJYvX449e/ZAo+m4eKtWrcLKlStbbS8tLUVDQ0PnCt5NZFmG0WiEEMLlN5CuDevc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81jnnsc697zeXuduvSofHx+MHj0au3btcti+a9cujBs3zukxY8eObbX/zp07ceutt7Ya/0BERETdw+2xaNmyZfi///s/vPvuuzh16hQef/xxFBQUYPHixQCauiDmz59v33/x4sW4cOECli1bhlOnTuHdd9/FO++8gyeeeMLdRSUiIiIXuX0MxAMPPIDy8nI899xzKCoqwrBhw7B9+3b069cPAFBUVOQwJ8SAAQOwfft2PP7443jzzTcRExOD//3f/8WPfvQjdxeViIiIXOT2eSA8jfNAkBKsc89jnXse69zzroc6751XRURERG7FAEFERESKMUAQERGRYgwQREREpBgDBBERESnGAEFERESKMUAQERGRYgwQREREpBgDBBERESnGAEFERESKMUAQERGRYgwQREREpBgDBBERESnGAEFERESKMUAQERGRYgwQREREpBgDBBERESnGAEFERESKMUAQERGRYgwQ1OPkFZTitQ3pyCso7e6iEBFRGxggqNu0FRTS0o9j47ZMpKUf73BfIiLqHpruLgBdv2xBAQCWLUixb5+VMszh75b7zkoZhrT045iVMgwJ8QYPlpiIiGzYAkHdZlbKMMy7e7RDUACAhHiDPSTYWhxGJMagX0woRiTGOG2hICIiz2ILBHWbhHiDveUhr6AUr7/3Nc5dKscTP0vB7owz+OeObJRX1uKF38zAkdxCXCiswO6MMwCAabcNbhU8iIjIcxggqEdISz+OtPTjMJkteHX9bgCAVRaorK7H02u+QGV1PabdNhgA8OW+05h392h2XxARdSN2YVC3aDkockRiDML0flBJwKmzV3Ay7woSBxgQEuSHTduz8PnuY8g6dQmTkgZh3t2jMSIxhoMqiYi6EVsgqFukpR/Hhs8PYdeB0xgYG4GTZ4tRVFoNAKhrMEMlAVXVDUg/9F/otGo0mMzIzb+CI7mFWLYgBa9tSHc6AJOIiDyDAYLcLq+g1OGuibyCUpRX1iJM74+cU5eReeJSq2NUKhXOFJQBALQaFUYk9sXA2HCUV9Yir6AUs1KGobyy1v6Y3RlERJ7FAEFuZ7troryyFuEhATh7sQz/2nMKEgSssnB6jMUq2/+7f0wYBsaG49ylchQUXsXp/Ct4edkshIcEYOO2TISHBLAVgojIwxggyO1srQVZpy6hoPAqtFo1TGYLTGZrh8fqtBqMHBKL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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-23T13:10:49.205561Z", + "start_time": "2024-09-23T13:10:46.376577Z" } - ], + }, "source": [ "# Set the number of posterior draws you want to get\n", "num_samples = 5000\n", "\n", "# Obtain samples from amortized posterior\n", - "obs_data = [0, 0]\n", - "samples_at_origin = approximator.sample(conditions={\"observables\": obs_data}, num_samples=num_samples)[\"parameters\"]\n", + "conditions = {\"x\": np.array([[0.0, 0.0]])}\n", + "samples_at_origin = approximator.sample(conditions=conditions, num_samples=num_samples)[\"theta\"]\n", "\n", "# Prepare figure\n", "f, axes = plt.subplots(1, figsize=(6, 6))\n", @@ -503,7 +485,30 @@ "axes.set_aspect(\"equal\", adjustable=\"box\")\n", "axes.set_xlim([-0.5, 0.5])\n", "axes.set_ylim([-0.5, 0.5])" - ] + ], + "outputs": [ + { + "data": { + "text/plain": [ + "(-0.5, 0.5)" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAg0AAAIQCAYAAAACUF3RAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAABwWklEQVR4nO3deXxU5aEH/N+ZJfu+QIghSBISlgAJKCDgErhuiEG0WtR7pcBrq75qFYreivX2tVqXIlbhYuuG0KuiRcCo1JVoBSSoJIEACSSBLE5CJslMMpksM3POef8YZpxJJslJyEwWft/Pp0XOnHPmmSfR85tnFWRZlkFERETUC9VgF4CIiIiGB4YGIiIiUoShgYiIiBRhaCAiIiJFGBqIiIhIEYYGIiIiUoShgYiIiBRhaCAiIiJFGBqIiIhIEYYGIiIiUoShgYiIiBRhaKBu7dy5E2lpac7/TZ48GVdccQV+//vf4+zZswP+focPH8bGjRvR3Nw84PcGfv481dXVXrn/SDCU68jbvx+enE99DOW67K9NmzZh0aJFkCTJecxsNuPpp5/G/PnzMXXqVCxZsgSffPJJv+6v9F7//Oc/cfnll6O1tbXfn4X6h6GBevXMM8/gvffew5tvvonbbrsNH3/8Me64444B/xc2Pz8fmzZt8tpD4aqrrsJ7772HUaNGeeX+5F3e/v3w5Hx+Z0ba79vZs2fxxhtv4MEHH4RK9fOj44EHHsDu3btx//3347XXXsPUqVOxevVqfPTRR31+D6X3Wrp0KYKCgvD666+f9+eivtEMdgFo6JswYQKmTp0KAJgzZw5EUcTmzZvx5ZdfIjs7e5BL17u2tjYEBgYiKioKUVFRA35fGnkG4ndmoH/fBtu2bdsQGhqKa665xnnsm2++wf79+/HCCy9g8eLFAOz/jdDpdHj++eexaNEiqNVqRffvy700Gg1++ctfYvPmzbj77rv576EPsaWB+iwjIwMAoNPpnMd++OEHLF++HJmZmZg+fTqWLVuGr7/+2u26xsZG/OEPf8CVV16J9PR0zJkzB8uWLcOBAwewceNGPP/88wCAhQsXOrtE8vLynNefOXMGa9aswWWXXYb09HRcf/31ePvtt93eY+PGjUhLS8OxY8fw4IMP4tJLL8XVV18NoPvmYiVl7+m+nvT0WR0qKirw+9//Htdccw2mT5+Oyy+/HPfccw9KSko8vndxcTEefPBBzJw5E7NmzcIzzzwDm82G8vJyrFq1CpmZmViwYAFee+01j9cfP34c999/P2bMmIGZM2fid7/7HRobG7v9DH2pd6Wf2RMl9aDk98OT8/3Zevqd+fLLL3HjjTciPT0dCxcuxNatW533cOXpWsd5p06dwurVqzFz5kzMnTsXv//972EymXr8LHV1dcjMzMTDDz/sdjw3NxdTpkzBiy++2OP158NisWDHjh1YvHixWyvDF198gaCgIFx33XVu5998882oq6tDYWGh4vfo671uvPFGtLS09LsrhPqHLQ3UZxUVFQDg/BZ16NAhrFy5EqmpqXj66afh5+eHd999F/fccw82bNiARYsWAQDWrl2L48eP4+GHH8bFF1+M5uZmHD9+HEajEbfeeiuamprwj3/8A5s2bUJsbCwAICUlBQBQWlqKZcuWYcyYMXj00UcRGxuLffv24amnnoLBYMD999/vVsYHHngAixYtwrJly3rsRlFa9r7et6fP6lBXV4eIiAisWbMGUVFRaGpqwq5du3Dbbbdh165dSEpKcrvnQw89hOzsbCxbtgz79+/H66+/DpvNhgMHDuCOO+7AqlWr8NFHH2H9+vUYN26c2zdCALj//vtx3XXXYdmyZSgtLcVLL72EsrIyvP/++9BqtR4/R1/qXcln9kRJPfT2++GJN362//73v/HAAw/gkksuwV//+lfYbDa8+eabqK+v7/EzduZ4r1/84hc4efIkXnjhBQD2rsDujBo1CqtWrcKmTZuwatUqpKenIy8vD7/97W9x++23dwkTDrIsQxRFReXSaDw/Eo4cOQKj0YjZs2e7HT916hSSk5O7XOcIUKdOncKMGTMUvXdf7xUbG4ukpCR88803+MUvfqHoPWgAyETd+OCDD+TU1FS5oKBAtlqtcktLi5ybmyvPmTNHzszMlPV6vSzLsnzbbbfJl112mdzS0uK81mazyYsXL5avuOIKWZIkWZZlOSMjQ3766ae7fb/XX39dTk1Nlauqqrq8tnLlSvmKK66QTSaT2/Enn3xSnjp1qmw0GmVZluWXX35ZTk1NlV966aVuP4/r/ZWWvaf7etLbZ/XEZrPJFotFvuaaa+Q///nPzuOO937zzTfdzl+yZImcmpoqf/75585jVqtVnjNnjnz//fd3ud71nrIsyzk5OXJqaqr84YcfOo91riOl9d7fz+xJd/XQ0++HJwPxs+1cH7fccot85ZVXyh0dHc5zWlpa5FmzZsmpqak9Xuv6Xq+99prbuX/84x/lqVOnOsvUndbWVnn+/Pny8uXL5cLCQjkzM1P+7//+7x6vO3jwoJyamqrof93V7auvviqnpqY6/513uOaaa+SVK1d2Of/s2bNyamqq/Le//a3Hz3O+91qzZo08d+5cxe9B548tDdSr2267ze3vqamp+OMf/4iYmBi0traisLAQt99+O4KDg53nqNVqZGdnY/369SgvL0dycjKmTZuGXbt2ISIiAnPnzsWUKVO6/YbrqqOjAwcPHsTtt9+OgIAA2Gw252tXXHEF/u///g8FBQW48sorncc7f8v2pC9l78t9ASj6rDabDa+//jpycnJQWVkJq9XqfK2srKzLPa+66iq3vycnJ6O4uBhXXHGF85hGo8G4cePw008/dbn+xhtvdPv79ddfj//+7/9GXl6ex7Epfa33/v58+1oPSnjjZ9va2oqioiL853/+J/z8/JzHg4ODsWDBAuzcuVNx+RYsWOD297S0NHR0dKChoQExMTHdXhcYGIiHHnoIjz32GJYvX44rr7wSTz31FARB6PaaKVOmYMeOHYrK1d2gzbq6OgiCgMjIyC6v9fTePb3W1/M9vRYdHY2GhgbYbLZuW0loYLGWqVfPPfecs9kwOjra7T8szc3NkGXZ2VzsynGeo3n6xRdfxCuvvIIdO3bgpZdeQlBQEK6++mqsXbvW4/UORqMRNpsN//jHP/CPf/zD4zkGg8Hje/ekL2Xvy30BZZ/12Wefxdtvv427774bl156KcLDwyEIAh5//HF0dHR0uWd4eLjb37VaLQIDA+Hv79/leEtLS5frO39OjUaDiIiIbrsP+lrv/f359rUelPDGz9Zxz+jo6C6veTrWk4iICLe/O0JIe3t7r9defPHFzn9+9tlnex1oGBwcjEmTJikqV3cP3o6ODmg0mi7v1d3vT1NTE4Cuv7M96c+9/P39Icuys3zkfaxl6lVycrJz9kRnYWFhUKlU0Ov1XV6rq6sDAOe3k6ioKKxbtw7r1q2DTqfD3r178cILL6ChoQFvvPFGt+8fFhYGtVqNJUuW4I477vB4TkJCQl8/Vp/K3ldKPmtOTg5uuukmrF692u1ag8GAsLCwfr1vT/R6PUaPHu38u81mg9Fo7PIAc+hrvff35+uNevDGzzYsLAyCIKChoaHLa30d09BfJ06cwD333IMZM2bg8OHD+OCDD3DnnXf2eM2hQ4dw1113Kbr/V1995fHfpcjISFitVrS2tiIoKMh5PDU1FR9//HGXb/onT54EYJ95pVR/7mU0GuHn5+fWmkTexdBA5yUoKAjTp0/HF198gUcffRQBAQEAAEmSkJOTg7i4OIwfP77LdfHx8fjP//xPfPfddzh8+DCAn79tdf52GRgYiNmzZ+P48eNIS0tzaxoejLL3lafPCtibWzs333/99dc4e/Ysxo0bd97v29lHH32E9PR059//9a9/wWazYdasWR7PP5967+4ze6K0Hrr7/fDEGz/boKAgpKen48svv8QjjzziLI/ZbEZubm6f7tUfjlkyGRkZ2Lx5M377299i48aNyM7ORmhoaLfXDUT3hKOuKisrMXHiROfx//iP/8D777+Pzz//3G1g6a5duzBq1ChMnz5d0fv2917V1dU9DoalgcfQQOdt9erVWLlyJe666y6sXLkSWq0W77zzDk6dOoUNGzZAEASYTCbcddddWLx4MZKSkhAcHIyjR4/i22+/dU5vS01NBQBs3boVS5cuhUajwfjx4xESEoJ169bhjjvuwJ133onbb78dF110EcxmMyorK7F3715s27bNa2XvKyWfFbCPUXDMDnBM+XvjjTcQFxfXr8/Smy+++AJqtRrz5s3DqVOn8NJLL2HixIm4/vrru71Gab0r/cyeKK2Hnn4/PPHGz/bBBx/Eb37zG6xatQrLly+HKIp44403EBwc7GxG94bq6mqsWLEC48ePx8aNG6HVarFmzRrceOON+Nvf/oa1a9d2e21ISEi3LYVKOWZNFBYWuoWGK6+8EvPmzcMf//hHtLS0IDExEZ988gm+/fZb/OUvf+nSnZGWloZZs2Z57O7q670kScKRI0c4c8LHGBrovM2aNQtvvfUWNm7ciN///veQJAkTJ07EK6+8gqysLAD2vsdp06bhww8/xE8//QSbzYYxY8bg7rvvxv/z//w/AOz/YfrNb36DXbt24Z///CckScK2bdswe/ZspKSkYOfOndi8eTP++te/orGxEaGhoRg3bpzbAEhvlL2vlHxWwP5A1mg0ePXVV9Ha2orJkydj48aNeOmll/r9eXqyceNGbNy4Ee+++y4EQcCCBQvw2GOP9diCoLTelX5mT5TWQ0+/H55442d7xRVXOMv20EMPITY2Frfffjvq6uqQk5PTr3v2pq6uDitWrEB0dDT+/ve/O1tNkpOTccstt2Dbtm24/fbb+9VFp9SYMWNwySWX4KuvvsIvf/lLt9c2btyIF198ES+//DKMRiOSkpKwYcMG3HDDDW7nmc1mAF3H1vTnXgCQl5cHk8nUZYAveZcgy7I82IUgIu/ZuHEjNm3ahO+++25ErVA4VFitVtx0000YPXo03nzzzcEujtd89tlnePjhh5Gbm+s2Nkapb775Br/5zW/w4YcfdlkIqz/Wrl2LqqoqbN++/bzvRcpxRUgioj547LHH8Mknn+DQoUPYs2cPVq5cibKysl5bVIa7a665BlOnTsXf//73fl1/8OBB3HDDDQMSGCorK/Gvf/0Lv/vd7877XtQ37J4gIuoDs9mM5557Do2NjdBqtZg8eTJeffVVzJ07d7CL5lWCIOBPf/oT9u7dC0mS3JaTVuLRRx8dsLLodDr84Q9/wCWXXDJg9yRl2D1BREREirB7goiIiBRhaCAiIiJFGBqIiIhIkREXGuRz28ByqAYREdHAGnGhQZIkFBQUQJKkwS5Kn8my7NwUh7yP9e1brG/fY5371oVQ3yMuNAx3wzHsDGesb99iffse69y3Rnp9MzQQERGRIgwNREREpAhDAxERESnC0EBERESKMDQQERGRIgwNREREpAhDAxERESnC0EBERESKMDQQERGRIgwNREREpAhDAxERESnC0EBERESKMDQQERGRIgwNREREpAhDAxERESnC0EBERESKMDQQERGRIgwNREREpAhDAxERESnC0EBERESKMDQQERGRIgwNREREpAhDAxERESnC0EBERESKMDQQERGRIgwNREREpAhDAxERESnC0EBERESKMDQQERGRIgwNREREpAhDAxERESnC0EBERESKMDQQERGRIgwNREREpAhDAxERESnC0EBERESKMDQQERGRIgwNREREpAhDAxERESnC0EBERESK+CQ0vP3221iwYAGmTp2Km2++GT/88IOi63788UdMnjwZS5Ys8XIJiYiIqDdeDw179uzBM888g3vvvRe7d+/GzJkzcffdd0On0/V4nclkwqOPPorLLrvM20UkIiIiBbweGrZs2YJbbrkFt956K5KTk7Fu3TrExcXh3Xff7fG6J554AosXL0ZGRoa3i0hEREQKaLx5c4vFgmPHjuHXv/612/F58+YhPz+/2+s++OADVFZW4i9/+QteeeWVfr23LMuQZblf1w4WR5mHW7mHK9a3b7G+fY917lvDub4FQVB0nldDg8FggCiKiI6OdjseExMDvV7v8ZozZ87ghRdewNtvvw2Npv/Fa25uhko1vMZ5yrKM1tZWAMp/gNR/rG/fYn37Huvct4ZzfUdERCg6z6uhwaFz5cmy7LFCRVHEmjVr8MADD2D8+PHn9Z5hYWFQq9XndQ9fc6TT8PDwYfcLNxyxvn2L9e17rHPfuhDq26uhITIyEmq1GvX19W7HGxoaEBMT0+V8s9mMoqIinDhxAn/6058AAJIkQZZlTJ48GW+88YbigZGCIAzLH5qj3MOx7MMR69u3WN++xzr3rZFe314NDX5+fpgyZQr279+Pq6++2nn8wIEDWLhwYZfzQ0JC8NFHH7kde+edd3Dw4EG8/PLLSEhI8GZxiYiIqAde755YsWIFHnnkEaSnpyMzMxPvvfceampqsGzZMgDACy+8gLNnz+L555+HSqVCamqq2/XR0dHw9/fvcpyIiIh8y+uhYdGiRTAYDNi8eTPq6uqQmpqKV199FRdddBEAQK/Xo6amxtvFICIiovMkyMNxbkgPRFFEQUEBMjIyhuVAyKamphE9iGYoYX37Fuvb91jnvnUh1PfwmpNIREREg4ahgYiIiBRhaCAiIiJFGBqIiIhIEYYGIiIiUoShgYiIiBRhaCAiIiJFGBqIiIhIEYYGIiIiUoShgYiIiBRhaCAiIiJFGBqIiIhIEYYGIiIiUoShgYiIiBRhaCAiIiJFGBqIiIhIEYYGIiIiUoShgYiIiBRhaCAiIiJFGBqIiIhIEYYGIiIiUoShgYiIiBRhaCAiIiJFGBqIiIhIEYYGIiIiUoShgYiIiBRhaCAiIiJFGBqIiIhIEYYGIiIiUoShgYiIiBRhaCAiIiJFGBqIiIhIEYYGIiIiUoShgYiIiBRhaCAiIiJFGBqIiIhIEYYGIiIiUoShgYiIiBRhaCAiIiJFGBqIiIhIEYYGIqJhpLRSjw1bc1FaqR/sotAFiKGBiGgYycktwjuf/Iic3CKPrzNUkDcxNBARDRGuD3xPD//SSj0ajGZcO28isrPSu1wD9B4qvFFWunBoBrsARERk53jgOzj+efXyLOfrn+0vxh03zERKYqzbNQ1GM6IjghEbGYxx8ZGYnhbvs7I6ykcjH0MDEdEQ4Wg9cPzZ3T9nZ6WjtFKPLbvyUFVrQGxUMIymNny2vxixUSEordBjb94pLJid2uP7lVbqkZNbhOysdGcIOZ+y0sjH0EBENIg6P7hXL8/q9mHu+vqjG3KQf6IaVpuEAD8NZkwaiztumImyqnqUVijrMujcStGX8OAoC11YGBqIiAaJ4+FfWlkPwL0b4p1PfkRZVT1q65tx37L5WDgnzXldTm4Rjp2qhSzLiIsOwaxpF2PF0tlISYzFP3IO4dDRCkwcPwqllXr889Mfcet1MzFh3Kgu7+9oJWgwmtnVQIowNBARnQclTfydz3F0LRw+UY1KXSMmJo12a+afnhaP/fnlyD9RjbKqejQ2tWJv3ikAwIqlszE9LR5WUYS5zQqrzQQAeHRDDu5bNh/v7DmMyhoD3tyVh3f2HEZx+VmY20U8/dvFXcrl2nLhaGk4ny4LGvkYGoiIzoOnAYGOUADYH/JbduXh7Y9/wLacQ1izPAu79x5F/olqSJKM2KgQ3LdsPgBg3Usfw2hqQ3l1A05XNaDDaoVaJaBG34S3ducBguB837Z2KwAgLiYU33x/CvpGM0pO1yEsJABajRoAUHL6LGw2EbIs46uDJdi8fV+XVgvAvath3Usf4/1P89FgNHsMGnRhY2ggIjoPngYE5uQW4f1P8wEA0RHBAIB2iw26umY8+cpnaG23IDQ4AFHhQaitNzlbEd7anQerTYIgAAIASQb8tRo0t3TAJkrQqFU4fKIagf4a2EQJAGC1iag3tkIGYGhuRUtrByJCA2Cx2DB/RhJGRQZhwexUrPnLbtTom1FWVY8dL650a0VwDTlGU1uvn5mtERcuhgYion5wfXB2HgcwPS0eCXERAIDYyGA0GM2IDA1EQ1MrWtosEEUJjU2taG5pg1Zj/8+w0dQGq80eBGQZkM/dyybaWwrs/yzh6Ekd1Kqfl9ipN7RCkmSoVQKCAvwQFKhFrd6EukYzdPpm/PWRG1FY8hMam1ohy0BtvQk3PfA6ZkxOQGhwACJCAwEA7+45DIvVhgnjYnHbdZlYsXR2t5+d0y0vXAwNRET90PnB6fptHQCqa40AgFfe24/TPzVietoY+PtrUFtvcp5jE2UAIvbnl+FURb3H9xEl2e3vFqsIQAQAtxYHUZLR1NKOppZ257nmNgv+d/sBTLh4NIIC/NBhESFJMuoaW/DZ/mJoNWr4adVIGz8K4+IjcfJMHU6eqYPFYsPhE9W4Y9EM6A1mTE+LR2GJztmywOmWFy6GBiKifuj84NyyKw/bcr6HWiVgfEI0EuIiMDYuAt/+WA5RlFB0brYDZPcQYBMlHC+r6/G9BPzc8uDKT6tBW0e7h1d+VlhSg4KSGqgE97eWZft4iGZTO/KPV2NsXATGxUehvLoBp87N5qiqaYRabQ8W9rBiD0idp1v2ZzAoDU8MDURE/eBpnQKtRo2wEH+crm6A1SaissYAi9UGAM6HLmAfzyh7SgHd8NOq0eFyvYNrq0J3HG/jaLDw06phtYmQZaDeYEbruQGVlbVGhAUHQJJkaNQCbKIMtVoFQQDqGlowOSWu25YFJd0V7NIYGRgaiIgU6unb8oqls53LOL+wNRe19SaYzB0e79OXwKBRqxAVEYQavan3kxVwDS+OwODgCCGSJMNPq0ZwoD8qagwQACQlRHv87J33w3CtIwDOf2aXxsjA0EBE1AvHg7DBaMZn+4sB2L8td57GmJ2Vjgf+vAMNBjP8tRp0WKyQ+hAQPPH3U6PZpUVhQmIMztQYYPXQ8tBXKuHnFghZBtQqAaIk22dt+GlgtdqgVaswKTkOEaGBHhec6rwfxoatud3un8EWhuGPoYGIqBeOpvVr503EHTfMdH5bXv/WXhw+/hMam8zYm3cKBwpO4+SZunOzIEQIPd+2VyqVgOiIYFTXGp0P+DO6Rmg16m5Dg0YtQDr34O9NT+eYzB0wt1oQGuyPM9UNCPTXYHLyaHy67wTMbRa0tltQWKJzbow1PS0eG7bmum2YNS4+Cg1GMxqMZpRW6jmWYQRgaCAi6oVjhcYFsye4LYyUlBCDolO1AAS8u+cwWts6IMk/j1mQYe9ecMxwAOxBQOr0tBYE+3miJLu/JgOzp10Mm1gOXV0zAMBqk5xTMwHAX6uG1SZBhgw/rQaiKCEoUIuWVkufPqNKJbiuHQUAkGTZ2WWxP/80IsOCYDJ3INBfi/YOG7Z+eAjLl8xCdlY6Ht2Qg+LyswgK9IPFKqKwRIeFc9IQHRGMdz75EdERwWxpGAFUvZ9CRHRhKyzRobSyHpu370Np5c+bQT1811W4K/tSTE6Ow7j4SOBc24IsA35aFaLCgxAc6Od2L5XQ9eEsy0CAvxaB/hpoNSqozr3u76dGRGggpqV23eY6IiQAU1LiEBzkD0mWoRIERIcHQpQk+Gk10Ki7vk9PJEk+NwXUM1kGzG0/j9Eoq6yHKEooq6rHi9u+Rv6Jami1ahia7AtMFRRX46uDJW7jHWj4Y2ggIuqFffBfDEor65GTW+T22oGC09j11RFYLDYkxIU7j1us9gWcXGc4CIJ9iqWngZAatQpt7VZYbZKz28BiFfHunh9RVWuE+lySUKkExI8Kwyv/cxtuvCod7R32wYyiJKPdImLG5AREhwchwF+LsXERztUl+xIgutNhEaHVqGCx2mCx2lBvNGP3V0fwzfenYLNJsNlEBPhr0dLagdxDpdi8fR92f3UEnx8oRoWu8fwLQIOOoYGIqBullXqse+ljbNmVh/uWzXc2xTts2ZWH46W1sNkknKqsd3YheKISgMiwIOcD3PEM99eqodWoYGhuc4YFxwNekmTnVMuJSaMQFKBF5qSL8MLam1BYokNsZDAmJcchNjIYggBMTh6Nqy+bCKOpDWEhAfDXauCv1SA2KgTJY6OdwaM7flp1r3VitUnOMROSJMNqk9DY1AabJKGu0YywEH/MmDwW2VnpuG/ZfAQF+qGqxojN2/f1em8a+jimgYioG533kMjOSu867dBl5SXXsQudSTJgMrdjckoc5maMx+f7T6CixojgQD+0tFmcAx3DQwKgVqtgaGpFbFQIxo6JhK6uCfNnJCEqPBg3LZiKzdv3OccPtLZZIAj2NSLGxIYjOyv93A6ZP8HY3AY/PzVkSUbWrFS0th9zCzYCAK3Lwk02m7IZGZ0bSmyi5OxSCQ8JxIxJCTCa2rA37xQevPMK7N571LkpFw1vDA1ERN2YnhaPlHExSEqIQXZWOrbsysP7n+ajrKoeyWNjsGD2BFTVGvDFgZIuyz07uK7maLVJiAyz7/Wg1Wrgp1XD3GaBxSoi0F+LpLFRqNAZcVlGIsxtFty3bD7GxUc5p3vmHanA7r1HUVpZ7wwMWq0a+sYWAEB5dQMqdI0IDvRDUIAWYcH+MJhaMTFpNFYsnY2J40fhf/73X2httyIiJABR5zbTKq9ugCTJfVo/ojO1WgVZlFBSUYeSM3pYbfaujLTxozFjUgLGxUf1/+Y0ZDA0EBF1o7BEB32jGVdfNhEAcPhEFURJRnl1PfKOVKDBaEZLawfUahUAe7O947nrWFXR0QogitK5axtw9GQNREnG7GnjUKlrREWNEReNDsfcjCRU1+ZjbFyk27bUjr0toiOCnftAOP4sKK7GV3mnEBkaCF1dEzZv34e8IxWwWEWEhwQgdVwsliyY6gwebR02SJIMg6kd5nYrJEmCLMvQalSIiwlFVW1Tn+rI30+N4EA/TE4ajQMFZ2ButSAyLBDzZ4yH3mDfrru0Qs/ZEyMEQwMRUTeys9Kd6wxs2ZUHXV0zMiddhJsWTMXuvUdxorwW+w6fdp7vur+DYyaCfdEkFSxWEaHB/lizPAvFp+17TSyYPQE7vzyCmKgG/O5XWRgXH+XsBnHdAGvF0tnOjaJcu0cWzknDupc+RpC/FldemoLksTGYnhaPxiYzTlXUw0+rRlWtER/uPYqKGgOunTcRV1+WisPHq5F6cSzGxIbjeFktTpSfPTc2oRXjxkSgosaouI46LCIEWHGoqMo5JsPQ3IYvDpQgbXwsrr98EiJCAzl7YoRgaCAi6kZKYqxznYFr5010DoTMyS1Chc4Am+g+BsBTD4WgEhAbFYyzDS24bv4k/Ff2LAD2QZaPbshBaWU9li+Z5Vz/wfFtfMPWXLfxFKuXZ3ncv8GxfLWj5WFcfBRe+/9uR05uEaalxuPQkXLMmpaEIyd/bp144t7rANjHbMyZNg7PvfEV6hpbYG6zAjD3uZ4kWXZbnlqWAVGWcbysDtlZ09jCMIIwNBAR9cB1zwTH4EfHMVmW8Lf39qPZ3OFsYXAs7KRSCQgN8oep1b62wV3Zl2LF0tnO++bkFqG0sh4piTEev4U7Wjkc/9x5jwcHx8ZZrss3O5ZslmUZUaFa5P5wxtlFsfXDQ9ifX464mDD869sTCAvxhyzLmJISBwBobLJ3YWg1KnRYRIQE+fW6UFTnzbgE/Byg9h0u4+6XIwhDAxFRJ50fZJ2/KTu6Ch7dkIPWdqszMAQHatFhscEmyoiLCUVkWBCOldaitt6E6Ihgt4di5zDS+T1TEmPx9G8Xd9n3wrHHQ+dydrch1Dt78rE79zgam1qxYuls7M8vR2llPVrbLbDaRBib25zTNo+c1MHQ1AatRo2sWSkwt1lwrLQWwM+hwU+rhiRJ3S4E5VgJ02Hf4dN4cdvXAIDjZbWYnByHh++6yvkZuPvl8MLQQETUies38udWZ3f5BuzoWig6VQM/rRqyDESFB0KWgYsvikKAvx9+9yv7A3D9W7lISoju8jDvHEa6e3h2t++Fp2s8TgnFz2tCpCTG4rnV2cjJLcL0tHjszTsFADCa2rDzyyOQRAljRoXhhiumYOL4Udi99yguvigSTaY2+Ptp0GGxIXFMJBqMZhhN7ZAVTrf4fH8xWjussFpFlFbaZ544PiN3vxxeGBqIiDpxrHXgWAGy8zdgR9dCWEgAWtssmDF5NO5bNh+FJbouD2zXvSp6e0/XPz0d7xxeOl/TOewkj43BHYsyMWZUJJYsmAoAbgMqHQMs1730Mfy1akREh2DN8izoDWa8uSsPx0prERzoh5uvng6TuR17807Zd77UqKESgB5WnXZjMndgUvJoWCw2+PmpMT0t3q2VhC0MwwdDAxFRJ52/kW/YmutxTINjYKHrbIbzeU9PD8/ujnviCDvF5Wfx6IYcPPvwjUhKiELmlPEQXNaRdm2hcHyWOxdfghVLZztfCw32hyAIMLdZcOhoBWZNHQcAqDrbBAEyeljHykmjUcFms2+gNTYuAnpDC3R1zSgs0aGwROfWSsKxDcMDl5EmIvLA8bB2PNxc95xwvLZwThpWL8/q10OutFKPDVtz3TbA6ut1jge8o2yOsDMxabTHfTIcsrPSnV0dOblF+Gx/sXPMRXZWOq6dNxGTk+Nw7bw0xI8KQ2ubBRGhgZiaGg8/jRoQlD06bOd242xpteDTfcU4UmLvzpmeFu9WBsC+JPcr2/c5p5nS0MSWBiKiHnirz72/AwBdr3Ns2T097eddMF1bSW68aorHe7i2XnT+fI5pph9/cwwpiTHOfS6ys9KxYuls3P0/288NjuwP2W3bbHZLDD8MDUREPehL90BfuD6s+9I073qdY70Ix0O4c5llWUZTk32Fx87v0dOYAtcxHXvzTiH63HLTKYmxCPDv/2MjJMgfLa0dkOWufRuO9SY4IHJoY/cEEZGL/nYb9JXjwZ6SGNulm0HpdZ2b+HvS+T16ek9Ha8XyJfaFqFzP+92vFiBxTIRzMCRgXzK7N1qNAENzG0zmDrz8f//Gupc+dqtj189FQxdbGoiIXPSn2+B8B/H1twukr4Mke/rTlePzOKZlzp42Dg1GM746WIK9eafQZGqH1SbCT6uGTex+zQYHQQBUghqADQDQ3mHDP3K+x+cHivHswzd6HEDKgZFDE0MDEZGL/jzAz3eBIm91gfT0Hj29p+Pz7M8vR4XOgHHxkcg7UoHi02eRf+IntJxb5dK1fUGjVsEmSs4VMV1395RloMNqQ0iQHzqsImxWEVZRRIXOgDV/2Y0dL67sEgy46NPQxNBAROSiPw/w4bRAUU/f4F1bGAB02VFzelo8nvr7Zygu18NPq0JsVAh0dc2AYN9jA+LPG3Z5ansICwmAvrEFMgDxXOuEsbnN41oYw6lOLyQMDURE58kXLQUDpadv8J5ec3QdLJyThq8OlqBGb4IMGbFRIWhsakVYiD8am9ogWd037/Ik6aIoNJnaYD03FTPQX4NJyXFusz8chlOdXkgYGoiIRrDy6kbk7j6MJQumOgdPAp6/wff27X7z9n1obGoFYF97wWIV4a/VwN9PA1GUYOtlxafvjlRCFCUIAPz8NOdaKpq6zP6goYuzJ4iIRrBP95fgnU8Ouy0A1d0shd5mMNy3bD6mpMRhSkocZk1NhCAIaOuwIjoiCH5aNRLHREDoYSKFeC5UyABsNhGNTW1ISYxxrrrpacaKr2azkDI+aWl4++238cYbb0Cv12PChAl47LHHcMkll3g89/PPP8e7776LEydOwGKxYMKECbj//vtx+eWX+6KoRHQBuJBG5l83Lw3+/v6KxwaUVuqdqzI69qZwWDgnzdkiUFqpx9g4+3lGUxs+31+Ma+dNQlWtAZ/tK/Y4psFVwuhwzJp2MSJCA7E37xQ+218M4Of1Jxw/Gw6IHFq8Hhr27NmDZ555Bv/zP/+DGTNmYPv27bj77rvxySefID6+az/W999/j7lz5+Lhhx9GWFgYdu7ciXvvvRfvv/8+Jk+e7O3iEtEI0l04uJAeREkJUQgNDVEcknJyi/D+p/nOvzsWXOp8XYWuEcWnz+K+ZfMxLj4KyWNjkJ2VjgpdI/bnn4bJ3NHj+0xKjkNEaCDe/zQf17js4Olp506AAyKHCq+Hhi1btuCWW27BrbfeCgBYt24d9u3bh3fffRdr1qzpcv66devc/r569Wp89dVX2Lt3L0MDEfVJd+HgQnsQ5eQW4d09hwH0HpKys9LRYDQ7/97dFuGbt+/DgfwzAIDnVmejrKoeD/x5B5ISYqBR997z/e0PZYAgOLssHDovjc0BkUOLV0ODxWLBsWPH8Otf/9rt+Lx585Cfn9/NVe4kSYLZbEZERIQXSkhEI9mFFg66k52VDkEQFNVDSmIsnv7tYgD2lpri02c9bhF+37L5zj9zcovw4d6jsFhF6BtbYLHaen0fc7sVAKDV2APGO5/8iAaj2fl+HBw5NHk1NBgMBoiiiOjoaLfjMTEx0OuVDWp588030dbWhuuvv75P7y3LMmRZ4WbvQ4SjzMOt3MMV69u3BqO+k8fG4OG7rnK+v8OHe4/inU8OQ5blEf0t1lHf3dWDJ527dO795Xy8sn0fpqXGu127YHYqFsxOBQAkjonER18X4WSFHu0dVpjbrIrLKIoyTOZ2xEYG4+tDp/BTXRPGJ0Sj3tCCUxV1w2rMyXD+b4rQ0whWFz4ZCNm5MLIsKyrgxx9/jE2bNmHz5s1dgkdvmpuboVINr8khsiyjtdU+nUnpD5D6j/XtW0OpvrMuuRgdHR3IuuRi54ZOI1F/6vyfn/6IHV8cQUdHB+775WU4dKQcp3+qx6Ej5bhk0miP18SG++GFNTfg0/0liA4PwtOv7UW7pffWBq1GDVEU8fWhUojSz90UDcYWfPT1UYQEanDfLy9TVO6hYCj9jveV0tZ8r4aGyMhIqNVq1NfXux1vaGhATExMj9fu2bMH69atw0svvYS5c+f2+b3DwsKgVqv7fN1gcqTT8PDwYfcLNxyxvn1rKNV3Zng4MqeMH9Qy+EJ/6vzW62Y6Z1uEh4d3+Xt3XOu08NRZfPBFIXr7wm212ReEarfYoFIJSE6IhrnNgrYOG9JT4nDrdTN7fM+hZij9jnuLV0ODn58fpkyZgv379+Pqq692Hj9w4AAWLlzY7XUff/wxHnvsMWzYsAFXXXVVv95bEIRh+UNzlHs4ln04Yn37Fuvb9/pa5xPGjcKaXy3o9u+uXJedLizRObs0brl6Ov79QxnqGlt6fb+gAC1UKgGiKGN0TCjKqhqQPiGuy8DL4WKk/457vXtixYoVeOSRR5Ceno7MzEy89957qKmpwbJlywAAL7zwAs6ePYvnn38egD0wPProo3jssccwffp059iHgIAAhIaGeru4RESkQGmlHo9uyEFpZT1SEmNQoTMAsM/O2Jt3CkZTm6L7tLb/PP7hYGEF0sbH4r5l84dlYLgQeD00LFq0CAaDAZs3b0ZdXR1SU1Px6quv4qKLLgIA6PV61NTUOM9/7733YLPZ8OSTT+LJJ590Hl+6dCmeffZZbxeXiOiCpnThq5zcImdguG/ZfBSW6BAbGYzr7/kbmkyt0KhVCAnyg6G5rdduCgebKOFURT12fnkE69/ai6QE+wBOBoihQ5CH4zDPHoiiiIKCAmRkZAzLMQ1NTU0juj9sKGF9+xbr2/f6U+cbtubinU9+xB03zOxxZomncHHLQ29g3+FyaDVqJI6JRGOTGaZWC6zdbGalUQsQVCpIooSQID+YWi0YOzocbR1W1DWaodWqsWZ51rCZ4XIh/I5zwyoiInLqvLZFdy0ProsuOc65acFUtLZbkZQQjW++P4XGpp67KIID/WATZbTZRIiyjKAAP4QEB0Cnb4ZKJSB1XOwFv8bGUMPQQERETp1XYOxtyW3XsQ3Ll8zCv/52D0or9cg/UY26RnOX8101tdiXmvbTqqFVq5E0NhrtHTZoNWqkJkRjbsbIn+Ey3DA0EBFRt1xbHjy1OriObXDsVtlgNMPcZoG/nxodFs9dE67SJ8Rh5uREfH3oFM7oGpF68SjMzRiPz/YXIzoieNh0T1wIhtfqR0RENGB62nba8RoA53bZjlYHxzbbgD1MLF8yC8+tzkZhiQ5bPzyEwyeqsfjKKbg0PVFROWr1zaiqNeBUZT2sNgk4t0fmtfMm9rhtNvkeQwMR0QXKUwjo6bXpafEYFx/p3EwKcO/OKKuqhyhKOFFWC6OpDYZmZdMuaxtacOhoJQD7XhQWi4h399i7RPbmncIr2/c5t+umwcXuCSKiC1RPG3p5eq2wRIcKncHjZlJbduXhw71HYbWJ0KhV+Ob7UjQ2tyoqhyTJaO+wIDTYH9PT4lFQrDvX4uCZ0mmhNPAYGoiILlA9bTvt6TVHgHB0GXh6aGvUKsRGhcDY3IbOCzRo1CrYRM9hoLXdhqAAAWNiw9HWYUNSQjRWLJ0NAIiOCHZ7z94GZ5L3MDQQEZEijiDhWMsBgPMhvmD2BABAVa0BpZX1CA7wQ1NLu9tS0t0FBoeQID9EhAZC39iCqy9LcwYST+/p+if5DkMDERH1ietD2/Vb/9O/XYxbHnoDZVX1UKsEqNXKh82pBCA2KtQZPhqMZpRW6p3BwfU9Pa0Rwa4K32BoICKiPnF9aHf+1n/fsvmo0TejrKoBNrH76ZYC7HMkBMH+z4EBfqhrMGHnl0dw6GgFWtssbtMtu+tKYVeFbzE0EBGRR0q+xXd+mI+Lj0JruwWuOxRoNaouAxsdr2rU9tda2y0QVMC+w2Wo0ZsQHOjnNkujO+yq8C2GBiIi8kjJt/jOwSInt8g+CNKF1SZBrRIgyXKXzausNglqtQqiKKHFbEH7uV0v2zus2Lx9HwC4bbvdWU+DOWngcZ0GIiLqorRSjwajGdfOm9jjt/gtu/Lc1lHIzkrHDVdOQWiQn9t5otQ1MDhfOzdA0k+rhlqthlolIDoiGKWV9di8fV+3a0mQ77GlgYiIusjJLcJn+4txxw0zkZIY26VFwfF3o6nrAk7Hy2rR1mFDoL8G7R02dLeVskolQJLsr0aFB2HWVPsKknqDGXcsmgG9wYzpafHOlgYafAwNRETUReexAo6uigajGdERwWgwmvHZ/mJcO28i7l02H9lZ6fjqYAnW/GU3auqaIcN9iqW/nwZj4yJgsdpQWWMEAHuXhSRDq1Fh1tREHC87i3HxkdA3tkBvMDu7HTovJEWDh6GBiIi66DxWwBEeGoxmvPPJj7h23kTcccNMt5aH/37xI9Tom50tC8K5/xMEAaOjQ+Dvp4G5rcN5T5v483gGvcGMO26YyZaFIY6hgYiIeuUIEa4bR3Xe7bK5pR3BQX6ICgtCvcGM+FHhsFhtqNE3O1sXXAX6a2ETJcREh+E/5kzAF98Vo6yqHg/fdRXXXBiiOBCSiIgUS0mMRXREMD7bX+wcnOgYNBk/KhyQBUxOjsPMKWMxJiYUVbXGbveRaO+wwmoTYW61YMuuQzh8vBo5uUUc9DiEsaWBiIj6xNN4h8/2FyM2KgRqlQC9wQxdXROaW9q6nTERHhIAUZLQ0mpBU0s7tBoVxsSGYV5mErsmhjC2NBARUZ84uipcl3i+dt5ExEYGI2VcDO5YNAMpiTE97lTZbG53DpTUalRYOCcVL6y9CcljY1Cha8SGrbluXSE9Ka3U9+l86j+2NBARUbccUytdByh2Hm/g6LJ4/9N8APYpk/ctm4/Dx6tgsXpeSlqWgfYOGwD7gMgjJ3V46u+foabOBFGW4KdRA/h5f4ueVqXkUtK+w9BARETdcjyQ9+eXo0JnAOD5wTw9LR4JcREAgNjIYKx/K9cZChwEoctu2RAEwE+rga6uGWfrTQjw18DcZkX8qDDF22BzKWnfYWggIqJuOR7E3U2FdLRENBjNqK41QpRkvLA1F/rGFoiSe0IQIED2sNSTJEnw09pbFgL8tLDaJMzLTEJKYqyiQMClpH1HkOXuhqkMT6IooqCgABkZGVCr1YNdnD6RZRlNTU0IDw+HIAiDXZwRj/XtW6xv3/NFnW/YmutctwEADhScRnH5WYiSDK1WDWs33RMBfhq0W+wtEWqVgOBAP4QE+8PY3IZJyaOx8bFfDLtplxfC7zgHQhIRUb9lZ6XjjhtmYsHsCTCa2pytDQAg2kSounl4BgVqAdgXgBIlGZHhQZiXmQStRo0Zk8YOu8BwoWD3BBER9clXB0uwefs+3LdsPhbOScPq5VnYsDUXH+496jbwMToiGC2tHWjrNLbBX6uGv5/GOcYhPDQAzz58I8bFRyF5bIxbV4SS7bnJdxgaiIjISclDevP2fTiQfwYAMC4+Clt25aGq1oBAf61baDA0t8ImuveAq1X2loezDS0QICA2Khgv/f5m5/4SnWdLcGbE0MLQQERETkoe0vctm+/8c8uuPGzL+R6yLEOWZbcZEjZRhgAgNioY9cZWSJIMUZIhqGQIkAFBwJWXprhtSNX5/TkzYmhhaCAiIiclD+lx8VGYl5mEcfFRMJraIMsyEsdEwGIVnXtMqARAkoGgAC3qGs3njtlbGWRJRoC/H2RZRkRoYI/vz5kRQwtDAxEROSl5SLtuk11e3QCNWoXw0CDo6ozOcxyzLc3tVuexpIQoVNQYYLNJEEUJl05NxIqls52vl1bqsWVX3oB+HhpYnD1BRER9Mj0tHrFRIThQUI6S8rNo67Ai/0Q1autN3V4T4K/BGZ0BVpsEGUByYgyeW50NAM4loHNyi/D+p/l4/9N8blo1RLGlgYiI+qSwRIfSCj1ESYZVlCDL9jUKOhMA51JOjtUhVSoBWrUKAf72x4/rGIbsrHQ0GM3Of6ahh6GBiIj6xPXhbmg2Y8fnR5yvqQQB4aEBMDS3QYZ9meiwYPuOln5aDW7+j6n44ruTqNQZnLMkHPdMSYzF079dPBgfiRRi9wQREXXh2Dnyq4MlbjtIOroRViydjQWzJ+DT/cUA7K0KACDJMppb2iEI9umV8zPH47brMqFWqWCxitjz7QnoG1uQGB+F6WnxXINhmGFLAxERddHdRlWu3QlffFeCFrMFAM4tmyxDluFcEVKGjNYOKxbMngAAOFBQjpNn9JBkGVU1jXjq75+jsanVeW8a+hgaiIioi+42qnI9/tHXRTiXFSB1GtOgEgQIgoyjJ2uwN+8UFsyegE/+fQwatRoajQp6gxlGUzumpo5Bg9GM0kq9W2sDV4IcmhgaiIioC9epl66LLzmOr3vpY1ToDIiNDEZLqwUXjQpHQ5PZPpZBBvz9NIgMD0RzSweMpjb89pkPUNdoRnCgFvctm4cvD55EUkIMAOD9T/MBwG08A1eCHJoYGoiISDFHC4DR1Aa1SsCVl9q7HsqrG3DPL+eh+HQdTpTXory6Af914yVobGpD7qFTzgWeLFYRgqDCxsd+gZzcIpRV1Xu8//S0eACcRTHUMDQQEZEipZV6PLohB8XlZ5EYH4lr5k1ERGggDp+oRsGJnxAUoMUHf12FWx56A2frW3Cg4Awmjh+N09UNAIDgQC0WXTHFub+EY0vte5fNd4YDtjAMbQwNRETUI8e3/7KqeuSf+AlhIf7Q1TUjKMAPeUcqMHvaOABAXEwYSiv1bntT7M07BX8/DSLCAvHC2pvcNqZy/Ok6ZoF7TQxtDA1ERNQjx7f/2KhgqFUC5mUmIXlsDGRZQllVPUzmdsyYlICPvzmG2vpmPLc6Gx/8dRUA+z4V0RHBXcJBSmJslx0tHcfZwjB0MTQQEVGPPM2kSEmMxS0PvYEavQkNxlLclX0pUhJjUFx+Fo9uyMFzq7ORkhjbYwhgV8Tww9BAREQ96m4mxU0LpqLk9FmEhwRiwewJWLF0Nh7dkIPSynrk5Bb1GgTYFTH8cEVIIiLqs9JKPd7ZcxhGUztq6k0oLNEhJTEW9y2bj5TEGOfsh544wgjXYRg+GBqIiKjPcnKLUHL6LAAgbXyss7WgsESHCp0BhSW6wSweeQm7J4iIqE9KK/VoMJpx/eWTEREaiBVLZztbC9jlMLIxNBARUZ/k5Bbhs/3FuOOGmV3GLXD2w8jG0EBERH3C1oQLF0MDERH1CVsTLlwcCElERESKMDQQERGRIgwNREREpAhDAxERESnC0EBERB6VVuqxYWsuSiv1g10UGiIYGoiIyCPHhlI5uUWDXRQaIjjlkoiIPOJ6DNQZWxqIiMgjTxtKscviwsbQQEREirHL4sLG7gkiIlKMXRYXNoYGIiJSjEtIX9jYPUFERESKMDQQERGRIgwNRETkc5yFMTwxNBARkc9xFsbwxIGQRETkc5yFMTwxNBARkc9xFsbwxO4JIiIiUoShgYiIiBRhaCAiIiJFGBqIiIhIEYYGIiIiUoShgYiIiBRhaCAiIiJFGBqIiIhIEYYGIiIiUoShgYiIiBRhaCAiIiJFGBqIiIhIEYYGIiIiUoShgYiIiBRhaCAiIiJFGBqIiIhIEZ+EhrfffhsLFizA1KlTcfPNN+OHH37o8fxDhw7h5ptvxtSpU7Fw4UK8++67vigmERER9cDroWHPnj145plncO+992L37t2YOXMm7r77buh0Oo/nV1VV4de//jVmzpyJ3bt345577sHTTz+Nzz77zNtFJSIioh54PTRs2bIFt9xyC2699VYkJydj3bp1iIuL67b1YPv27RgzZgzWrVuH5ORk3Hrrrbj55pvx5ptveruoRERE1AONN29usVhw7Ngx/PrXv3Y7Pm/ePOTn53u8pqCgAPPmzXM7dvnll+ODDz6A1WqFVqtV9N6yLEOW5f4VfJA4yjzcyj1csb59i/Xte6xz3xrO9S0IgqLzvBoaDAYDRFFEdHS02/GYmBjo9XqP19TX1yMmJsbtWHR0NGw2GwwGA0aNGqXovZubm6FSDa9xnrIso7W1FYDyHyD1H+vbt1jfvsc6963hXN8RERGKzvNqaHDoXHmyLPdYoZ7O93S8J2FhYVCr1X0o5eBzfM7w8PBh9ws3HLG+fYv17Xusc9+6EOrbq6EhMjISarUa9fX1bscbGhq6tCY4eGqFaGxshEajUZyEAHvAGI4/NEe5h2PZhyPWt2+xvn2Pde5bI72+vdp+7+fnhylTpmD//v1uxw8cOIDMzEyP12RkZODAgQNux/bt24f09HTF4xmIiIho4Hm903/FihXYsWMHduzYgbKyMvz5z39GTU0Nli1bBgB44YUX8MgjjzjPX7ZsGXQ6HZ555hmUlZVhx44d+OCDD7By5UpvF5WIiIh64PUxDYsWLYLBYMDmzZtRV1eH1NRUvPrqq7jooosAAHq9HjU1Nc7zx44di1dffRXPPPMM3n77bYwaNQrr1q3Dtdde6+2iEhERUQ8EeTjODemBKIooKChARkbGsBwI2dTUNKIH0QwlrG/fYn37Huvcty6E+h5ecxKJiIho0DA0EBERkSIMDURERKQIQwMREREpwtBAREREijA0EBERkSIMDURERKQIQwMREREpwtBAREREijA0EBERkSIMDURERKQIQwMREREpwtBAREREijA0EBERkSIMDURERKQIQwMREREpwtBAREREijA0EBERkSIMDURERKQIQwMREREpwtBAREREijA0EBERkSIMDURERKQIQwMREREpwtBAREREijA0EBERkSIM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" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "execution_count": 61 }, { "cell_type": "markdown", @@ -519,13 +524,18 @@ }, { "cell_type": "code", - "execution_count": 26, "id": "f76289b3", - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-23T13:10:49.213384Z", + "start_time": "2024-09-23T13:10:49.211737Z" + } + }, "source": [ "# Will be added soon." - ] + ], + "outputs": [], + "execution_count": 62 }, { "cell_type": "markdown", @@ -537,13 +547,18 @@ }, { "cell_type": "code", - "execution_count": 27, "id": "89dcb727", - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-23T13:10:49.258127Z", + "start_time": "2024-09-23T13:10:49.256363Z" + } + }, "source": [ "# Will be added soon." - ] + ], + "outputs": [], + "execution_count": 63 } ], "metadata": { From 7bc55786a7b9ffe4ebdf32ac9ce1bf60913d7ecf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul-Christian=20B=C3=BCrkner?= Date: Mon, 23 Sep 2024 16:07:06 +0200 Subject: [PATCH 10/12] some minor readme updates --- README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 104e7e8c..975a6b17 100644 --- a/README.md +++ b/README.md @@ -43,9 +43,15 @@ First, install one machine learning backend of choice. Note that BayesFlow **wil If you are new to machine learning and don't know which one to use, we recommend PyTorch to get started. -Once installed, [set the backend environment variable as required by keras.](https://keras.io/getting_started/#configuring-your-backend) +Once installed, [set the backend environment variable as required by keras](https://keras.io/getting_started/#configuring-your-backend). For example, inside your Python script write: -If you use conda, you can alternatively set this individually for each environment in your terminal: +```python +import os +os.environ["KERAS_BACKEND"] = "torch" +import keras +``` + +If you use conda, you can alternatively set this individually for each environment in your terminal. For example: ```bash conda env config vars set KERAS_BACKEND=torch From 358eb3436b35606f01f00ea0c6e88d50b0a8b6d9 Mon Sep 17 00:00:00 2001 From: larskue Date: Mon, 23 Sep 2024 16:44:22 +0200 Subject: [PATCH 11/12] revert to offline training --- examples/TwoMoons_FlowMatching.ipynb | 285 ++++++++++++++++----------- 1 file changed, 166 insertions(+), 119 deletions(-) diff --git a/examples/TwoMoons_FlowMatching.ipynb b/examples/TwoMoons_FlowMatching.ipynb index 217397f7..041708e7 100644 --- a/examples/TwoMoons_FlowMatching.ipynb +++ b/examples/TwoMoons_FlowMatching.ipynb @@ -13,8 +13,8 @@ "id": "d5f88a59", "metadata": { "ExecuteTime": { - "end_time": "2024-09-23T12:46:11.346815Z", - "start_time": "2024-09-23T12:46:11.344476Z" + "end_time": "2024-09-23T14:39:46.551814Z", + "start_time": "2024-09-23T14:39:46.032170Z" } }, "source": [ @@ -36,8 +36,21 @@ "\n", "import bayesflow as bf" ], - "outputs": [], - "execution_count": 49 + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CUDA backend failed to initialize: Unable to use CUDA because of the following issues with CUDA components:\n", + "Outdated cuDNN installation found.\n", + "Version JAX was built against: 8907\n", + "Minimum supported: 9100\n", + "Installed version: 8907\n", + "The local installation version must be no lower than 9100..(Set TF_CPP_MIN_LOG_LEVEL=0 and rerun for more info.)\n" + ] + } + ], + "execution_count": 1 }, { "cell_type": "markdown", @@ -75,28 +88,28 @@ { "metadata": {}, "cell_type": "markdown", - "source": "BayesFlow offers many ways to define your data generating process. Here, we use sequential functions to build a simulator object for online training:", + "source": "BayesFlow offers many ways to define your data generating process. Here, we use sequential functions to build a simulator object for online training. Within this composite simulator, each function has access to the outputs of the previous functions. This effectively allows you to define any generative graph.", "id": "21bf228e706a010" }, { "metadata": { "ExecuteTime": { - "end_time": "2024-09-23T12:46:11.388263Z", - "start_time": "2024-09-23T12:46:11.385178Z" + "end_time": "2024-09-23T14:39:46.703381Z", + "start_time": "2024-09-23T14:39:46.700649Z" } }, "cell_type": "code", "source": [ - "def alpha_prior(rng):\n", - " alpha = rng.uniform(-np.pi / 2, np.pi / 2)\n", + "def alpha_prior():\n", + " alpha = np.random.uniform(-np.pi / 2, np.pi / 2)\n", " return dict(alpha=alpha)\n", "\n", - "def r_prior(rng):\n", - " r = rng.normal(0.1, 0.01)\n", + "def r_prior():\n", + " r = np.random.normal(0.1, 0.01)\n", " return dict(r=r)\n", "\n", - "def theta_prior(rng):\n", - " theta = rng.uniform(-1, 1, 2)\n", + "def theta_prior():\n", + " theta = np.random.uniform(-1, 1, 2)\n", " return dict(theta=theta)\n", "\n", "def forward_model(theta, alpha, r):\n", @@ -106,20 +119,20 @@ ], "id": "f761b142a0e1da66", "outputs": [], - "execution_count": 50 + "execution_count": 2 }, { "metadata": { "ExecuteTime": { - "end_time": "2024-09-23T12:46:11.433829Z", - "start_time": "2024-09-23T12:46:11.431467Z" + "end_time": "2024-09-23T14:39:46.747091Z", + "start_time": "2024-09-23T14:39:46.744830Z" } }, "cell_type": "code", "source": "simulator = bf.simulators.CompositeLambdaSimulator([alpha_prior, r_prior, theta_prior, forward_model])", "id": "4b89c861527c13b8", "outputs": [], - "execution_count": 51 + "execution_count": 3 }, { "metadata": {}, @@ -130,8 +143,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2024-09-23T12:46:11.484514Z", - "start_time": "2024-09-23T12:46:11.477075Z" + "end_time": "2024-09-23T14:39:46.798575Z", + "start_time": "2024-09-23T14:39:46.790581Z" } }, "cell_type": "code", @@ -141,13 +154,13 @@ ], "id": "e6218e61d529e357", "outputs": [], - "execution_count": 52 + "execution_count": 4 }, { "metadata": { "ExecuteTime": { - "end_time": "2024-09-23T12:46:11.530636Z", - "start_time": "2024-09-23T12:46:11.527823Z" + "end_time": "2024-09-23T14:39:46.854911Z", + "start_time": "2024-09-23T14:39:46.852129Z" } }, "cell_type": "code", @@ -174,13 +187,13 @@ ] } ], - "execution_count": 53 + "execution_count": 5 }, { - "cell_type": "markdown", - "id": "8269d95d", "metadata": {}, - "source": "BayesFlow also provides this simulator and a collection of others in the `bayesflow.benchmarks` module." + "cell_type": "markdown", + "source": "BayesFlow also provides this simulator and a collection of others in the `bayesflow.benchmarks` module.", + "id": "17f158bd2d7abf75" }, { "metadata": {}, @@ -192,13 +205,13 @@ "\n", "For this example, we want to learn the posterior distribution $p(\\theta | x)$, so we **infer** $\\theta$, **conditioning** on $x$." ], - "id": "5ac9e8d81088b94" + "id": "fee88fcfd7a373b0" }, { "metadata": { "ExecuteTime": { - "end_time": "2024-09-23T12:46:11.579516Z", - "start_time": "2024-09-23T12:46:11.577479Z" + "end_time": "2024-09-23T14:39:46.905081Z", + "start_time": "2024-09-23T14:39:46.903091Z" } }, "cell_type": "code", @@ -208,9 +221,70 @@ " inference_conditions=[\"x\"],\n", ")" ], - "id": "b6c057787bb01cc6", + "id": "c9637c576d4ad4e5", + "outputs": [], + "execution_count": 6 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": [ + "## Dataset\n", + "\n", + "For this example, we will sample our training data ahead of time and use offline training with a `bf.datasets.OfflineDataset`.\n", + "\n", + "This makes the training process faster, since we avoid repeated sampling. If you want to use online training, you can use an `OnlineDataset` analogously, or just pass your simulator directly to `fit()`!" + ], + "id": "254e287b2bccdad" + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-23T14:39:46.950573Z", + "start_time": "2024-09-23T14:39:46.948624Z" + } + }, + "cell_type": "code", + "source": [ + "num_training_batches = 2048\n", + "num_validation_batches = 256\n", + "batch_size = 128" + ], + "id": "39cb5a1c9824246f", + "outputs": [], + "execution_count": 7 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-23T14:39:53.268860Z", + "start_time": "2024-09-23T14:39:46.994697Z" + } + }, + "cell_type": "code", + "source": [ + "training_samples = simulator.sample((num_training_batches * batch_size,))\n", + "validation_samples = simulator.sample((num_validation_batches * batch_size,))" + ], + "id": "9dee7252ef99affa", + "outputs": [], + "execution_count": 8 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-23T14:39:53.281170Z", + "start_time": "2024-09-23T14:39:53.275921Z" + } + }, + "cell_type": "code", + "source": [ + "training_dataset = bf.datasets.OfflineDataset(training_samples, batch_size=batch_size, data_adapter=data_adapter)\n", + "validation_dataset = bf.datasets.OfflineDataset(validation_samples, batch_size=batch_size, data_adapter=data_adapter)" + ], + "id": "51045bbed88cb5c2", "outputs": [], - "execution_count": 54 + "execution_count": 9 }, { "cell_type": "markdown", @@ -229,8 +303,8 @@ "id": "09206e6f", "metadata": { "ExecuteTime": { - "end_time": "2024-09-23T12:46:11.633859Z", - "start_time": "2024-09-23T12:46:11.622576Z" + "end_time": "2024-09-23T14:39:53.339590Z", + "start_time": "2024-09-23T14:39:53.319852Z" } }, "source": [ @@ -243,7 +317,7 @@ ")" ], "outputs": [], - "execution_count": 55 + "execution_count": 10 }, { "cell_type": "markdown", @@ -256,8 +330,8 @@ "id": "96ca6ffa", "metadata": { "ExecuteTime": { - "end_time": "2024-09-23T12:46:11.679015Z", - "start_time": "2024-09-23T12:46:11.676655Z" + "end_time": "2024-09-23T14:39:53.371691Z", + "start_time": "2024-09-23T14:39:53.369375Z" } }, "source": [ @@ -267,7 +341,7 @@ ")" ], "outputs": [], - "execution_count": 56 + "execution_count": 11 }, { "metadata": {}, @@ -281,8 +355,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2024-09-23T12:46:11.723529Z", - "start_time": "2024-09-23T12:46:11.721223Z" + "end_time": "2024-09-23T14:39:53.433012Z", + "start_time": "2024-09-23T14:39:53.415903Z" } }, "cell_type": "code", @@ -292,20 +366,20 @@ ], "id": "e8d7e053", "outputs": [], - "execution_count": 57 + "execution_count": 12 }, { "metadata": { "ExecuteTime": { - "end_time": "2024-09-23T12:46:11.767440Z", - "start_time": "2024-09-23T12:46:11.765348Z" + "end_time": "2024-09-23T14:39:53.476089Z", + "start_time": "2024-09-23T14:39:53.466001Z" } }, "cell_type": "code", "source": "approximator.compile(optimizer=optimizer)", "id": "51808fcd560489ac", "outputs": [], - "execution_count": 58 + "execution_count": 13 }, { "cell_type": "markdown", @@ -319,45 +393,20 @@ "Internally, BayesFlow creates a [keras PyDataset](https://keras.io/api/utils/python_utils/#pydataset-class) from your simulator object, which is then passed onto keras `fit` method. You can also create the dataset yourself using either the BayesFlow wrappers such as `bf.datasets.OnlineDataset` or write your own dataset class that inherits from `keras.utils.PyDataset`." ] }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-09-23T12:46:11.811178Z", - "start_time": "2024-09-23T12:46:11.809169Z" - } - }, - "cell_type": "code", - "source": [ - "epochs = 30\n", - "batches_per_epoch = 1000\n", - "\n", - "# \"auto\" attempts to make the batch size large enough to fill the memory budget\n", - "batch_size = \"auto\"\n", - "# memory budget is only used when batch_size is \"auto\"\n", - "memory_budget = \"2 GB\"" - ], - "id": "beb53eb861b3109", - "outputs": [], - "execution_count": 59 - }, { "cell_type": "code", "id": "0f496bda", "metadata": { "ExecuteTime": { - "end_time": "2024-09-23T13:10:46.367507Z", - "start_time": "2024-09-23T12:46:11.855464Z" + "end_time": "2024-09-23T14:42:36.067393Z", + "start_time": "2024-09-23T14:39:53.513436Z" } }, "source": [ "history = approximator.fit(\n", - " batch_size=batch_size,\n", - " memory_budget=memory_budget,\n", - " epochs=epochs,\n", - " num_batches=batches_per_epoch,\n", - " simulator=simulator,\n", - " workers=None,\n", - " use_multiprocessing=False,\n", + " epochs=30,\n", + " dataset=training_dataset,\n", + " validation_data=validation_dataset,\n", ")" ], "outputs": [ @@ -365,9 +414,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "INFO:bayesflow:Building dataset from simulator instance of CompositeLambdaSimulator.\n", - "INFO:bayesflow:Estimating memory footprint of one sample at 24.0 B.\n", - "INFO:bayesflow:Using a batch size of 1024.\n", + "INFO:bayesflow:Fitting on dataset instance of OfflineDataset.\n", "INFO:bayesflow:Building on a test batch.\n" ] }, @@ -376,69 +423,69 @@ "output_type": "stream", "text": [ "Epoch 1/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m48s\u001B[0m 48ms/step - loss: 0.6327 - loss/inference_loss: 0.6327\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 6ms/step - loss: 0.6938 - loss/inference_loss: 0.6938 - val_loss: 0.5508 - val_loss/inference_loss: 0.5508\n", "Epoch 2/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m48s\u001B[0m 48ms/step - loss: 0.5769 - loss/inference_loss: 0.5769\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.6250 - loss/inference_loss: 0.6250 - val_loss: 0.6023 - val_loss/inference_loss: 0.6023\n", "Epoch 3/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m48s\u001B[0m 48ms/step - loss: 0.5668 - loss/inference_loss: 0.5668\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.6056 - loss/inference_loss: 0.6056 - val_loss: 0.4454 - val_loss/inference_loss: 0.4454\n", "Epoch 4/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5633 - loss/inference_loss: 0.5633\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.6006 - loss/inference_loss: 0.6006 - val_loss: 0.5079 - val_loss/inference_loss: 0.5079\n", "Epoch 5/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m48s\u001B[0m 48ms/step - loss: 0.5582 - loss/inference_loss: 0.5582\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.6020 - loss/inference_loss: 0.6020 - val_loss: 0.5414 - val_loss/inference_loss: 0.5414\n", "Epoch 6/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5545 - loss/inference_loss: 0.5545\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5973 - loss/inference_loss: 0.5973 - val_loss: 0.6961 - val_loss/inference_loss: 0.6961\n", "Epoch 7/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5472 - loss/inference_loss: 0.5472\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5874 - loss/inference_loss: 0.5874 - val_loss: 0.5399 - val_loss/inference_loss: 0.5399\n", "Epoch 8/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m48s\u001B[0m 48ms/step - loss: 0.5456 - loss/inference_loss: 0.5456\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5939 - loss/inference_loss: 0.5939 - val_loss: 0.4877 - val_loss/inference_loss: 0.4877\n", "Epoch 9/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5444 - loss/inference_loss: 0.5444\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5841 - loss/inference_loss: 0.5841 - val_loss: 0.5115 - val_loss/inference_loss: 0.5115\n", "Epoch 10/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5454 - loss/inference_loss: 0.5454\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5827 - loss/inference_loss: 0.5827 - val_loss: 0.5383 - val_loss/inference_loss: 0.5383\n", "Epoch 11/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5415 - loss/inference_loss: 0.5415\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5807 - loss/inference_loss: 0.5807 - val_loss: 0.4411 - val_loss/inference_loss: 0.4411\n", "Epoch 12/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m50s\u001B[0m 50ms/step - loss: 0.5416 - loss/inference_loss: 0.5416\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5774 - loss/inference_loss: 0.5774 - val_loss: 0.5844 - val_loss/inference_loss: 0.5844\n", "Epoch 13/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m50s\u001B[0m 50ms/step - loss: 0.5417 - loss/inference_loss: 0.5417\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5813 - loss/inference_loss: 0.5813 - val_loss: 0.8106 - val_loss/inference_loss: 0.8106\n", "Epoch 14/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5421 - loss/inference_loss: 0.5421\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 5ms/step - loss: 0.5756 - loss/inference_loss: 0.5756 - val_loss: 0.4150 - val_loss/inference_loss: 0.4150\n", "Epoch 15/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5395 - loss/inference_loss: 0.5395\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 5ms/step - loss: 0.5761 - loss/inference_loss: 0.5761 - val_loss: 0.5451 - val_loss/inference_loss: 0.5451\n", "Epoch 16/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m50s\u001B[0m 50ms/step - loss: 0.5390 - loss/inference_loss: 0.5390\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5747 - loss/inference_loss: 0.5747 - val_loss: 0.6248 - val_loss/inference_loss: 0.6248\n", "Epoch 17/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m50s\u001B[0m 50ms/step - loss: 0.5393 - loss/inference_loss: 0.5393\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5666 - loss/inference_loss: 0.5666 - val_loss: 0.4689 - val_loss/inference_loss: 0.4689\n", "Epoch 18/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m50s\u001B[0m 50ms/step - loss: 0.5380 - loss/inference_loss: 0.5380\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5705 - loss/inference_loss: 0.5705 - val_loss: 0.3853 - val_loss/inference_loss: 0.3853\n", "Epoch 19/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m50s\u001B[0m 50ms/step - loss: 0.5363 - loss/inference_loss: 0.5363\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5739 - loss/inference_loss: 0.5739 - val_loss: 0.5055 - val_loss/inference_loss: 0.5055\n", "Epoch 20/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5377 - loss/inference_loss: 0.5377\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5688 - loss/inference_loss: 0.5688 - val_loss: 0.5032 - val_loss/inference_loss: 0.5032\n", "Epoch 21/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5389 - loss/inference_loss: 0.5389\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5663 - loss/inference_loss: 0.5663 - val_loss: 0.5237 - val_loss/inference_loss: 0.5237\n", "Epoch 22/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5388 - loss/inference_loss: 0.5388\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5650 - loss/inference_loss: 0.5650 - val_loss: 0.3955 - val_loss/inference_loss: 0.3955\n", "Epoch 23/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5378 - loss/inference_loss: 0.5378\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5666 - loss/inference_loss: 0.5666 - val_loss: 0.7317 - val_loss/inference_loss: 0.7317\n", "Epoch 24/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5357 - loss/inference_loss: 0.5357\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5632 - loss/inference_loss: 0.5632 - val_loss: 0.6094 - val_loss/inference_loss: 0.6094\n", "Epoch 25/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m50s\u001B[0m 50ms/step - loss: 0.5349 - loss/inference_loss: 0.5349\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5701 - loss/inference_loss: 0.5701 - val_loss: 0.5721 - val_loss/inference_loss: 0.5721\n", "Epoch 26/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5379 - loss/inference_loss: 0.5379\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5711 - loss/inference_loss: 0.5711 - val_loss: 0.6184 - val_loss/inference_loss: 0.6184\n", "Epoch 27/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m50s\u001B[0m 50ms/step - loss: 0.5363 - loss/inference_loss: 0.5363\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5672 - loss/inference_loss: 0.5672 - val_loss: 0.6326 - val_loss/inference_loss: 0.6326\n", "Epoch 28/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m50s\u001B[0m 50ms/step - loss: 0.5346 - loss/inference_loss: 0.5346\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5585 - loss/inference_loss: 0.5585 - val_loss: 0.6209 - val_loss/inference_loss: 0.6209\n", "Epoch 29/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m49s\u001B[0m 49ms/step - loss: 0.5344 - loss/inference_loss: 0.5344\n", + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5594 - loss/inference_loss: 0.5594 - val_loss: 0.5672 - val_loss/inference_loss: 0.5672\n", "Epoch 30/30\n", - "\u001B[1m1000/1000\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m50s\u001B[0m 50ms/step - loss: 0.5375 - loss/inference_loss: 0.5375\n" + "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5597 - loss/inference_loss: 0.5597 - val_loss: 0.4648 - val_loss/inference_loss: 0.4648\n" ] } ], - "execution_count": 60 + "execution_count": 14 }, { "cell_type": "markdown", @@ -454,7 +501,7 @@ "### Two Moons Posterior\n", "\n", "The two moons posterior at point $x = (0, 0)$ should resemble two crescent shapes. Below, we plot the corresponding posterior samples and posterior density. \n", - "These results suggest that our flow matching setup can approximate the expected analytical posterior well. (Note that you can achieve even better fit the longer you train.)" + "These results suggest that our flow matching setup can approximate the expected analytical posterior well. (Note that you can achieve an even better fit if you use online training and more epochs.)" ] }, { @@ -462,8 +509,8 @@ "id": "8562caeb", "metadata": { "ExecuteTime": { - "end_time": "2024-09-23T13:10:49.205561Z", - "start_time": "2024-09-23T13:10:46.376577Z" + "end_time": "2024-09-23T14:42:38.584554Z", + "start_time": "2024-09-23T14:42:36.076923Z" } }, "source": [ @@ -493,7 +540,7 @@ "(-0.5, 0.5)" ] }, - "execution_count": 61, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, @@ -502,13 +549,13 @@ "text/plain": [ "
" ], - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAg0AAAIQCAYAAAACUF3RAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAABwWklEQVR4nO3deXxU5aEH/N+ZJfu+QIghSBISlgAJKCDgErhuiEG0WtR7pcBrq75qFYreivX2tVqXIlbhYuuG0KuiRcCo1JVoBSSoJIEACSSBLE5CJslMMpksM3POef8YZpxJJslJyEwWft/Pp0XOnHPmmSfR85tnFWRZlkFERETUC9VgF4CIiIiGB4YGIiIiUoShgYiIiBRhaCAiIiJFGBqIiIhIEYYGIiIiUoShgYiIiBRhaCAiIiJFGBqIiIhIEYYGIiIiUoShgYiIiBRhaKBu7dy5E2lpac7/TZ48GVdccQV+//vf4+zZswP+focPH8bGjRvR3Nw84PcGfv481dXVXrn/SDCU68jbvx+enE99DOW67K9NmzZh0aJFkCTJecxsNuPpp5/G/PnzMXXqVCxZsgSffPJJv+6v9F7//Oc/cfnll6O1tbXfn4X6h6GBevXMM8/gvffew5tvvonbbrsNH3/8Me64444B/xc2Pz8fmzZt8tpD4aqrrsJ7772HUaNGeeX+5F3e/v3w5Hx+Z0ba79vZs2fxxhtv4MEHH4RK9fOj44EHHsDu3btx//3347XXXsPUqVOxevVqfPTRR31+D6X3Wrp0KYKCgvD666+f9+eivtEMdgFo6JswYQKmTp0KAJgzZw5EUcTmzZvx5ZdfIjs7e5BL17u2tjYEBgYiKioKUVFRA35fGnkG4ndmoH/fBtu2bdsQGhqKa665xnnsm2++wf79+/HCCy9g8eLFAOz/jdDpdHj++eexaNEiqNVqRffvy700Gg1++ctfYvPmzbj77rv576EPsaWB+iwjIwMAoNPpnMd++OEHLF++HJmZmZg+fTqWLVuGr7/+2u26xsZG/OEPf8CVV16J9PR0zJkzB8uWLcOBAwewceNGPP/88wCAhQsXOrtE8vLynNefOXMGa9aswWWXXYb09HRcf/31ePvtt93eY+PGjUhLS8OxY8fw4IMP4tJLL8XVV18NoPvmYiVl7+m+nvT0WR0qKirw+9//Htdccw2mT5+Oyy+/HPfccw9KSko8vndxcTEefPBBzJw5E7NmzcIzzzwDm82G8vJyrFq1CpmZmViwYAFee+01j9cfP34c999/P2bMmIGZM2fid7/7HRobG7v9DH2pd6Wf2RMl9aDk98OT8/3Zevqd+fLLL3HjjTciPT0dCxcuxNatW533cOXpWsd5p06dwurVqzFz5kzMnTsXv//972EymXr8LHV1dcjMzMTDDz/sdjw3NxdTpkzBiy++2OP158NisWDHjh1YvHixWyvDF198gaCgIFx33XVu5998882oq6tDYWGh4vfo671uvPFGtLS09LsrhPqHLQ3UZxUVFQDg/BZ16NAhrFy5EqmpqXj66afh5+eHd999F/fccw82bNiARYsWAQDWrl2L48eP4+GHH8bFF1+M5uZmHD9+HEajEbfeeiuamprwj3/8A5s2bUJsbCwAICUlBQBQWlqKZcuWYcyYMXj00UcRGxuLffv24amnnoLBYMD999/vVsYHHngAixYtwrJly3rsRlFa9r7et6fP6lBXV4eIiAisWbMGUVFRaGpqwq5du3Dbbbdh165dSEpKcrvnQw89hOzsbCxbtgz79+/H66+/DpvNhgMHDuCOO+7AqlWr8NFHH2H9+vUYN26c2zdCALj//vtx3XXXYdmyZSgtLcVLL72EsrIyvP/++9BqtR4/R1/qXcln9kRJPfT2++GJN362//73v/HAAw/gkksuwV//+lfYbDa8+eabqK+v7/EzduZ4r1/84hc4efIkXnjhBQD2rsDujBo1CqtWrcKmTZuwatUqpKenIy8vD7/97W9x++23dwkTDrIsQxRFReXSaDw/Eo4cOQKj0YjZs2e7HT916hSSk5O7XOcIUKdOncKMGTMUvXdf7xUbG4ukpCR88803+MUvfqHoPWgAyETd+OCDD+TU1FS5oKBAtlqtcktLi5ybmyvPmTNHzszMlPV6vSzLsnzbbbfJl112mdzS0uK81mazyYsXL5avuOIKWZIkWZZlOSMjQ3766ae7fb/XX39dTk1Nlauqqrq8tnLlSvmKK66QTSaT2/Enn3xSnjp1qmw0GmVZluWXX35ZTk1NlV966aVuP4/r/ZWWvaf7etLbZ/XEZrPJFotFvuaaa+Q///nPzuOO937zzTfdzl+yZImcmpoqf/75585jVqtVnjNnjnz//fd3ud71nrIsyzk5OXJqaqr84YcfOo91riOl9d7fz+xJd/XQ0++HJwPxs+1cH7fccot85ZVXyh0dHc5zWlpa5FmzZsmpqak9Xuv6Xq+99prbuX/84x/lqVOnOsvUndbWVnn+/Pny8uXL5cLCQjkzM1P+7//+7x6vO3jwoJyamqrof93V7auvviqnpqY6/513uOaaa+SVK1d2Of/s2bNyamqq/Le//a3Hz3O+91qzZo08d+5cxe9B548tDdSr2267ze3vqamp+OMf/4iYmBi0traisLAQt99+O4KDg53nqNVqZGdnY/369SgvL0dycjKmTZuGXbt2ISIiAnPnzsWUKVO6/YbrqqOjAwcPHsTtt9+OgIAA2Gw252tXXHEF/u///g8FBQW48sorncc7f8v2pC9l78t9ASj6rDabDa+//jpycnJQWVkJq9XqfK2srKzLPa+66iq3vycnJ6O4uBhXXHGF85hGo8G4cePw008/dbn+xhtvdPv79ddfj//+7/9GXl6ex7Epfa33/v58+1oPSnjjZ9va2oqioiL853/+J/z8/JzHg4ODsWDBAuzcuVNx+RYsWOD297S0NHR0dKChoQExMTHdXhcYGIiHHnoIjz32GJYvX44rr7wSTz31FARB6PaaKVOmYMeOHYrK1d2gzbq6OgiCgMjIyC6v9fTePb3W1/M9vRYdHY2GhgbYbLZuW0loYLGWqVfPPfecs9kwOjra7T8szc3NkGXZ2VzsynGeo3n6xRdfxCuvvIIdO3bgpZdeQlBQEK6++mqsXbvW4/UORqMRNpsN//jHP/CPf/zD4zkGg8Hje/ekL2Xvy30BZZ/12Wefxdtvv427774bl156KcLDwyEIAh5//HF0dHR0uWd4eLjb37VaLQIDA+Hv79/leEtLS5frO39OjUaDiIiIbrsP+lrv/f359rUelPDGz9Zxz+jo6C6veTrWk4iICLe/O0JIe3t7r9defPHFzn9+9tlnex1oGBwcjEmTJikqV3cP3o6ODmg0mi7v1d3vT1NTE4Cuv7M96c+9/P39Icuys3zkfaxl6lVycrJz9kRnYWFhUKlU0Ov1XV6rq6sDAOe3k6ioKKxbtw7r1q2DTqfD3r178cILL6ChoQFvvPFGt+8fFhYGtVqNJUuW4I477vB4TkJCQl8/Vp/K3ldKPmtOTg5uuukmrF692u1ag8GAsLCwfr1vT/R6PUaPHu38u81mg9Fo7PIAc+hrvff35+uNevDGzzYsLAyCIKChoaHLa30d09BfJ06cwD333IMZM2bg8OHD+OCDD3DnnXf2eM2hQ4dw1113Kbr/V1995fHfpcjISFitVrS2tiIoKMh5PDU1FR9//HGXb/onT54EYJ95pVR/7mU0GuHn5+fWmkTexdBA5yUoKAjTp0/HF198gUcffRQBAQEAAEmSkJOTg7i4OIwfP77LdfHx8fjP//xPfPfddzh8+DCAn79tdf52GRgYiNmzZ+P48eNIS0tzaxoejLL3lafPCtibWzs333/99dc4e/Ysxo0bd97v29lHH32E9PR059//9a9/wWazYdasWR7PP5967+4ze6K0Hrr7/fDEGz/boKAgpKen48svv8QjjzziLI/ZbEZubm6f7tUfjlkyGRkZ2Lx5M377299i48aNyM7ORmhoaLfXDUT3hKOuKisrMXHiROfx//iP/8D777+Pzz//3G1g6a5duzBq1ChMnz5d0fv2917V1dU9DoalgcfQQOdt9erVWLlyJe666y6sXLkSWq0W77zzDk6dOoUNGzZAEASYTCbcddddWLx4MZKSkhAcHIyjR4/i22+/dU5vS01NBQBs3boVS5cuhUajwfjx4xESEoJ169bhjjvuwJ133onbb78dF110EcxmMyorK7F3715s27bNa2XvKyWfFbCPUXDMDnBM+XvjjTcQFxfXr8/Smy+++AJqtRrz5s3DqVOn8NJLL2HixIm4/vrru71Gab0r/cyeKK2Hnn4/PPHGz/bBBx/Eb37zG6xatQrLly+HKIp44403EBwc7GxG94bq6mqsWLEC48ePx8aNG6HVarFmzRrceOON+Nvf/oa1a9d2e21ISEi3LYVKOWZNFBYWuoWGK6+8EvPmzcMf//hHtLS0IDExEZ988gm+/fZb/OUvf+nSnZGWloZZs2Z57O7q670kScKRI0c4c8LHGBrovM2aNQtvvfUWNm7ciN///veQJAkTJ07EK6+8gqysLAD2vsdp06bhww8/xE8//QSbzYYxY8bg7rvvxv/z//w/AOz/YfrNb36DXbt24Z///CckScK2bdswe/ZspKSkYOfOndi8eTP++te/orGxEaGhoRg3bpzbAEhvlL2vlHxWwP5A1mg0ePXVV9Ha2orJkydj48aNeOmll/r9eXqyceNGbNy4Ee+++y4EQcCCBQvw2GOP9diCoLTelX5mT5TWQ0+/H55442d7xRVXOMv20EMPITY2Frfffjvq6uqQk5PTr3v2pq6uDitWrEB0dDT+/ve/O1tNkpOTccstt2Dbtm24/fbb+9VFp9SYMWNwySWX4KuvvsIvf/lLt9c2btyIF198ES+//DKMRiOSkpKwYcMG3HDDDW7nmc1mAF3H1vTnXgCQl5cHk8nUZYAveZcgy7I82IUgIu/ZuHEjNm3ahO+++25ErVA4VFitVtx0000YPXo03nzzzcEujtd89tlnePjhh5Gbm+s2Nkapb775Br/5zW/w4YcfdlkIqz/Wrl2LqqoqbN++/bzvRcpxRUgioj547LHH8Mknn+DQoUPYs2cPVq5cibKysl5bVIa7a665BlOnTsXf//73fl1/8OBB3HDDDQMSGCorK/Gvf/0Lv/vd7877XtQ37J4gIuoDs9mM5557Do2NjdBqtZg8eTJeffVVzJ07d7CL5lWCIOBPf/oT9u7dC0mS3JaTVuLRRx8dsLLodDr84Q9/wCWXXDJg9yRl2D1BREREirB7goiIiBRhaCAiIiJFGBqIiIhIkREXGuRz28ByqAYREdHAGnGhQZIkFBQUQJKkwS5Kn8my7NwUh7yP9e1brG/fY5371oVQ3yMuNAx3wzHsDGesb99iffse69y3Rnp9MzQQERGRIgwNREREpAhDAxERESnC0EBERESKMDQQERGRIgwNREREpAhDAxERESnC0EBERESKMDQQERGRIgwNREREpAhDAxERESnC0EBERESKMDQQERGRIgwNREREpAhDAxERESnC0EBERESKMDQQERGRIgwNREREpAhDAxERESnC0EBERESKMDQQERGRIgwNREREpAhDAxERESnC0EBERESKMDQQERGRIgwNREREpAhDAxERESnC0EBERESKMDQQERGRIgwNREREpAhDAxERESnC0EBERESKMDQQERGRIgwNREREpAhDAxERESnC0EBERESKMDQQERGRIgwNREREpAhDAxERESnC0EBERESK+CQ0vP3221iwYAGmTp2Km2++GT/88IOi63788UdMnjwZS5Ys8XIJiYiIqDdeDw179uzBM888g3vvvRe7d+/GzJkzcffdd0On0/V4nclkwqOPPorLLrvM20UkIiIiBbweGrZs2YJbbrkFt956K5KTk7Fu3TrExcXh3Xff7fG6J554AosXL0ZGRoa3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gYiIiBRhaCAiIiJFGBqIiIhIEZ+EhrfffhsLFizA1KlTcfPNN+OHH37o8fxDhw7h5ptvxtSpU7Fw4UK8++67vigmERER9cDroWHPnj145plncO+992L37t2YOXMm7r77buh0Oo/nV1VV4de//jVmzpyJ3bt345577sHTTz+Nzz77zNtFJSIioh54PTRs2bIFt9xyC2699VYkJydj3bp1iIuL67b1YPv27RgzZgzWrVuH5ORk3Hrrrbj55pvx5ptveruoRERE1AONN29usVhw7Ngx/PrXv3Y7Pm/ePOTn53u8pqCgAPPmzXM7dvnll+ODDz6A1WqFVqtV9N6yLEOW5f4VfJA4yjzcyj1csb59i/Xte6xz3xrO9S0IgqLzvBoaDAYDRFFEdHS02/GYmBjo9XqP19TX1yMmJsbtWHR0NGw2GwwGA0aNGqXovZubm6FSDa9xnrIso7W1FYDyHyD1H+vbt1jfvsc6963hXN8RERGKzvNqaHDoXHmyLPdYoZ7O93S8J2FhYVCr1X0o5eBzfM7w8PBh9ws3HLG+fYv17Xusc9+6EOrbq6EhMjISarUa9fX1bscbGhq6tCY4eGqFaGxshEajUZyEAHvAGI4/NEe5h2PZhyPWt2+xvn2Pde5bI72+vdp+7+fnhylTpmD//v1uxw8cOIDMzEyP12RkZODAgQNux/bt24f09HTF4xmIiIho4Hm903/FihXYsWMHduzYgbKyMvz5z39GTU0Nli1bBgB44YUX8MgjjzjPX7ZsGXQ6HZ555hmUlZVhx44d+OCDD7By5UpvF5WIiIh64PUxDYsWLYLBYMDmzZtRV1eH1NRUvPrqq7jooosAAHq9HjU1Nc7zx44di1dffRXPPPMM3n77bYwaNQrr1q3Dtdde6+2iEhERUQ8EeTjODemBKIooKChARkbGsBwI2dTUNKIH0QwlrG/fYn37Huvcty6E+h5ecxKJiIho0DA0EBERkSIMDURERKQIQwMREREpwtBAREREijA0EBERkSIMDURERKQIQwMREREpwtBAREREijA0EBERkSIMDURERKQIQwMREREpwtBAREREijA0EBERkSIMDURERKQIQwMREREpwtBAREREijA0EBERkSIMDURERKQIQwMREREpwtBAREREijA0EBERkSIMDURERKQIQwMREREpwtBAREREijA0EBERkSIM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" + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAg0AAAIQCAYAAAACUF3RAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAACNeUlEQVR4nOz9d3xc1bn3f3/2FLVRL7YsXHCVcS8EAzZFJpRQTEuIIScQ4E5OwpOQAElIQk7u/JIQUsCEkNupQEwOJYRiRG8WxTbYCZa7JaxiFWRZvY2kqfv5YzTb6h7ZlmzZ3/frdY7t0S5rlobsa9a61rUM0zRNRERERA7BdqwbICIiIqODggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGGdDzzz9Pdna29X+zZs3i3HPP5Yc//CEHDhw46vfbsmULDz/8MC0tLUf92nDw/VRWVg7L9U8Ex3MfDffnoz9H0h/Hc18erj/84Q9ceumlBINB6zW32829997LsmXLmDt3LldeeSWvvPLKYV0/0mv961//4pxzzqG9vf2w34scHgUNckj33Xcf//znP3n00Ue57rrrePnll7nhhhuO+n+w+fn5/OEPfxi2h8L555/PP//5T8aMGTMs15fhNdyfj/4cyWfmRPu8HThwgEceeYTbb78dm+3go+Nb3/oWa9eu5Zvf/CZ//etfmTt3LnfeeScvvfTSkO8R6bWuvvpq4uLi+Nvf/nbE70uGxnGsGyDHv+nTpzN37lwAzjzzTAKBAKtXr+btt99mxYoVx7h1h9bR0UFsbCypqamkpqYe9evKiedofGaO9uftWHv88cdJSEjgoosusl5777332LBhAw888ACXX345EPrfiKqqKn7zm99w6aWXYrfbI7r+UK7lcDj44he/yOrVq/nqV7+q/w5HkEYaZMgWLFgAQFVVlfXaf/7zH2666SYWLlzI/PnzWblyJe+++26P8xoaGvif//kfzjvvPObMmcOZZ57JypUr2bhxIw8//DC/+c1vALjgggusKZFNmzZZ5+/bt4+77rqLs846izlz5vC5z32OJ554osc9Hn74YbKzs9m1axe33347n/nMZ7jwwguBgYeLI2n7YNftz2DvNaysrIwf/vCHXHTRRcyfP59zzjmHr3/96xQWFvZ774KCAm6//XYWL17MGWecwX333Yff76ekpIRbb72VhQsXsnz5cv7617/2e/7u3bv55je/yaJFi1i8eDHf/e53aWhoGPA9DKXfI33P/YmkHyL5fPTnSH+3/X1m3n77ba644grmzJnDBRdcwJo1a6xrdNffueHj9u7dy5133snixYs5++yz+eEPf0hra+ug76WmpoaFCxdyxx139Hg9Ly+P2bNn8+CDDw56/pHwer08++yzXH755T1GGd566y3i4uK45JJLehx/zTXXUFNTw7Zt2yK+x1CvdcUVV9DW1nbYUyFyeDTSIENWVlYGYH2L2rx5M7fccgszZszg3nvvJSoqiqeeeoqvf/3rrFq1iksvvRSA733ve+zevZs77riDU089lZaWFnbv3k1TUxNf+MIXaG5u5h//+Ad/+MMfyMjIAGDatGkAFBUVsXLlSsaNG8fdd99NRkYG69ev5xe/+AWNjY1885vf7NHGb33rW1x66aWsXLly0GmUSNs+1OsO9l7DampqSE5O5q677iI1NZXm5mZeeOEFrrvuOl544QWmTJnS45rf+c53WLFiBStXrmTDhg387W9/w+/3s3HjRm644QZuvfVWXnrpJe6//34mTZrU4xshwDe/+U0uueQSVq5cSVFREQ899BDFxcU888wzOJ3Oft/HUPo9kvfcn0j64VCfj/4Mx+/2/fff51vf+hann346v/vd7/D7/Tz66KPU1dUN+h57C9/r85//PJ988gkPPPAAEJoKHMiYMWO49dZb+cMf/sCtt97KnDlz2LRpE9/+9re5/vrr+wQTYaZpEggEImqXw9H/I2H79u00NTWxZMmSHq/v3buXqVOn9jkvHEDt3buXRYsWRXTvoV4rIyODKVOm8N577/H5z38+onvIUWCKDOC5554zZ8yYYW7dutX0+XxmW1ubmZeXZ5555pnmwoULzdraWtM0TfO6664zzzrrLLOtrc061+/3m5dffrl57rnnmsFg0DRN01ywYIF57733Dni/v/3tb+aMGTPMioqKPj+75ZZbzHPPPddsbW3t8frPfvYzc+7cuWZTU5Npmqb5+9//3pwxY4b50EMPDfh+ul8/0rYPdt3+HOq99sfv95ter9e86KKLzF/+8pfW6+F7P/rooz2Ov/LKK80ZM2aYb775pvWaz+czzzzzTPOb3/xmn/O7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Dz/8MA8//DBPPfUUhmGwfPlyfvSjHw06ghBpv0f6nvsTaT8M9vnoz3D8bs8991yrbd/5znfIyMjg+uuvp6amhtzc3MO65qHU1NRw8803k5aWxp///Gdr1GTq1Klce+21PP7441x//fWHNUUXqXHjxnH66afzzjvv8MUvfrHHzx5++GEefPBBfv/739PU1MSUKVNYtWoVl112WY/j3G430De35nCuBbBp0yZaW1v7JPjK8DJM0zSPdSNEZPg8/PDD/OEPf+DDDz88oSoUHi98Ph9XXXUVY8eO5dFHHz3WzRk2b7zxBnfccQd5eXk9cmMi9d577/Hf//3fvPjii30KYR2O733ve1RUVPD0008f8bUkcqoIKSIyBD/60Y945ZVX2Lx5M6+++iq33HILxcXFhxxRGe0uuugi5s6dy5///OfDOv+jjz7isssuOyoBQ3l5Oa+99hrf/e53j/haMjSanhARGQK3282vf/1rGhoacDqdzJo1i7/85S+cffbZx7ppw8owDH7+85+zbt06gsFgj3LSkbj77ruPWluqqqr4n//5H04//fSjdk2JjKYnREREJCKanhAREZGIKGgQERGRiChoEBERkYiccEGD2bUNrFI1REREjq4TLmgIBoNs3bqVYDB4rJsyZKZpWpviyPBTf48s9ffIU5+PrJOhv0+4oGG0G43Bzmim/h5Z6u+Rpz4fWSd6fytoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYiMSNDwxBNPsHz5cubOncs111zDf/7zn4jO+/jjj5k1axZXXnnlMLdQREREDmXYg4ZXX32V++67j2984xusXbuWxYsX89WvfpWqqqpBz2ttbeXuu+/mrLPOGu4mioiISASGPWh47LHHuPbaa/nCF77A1KlTueeee8jMzOSpp54a9Lyf/OQnXH755SxYsGC4mygiIiIRcAznxb1eL7t27eJrX/taj9eXLl1Kfn7+gOc999xzlJeX89vf/pY//vGPh3Vv0zQxTfOwzj1Wwm0ebe0erdTfI0v9PfLU5yNrNPe3YRgRHTesQUNjYyOBQIC0tLQer6enp1NbW9vvOfv27eOBBx7giSeewOE4/Oa1tLRgs42uPE/TNGlvbwci/wXK4VN/jyz198hTn4+s0dzfycnJER03rEFDWO/OM02z3w4NBALcddddfOtb32Ly5MlHdM/ExETsdvsRXWOkhaPTpKSkUfeBG43U3yNL/T3y1Ocj62To72ENGlJSUrDb7dTV1fV4vb6+nvT09D7Hu91udu7cyZ49e/j5z38OQDAYxDRNZs2axSOPPBJxYqRhGKPylxZu92hs+2ik/h5Z6u+Rpz4fWSd6fw9r0BAVFcXs2bPZsGEDF154ofX6xo0bueCCC/ocHx8fz0svvdTjtSeffJKPPvqI3//+94wfP344mysiIiKDGPbpiZtvvpnvf//7zJkzh4ULF/LPf/6T/fv3s3LlSgAeeOABDhw4wG9+8xtsNhszZszocX5aWhrR0dF9XhcREZGRNexBw6WXXkpjYyOrV6+mpqaGGTNm8Je//IVTTjkFgNraWvbv3z/czRAREZEjZJijcW3IIAKBAFu3bmXBggWjMhGyubn5hE6iOZ6ov0eW+nvkqc9H1snQ36NrTaKIiIgcMwoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkREjpGi8lpWrcmjqLz2WDdFJCIKGkREjrJIg4HcvJ08+crH5ObtHKGWiRwZx7FugIjIaFRUXktu3k5W5Mxh2sSMHj8LBwMAd96UM+A1VuTM6fGnyPFOQYOInFQG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RESGz+hakygiIiLHjIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIgob/f3v3EhJV/4cB/DGtlUZecJMtWjSBZo7NwvISqYQmmiRRiyAoqRwoMGQMkiQss8tUpOLC7DZkEZYIlpRELboQZYyWqYWRmZV5JScpG2d+/0V/fRsd7Yx5Zt5z3ucDbn7+jjznizLPnDnjEBERkSQsDURERCQJSwMRERFJwtJAREREkrA0EBERkSQsDURERCQJSwMRERFJwtJAREREkrA0EBERkSQsDURERCQJSwMRERFJ4uPpALNNCAEAsNlsHk7iOiEE7HY7bDYbvLy8PB1H9Thv9+K83Y8zdy+lz3vOnDl/zK260mC32wEAL1++9HASIiIi5dBqtfD29p52j5cYe2quEna7HaOjo5IaExEREf0i5XFTdaWBiIiI5MEbIYmIiEgSlgYiIiKShKWBiIiIJGFpICIiIklYGoiIiEgSlgYiIiKShKWBiIiIJGFpICIiIklYGjzo69evMBgM0Ol00Ol0MBgMGBoaknx8fn4+li5diosXL8oXUmVcnbnVasWJEyeQlpYGrVaL2NhY5Obm4suXL25MrRyVlZVISEhAeHg4MjIy0NDQMO3+p0+fIiMjA+Hh4UhMTMTVq1fdlFQ9XJl5fX09tm3bhpUrV2LFihXYvHkzHjx44Ma0yufq7/iY58+fIzQ0FOnp6TInlBdLgwfl5OSgra0NFRUVqKioQFtbG3JzcyUde/fuXTQ1NSE4OFjmlOri6sx//PiBlpYW6PV6VFdXo7S0FB0dHdDr9W5MrQx1dXUoKiqCXq9HTU0NdDodduzYgU+fPjnd/+HDB+zcuRM6nQ41NTXIyspCYWEh7ty54+bkyuXqzJ89e4bo6GiUl5ejuroaUVFR0Ov1aGlpcXNyZXJ13mMsFgv27duHVatWuSmpjAR5RHt7u9BoNKKxsXF8zWw2C41GI96+fTvtsd3d3SIuLk68efNGxMfHiwsXLsicVh3+Zua/a2pqEhqNRnz8+FGOmIq1ceNGkZ+f77CWnJwsjEaj0/3Hjx8XycnJDmsHDhwQmzZtki2j2rg6c2dSUlJESUnJbEdTpZnOOzs7W5w+fVoUFxeL9evXyxlRdrzS4CFmsxl+fn6IiIgYX9NqtfDz84PZbJ7yOLvdDoPBgMzMTCxZssQdUVVjpjOf6Nu3b/Dy8sL8+fPliKlIP3/+xKtXrxAbG+uwHhMTM+VsGxsbERMT47AWFxeH5uZmWK1W2bKqxUxmPpHdbsfw8DAWLFggQ0J1mem8b9y4gc7OTuzevVvuiG6huo/GVoq+vj4EBgZOWg8MDERfX9+Ux509exY+Pj7YunWrnPFUaaYz/93IyAiMRiNSU1Ph6+s72xEVa3BwEDabbdJ8g4KC0Nvb6/SYvr4+BAUFOawFBgZidHQUg4ODfOntD2Yy84nOnz+P79+/Y926dXJEVJWZzLujowMnT55EZWUlfHzU8XCrjrP4FykpKUFpaem0e65fvz7l94QQU340aXNzM0wmE6qrq/mx37+Rc+a/s1qt2Lt3L4QQOHjwoKsx/xMmzvFPs3W239k6Tc3VmY+5efMmSktLUVZW5rRMk3NS522z2ZCTk4M9e/Zg8eLF7oonO5aGWbZlyxakpKRMuyckJASvX79Gf3//pO8NDAxM+Qfc0NCA/v5+xMfHj6/ZbDYcO3YMJpMJ9+7d+7vwCiXnzMdYrVZkZ2ejq6sLly5d4lWGCfz9/eHt7T3pik1/f/+kqwljnD1DGxgYgI+PDy+XSzCTmY+pq6tDXl4ezpw5g+joaDljqoar8x4eHkZzczNaW1tx6NAhAL9eDhJCIDQ0FOfOnVPkjZEsDbMsICAAAQEBf9wXGRkJi8WCFy9eYPny5QCApqYmWCwWREZGOj0mPT190h94ZmYm0tPTkZGR8ffhFUrOmQP/FIb379/DZDLB399/1rKrxbx58xAWFoZHjx5h7dq14+uPHz9GYmKi02O0Wi3u37/vsPbw4UMsW7YMc+fOlTWvGsxk5sCvKwz79+/HqVOnsGbNGjckVQdX5+3r64va2lqHtStXruDJkycoLi5GSEiI7Jll4bl7MCkzM1OkpaUJs9kszGazSE1NFbt27XLYk5SUJOrr66f8GXz3hGtcnbnVahVZWVli9erVorW1VfT09Ix/jYyMeOIU/rVu3bolwsLCRFVVlWhvbxeFhYVCq9WKrq4uIYQQRqNRGAyG8f2dnZ0iIiJCHDlyRLS3t4uqqioRFhYmbt++7alTUBxXZ15bWytCQ0PF5cuXHX6Xh4aGPHUKiuLqvCdSw7sneKXBg4xGIw4fPozt27cDABISEpCfn++w5927d7BYLJ6Ip0quzry7u3v8ZZ+J/5TFZDIhKirKDamVISUlBYODgygrK0NPTw80Gg3Ky8uxcOFCAEBvby8+f/48vn/RokUoLy9HUVERKisrERwcjLy8PCQlJXnqFBTH1Zlfu3YNo6OjKCgoQEFBwfj6hg0bcPToUbfnVxpX561GXkL8/84jIiIiomnw/zQQERGRJCwNREREJAlLAxEREUnC0kBERESSsDQQERGRJCwNREREJAlLAxEREUnC0kBERESSsDQQERGRJCwNREREJAlLAxEREUnC0kBERESS/A8s4JnEnCTYGAAAAABJRU5ErkJggg==" }, "metadata": {}, "output_type": "display_data" } ], - "execution_count": 61 + "execution_count": 15 }, { "cell_type": "markdown", @@ -527,15 +574,15 @@ "id": "f76289b3", "metadata": { "ExecuteTime": { - "end_time": "2024-09-23T13:10:49.213384Z", - "start_time": "2024-09-23T13:10:49.211737Z" + "end_time": "2024-09-23T14:42:38.595234Z", + "start_time": "2024-09-23T14:42:38.593542Z" } }, "source": [ "# Will be added soon." ], "outputs": [], - "execution_count": 62 + "execution_count": 16 }, { "cell_type": "markdown", @@ -550,15 +597,15 @@ "id": "89dcb727", "metadata": { "ExecuteTime": { - "end_time": "2024-09-23T13:10:49.258127Z", - "start_time": "2024-09-23T13:10:49.256363Z" + "end_time": "2024-09-23T14:42:38.639240Z", + "start_time": "2024-09-23T14:42:38.637439Z" } }, "source": [ "# Will be added soon." ], "outputs": [], - "execution_count": 63 + "execution_count": 17 } ], "metadata": { From 34217d62bcbc64c03523795e00827f33178bbb19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul-Christian=20B=C3=BCrkner?= Date: Mon, 23 Sep 2024 22:27:16 +0200 Subject: [PATCH 12/12] Update TwoMoons_FlowMatching.ipynb --- examples/TwoMoons_FlowMatching.ipynb | 352 ++++++++++++++------------- 1 file changed, 186 insertions(+), 166 deletions(-) diff --git a/examples/TwoMoons_FlowMatching.ipynb b/examples/TwoMoons_FlowMatching.ipynb index 041708e7..4fcfd655 100644 --- a/examples/TwoMoons_FlowMatching.ipynb +++ b/examples/TwoMoons_FlowMatching.ipynb @@ -10,6 +10,7 @@ }, { "cell_type": "code", + "execution_count": 1, "id": "d5f88a59", "metadata": { "ExecuteTime": { @@ -17,6 +18,20 @@ "start_time": "2024-09-23T14:39:46.032170Z" } }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "CUDA backend failed to initialize: Unable to use CUDA because of the following issues with CUDA components:\n", + "Outdated cuDNN installation found.\n", + "Version JAX was built against: 8907\n", + "Minimum supported: 9100\n", + "Installed version: 8907\n", + "The local installation version must be no lower than 9100..(Set TF_CPP_MIN_LOG_LEVEL=0 and rerun for more info.)\n" + ] + } + ], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", @@ -35,22 +50,7 @@ "sys.path.append('../')\n", "\n", "import bayesflow as bf" - ], - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "CUDA backend failed to initialize: Unable to use CUDA because of the following issues with CUDA components:\n", - "Outdated cuDNN installation found.\n", - "Version JAX was built against: 8907\n", - "Minimum supported: 9100\n", - "Installed version: 8907\n", - "The local installation version must be no lower than 9100..(Set TF_CPP_MIN_LOG_LEVEL=0 and rerun for more info.)\n" - ] - } - ], - "execution_count": 1 + ] }, { "cell_type": "markdown", @@ -86,19 +86,24 @@ ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "BayesFlow offers many ways to define your data generating process. Here, we use sequential functions to build a simulator object for online training. Within this composite simulator, each function has access to the outputs of the previous functions. This effectively allows you to define any generative graph.", - "id": "21bf228e706a010" + "id": "21bf228e706a010", + "metadata": {}, + "source": [ + "BayesFlow offers many ways to define your data generating process. Here, we use sequential functions to build a simulator object for online training. Within this composite simulator, each function has access to the outputs of the previous functions. This effectively allows you to define any generative graph." + ] }, { + "cell_type": "code", + "execution_count": 2, + "id": "f761b142a0e1da66", "metadata": { "ExecuteTime": { "end_time": "2024-09-23T14:39:46.703381Z", "start_time": "2024-09-23T14:39:46.700649Z" } }, - "cell_type": "code", + "outputs": [], "source": [ "def alpha_prior():\n", " alpha = np.random.uniform(-np.pi / 2, np.pi / 2)\n", @@ -116,61 +121,65 @@ " x1 = -np.abs(theta[0] + theta[1]) / np.sqrt(2) + r * np.cos(alpha) + 0.25\n", " x2 = (-theta[0] + theta[1]) / np.sqrt(2) + r * np.sin(alpha)\n", " return dict(x=np.array([x1, x2]))" - ], - "id": "f761b142a0e1da66", - "outputs": [], - "execution_count": 2 + ] }, { + "cell_type": "markdown", + "id": "722cb773", + "metadata": {}, + "source": [ + "Within the composite simulator, every simulator has access to the outputs of the previous simulators in the list. For example, the last simulator `forward_model` has access to the outputs of the three other simulators." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "4b89c861527c13b8", "metadata": { "ExecuteTime": { "end_time": "2024-09-23T14:39:46.747091Z", "start_time": "2024-09-23T14:39:46.744830Z" } }, - "cell_type": "code", - "source": "simulator = bf.simulators.CompositeLambdaSimulator([alpha_prior, r_prior, theta_prior, forward_model])", - "id": "4b89c861527c13b8", "outputs": [], - "execution_count": 3 + "source": [ + "simulator = bf.simulators.CompositeLambdaSimulator([alpha_prior, r_prior, theta_prior, forward_model])" + ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "Let's generate some data to see what the simulator does:", - "id": "f6e1eb5777c59eba" + "id": "f6e1eb5777c59eba", + "metadata": {}, + "source": [ + "Let's generate some data to see what the simulator does:" + ] }, { + "cell_type": "code", + "execution_count": 4, + "id": "e6218e61d529e357", "metadata": { "ExecuteTime": { "end_time": "2024-09-23T14:39:46.798575Z", "start_time": "2024-09-23T14:39:46.790581Z" } }, - "cell_type": "code", + "outputs": [], "source": [ "# generate 128 random draws from the joint distribution p(r, alpha, theta, x)\n", "sample_data = simulator.sample((128,))" - ], - "id": "e6218e61d529e357", - "outputs": [], - "execution_count": 4 + ] }, { + "cell_type": "code", + "execution_count": 5, + "id": "46174ccb0167026c", "metadata": { "ExecuteTime": { "end_time": "2024-09-23T14:39:46.854911Z", "start_time": "2024-09-23T14:39:46.852129Z" } }, - "cell_type": "code", - "source": [ - "print(\"Type of sample_data:\\n\\t\", type(sample_data))\n", - "print(\"Keys of sample_data:\\n\\t\", sample_data.keys())\n", - "print(\"Types of sample_data values:\\n\\t\", {k: type(v) for k, v in sample_data.items()})\n", - "print(\"Shapes of sample_data values:\\n\\t\", {k: v.shape for k, v in sample_data.items()})" - ], - "id": "46174ccb0167026c", "outputs": [ { "name": "stdout", @@ -187,104 +196,111 @@ ] } ], - "execution_count": 5 + "source": [ + "print(\"Type of sample_data:\\n\\t\", type(sample_data))\n", + "print(\"Keys of sample_data:\\n\\t\", sample_data.keys())\n", + "print(\"Types of sample_data values:\\n\\t\", {k: type(v) for k, v in sample_data.items()})\n", + "print(\"Shapes of sample_data values:\\n\\t\", {k: v.shape for k, v in sample_data.items()})" + ] }, { - "metadata": {}, "cell_type": "markdown", - "source": "BayesFlow also provides this simulator and a collection of others in the `bayesflow.benchmarks` module.", - "id": "17f158bd2d7abf75" + "id": "17f158bd2d7abf75", + "metadata": {}, + "source": [ + "BayesFlow also provides this simulator and a collection of others in the `bayesflow.benchmarks` module." + ] }, { - "metadata": {}, "cell_type": "markdown", + "id": "fee88fcfd7a373b0", + "metadata": {}, "source": [ "## Data Adapter\n", "\n", "The next step is to tell BayesFlow how to deal with all the simulated variables. You may also think of this as informing BayesFlow about the data flow, i.e., which variables go into which network.\n", "\n", "For this example, we want to learn the posterior distribution $p(\\theta | x)$, so we **infer** $\\theta$, **conditioning** on $x$." - ], - "id": "fee88fcfd7a373b0" + ] }, { + "cell_type": "code", + "execution_count": 6, + "id": "c9637c576d4ad4e5", "metadata": { "ExecuteTime": { "end_time": "2024-09-23T14:39:46.905081Z", "start_time": "2024-09-23T14:39:46.903091Z" } }, - "cell_type": "code", + "outputs": [], "source": [ "data_adapter = bf.ContinuousApproximator.build_data_adapter(\n", " inference_variables=[\"theta\"],\n", " inference_conditions=[\"x\"],\n", ")" - ], - "id": "c9637c576d4ad4e5", - "outputs": [], - "execution_count": 6 + ] }, { - "metadata": {}, "cell_type": "markdown", + "id": "254e287b2bccdad", + "metadata": {}, "source": [ "## Dataset\n", "\n", "For this example, we will sample our training data ahead of time and use offline training with a `bf.datasets.OfflineDataset`.\n", "\n", - "This makes the training process faster, since we avoid repeated sampling. If you want to use online training, you can use an `OnlineDataset` analogously, or just pass your simulator directly to `fit()`!" - ], - "id": "254e287b2bccdad" + "This makes the training process faster, since we avoid repeated sampling. If you want to use online training, you can use an `OnlineDataset` analogously, or just pass your simulator directly to `approximator.fit()`!" + ] }, { + "cell_type": "code", + "execution_count": 7, + "id": "39cb5a1c9824246f", "metadata": { "ExecuteTime": { "end_time": "2024-09-23T14:39:46.950573Z", "start_time": "2024-09-23T14:39:46.948624Z" } }, - "cell_type": "code", + "outputs": [], "source": [ - "num_training_batches = 2048\n", + "num_training_batches = 1024\n", "num_validation_batches = 256\n", "batch_size = 128" - ], - "id": "39cb5a1c9824246f", - "outputs": [], - "execution_count": 7 + ] }, { + "cell_type": "code", + "execution_count": 8, + "id": "9dee7252ef99affa", "metadata": { "ExecuteTime": { "end_time": "2024-09-23T14:39:53.268860Z", "start_time": "2024-09-23T14:39:46.994697Z" } }, - "cell_type": "code", + "outputs": [], "source": [ "training_samples = simulator.sample((num_training_batches * batch_size,))\n", "validation_samples = simulator.sample((num_validation_batches * batch_size,))" - ], - "id": "9dee7252ef99affa", - "outputs": [], - "execution_count": 8 + ] }, { + "cell_type": "code", + "execution_count": 9, + "id": "51045bbed88cb5c2", "metadata": { "ExecuteTime": { "end_time": "2024-09-23T14:39:53.281170Z", "start_time": "2024-09-23T14:39:53.275921Z" } }, - "cell_type": "code", + "outputs": [], "source": [ "training_dataset = bf.datasets.OfflineDataset(training_samples, batch_size=batch_size, data_adapter=data_adapter)\n", "validation_dataset = bf.datasets.OfflineDataset(validation_samples, batch_size=batch_size, data_adapter=data_adapter)" - ], - "id": "51045bbed88cb5c2", - "outputs": [], - "execution_count": 9 + ] }, { "cell_type": "markdown", @@ -300,6 +316,7 @@ }, { "cell_type": "code", + "execution_count": 10, "id": "09206e6f", "metadata": { "ExecuteTime": { @@ -307,6 +324,7 @@ "start_time": "2024-09-23T14:39:53.319852Z" } }, + "outputs": [], "source": [ "inference_network = bf.networks.FlowMatching(\n", " subnet=\"mlp\",\n", @@ -315,18 +333,19 @@ " width=256,\n", " ),\n", ")" - ], - "outputs": [], - "execution_count": 10 + ] }, { "cell_type": "markdown", "id": "851e522f", "metadata": {}, - "source": "This inference network is just a general Flow Matching architecture, not yet adapted to the specific inference task at hand (i.e., posterior appproximation). To achieve this adaptation, we combine the network with our data adapter, which together form an `approximator`. In this case, we need a `ContinuousApproximator` since the target we want to approximate is the posterior of the *continuous* parameter vector $\\theta$." + "source": [ + "This inference network is just a general Flow Matching architecture, not yet adapted to the specific inference task at hand (i.e., posterior appproximation). To achieve this adaptation, we combine the network with our data adapter, which together form an `approximator`. In this case, we need a `ContinuousApproximator` since the target we want to approximate is the posterior of the *continuous* parameter vector $\\theta$." + ] }, { "cell_type": "code", + "execution_count": 11, "id": "96ca6ffa", "metadata": { "ExecuteTime": { @@ -334,52 +353,53 @@ "start_time": "2024-09-23T14:39:53.369375Z" } }, + "outputs": [], "source": [ "approximator = bf.ContinuousApproximator(\n", " inference_network=inference_network,\n", " data_adapter=data_adapter,\n", ")" - ], - "outputs": [], - "execution_count": 11 + ] }, { - "metadata": {}, "cell_type": "markdown", + "id": "566264eadc76c2c", + "metadata": {}, "source": [ "### Optimizer and Learning Rate\n", "For this example, it is sufficient to use a static learning rate. In practice, you may want to use a learning rate schedule, like [cosine decay](https://keras.io/api/optimizers/learning_rate_schedules/cosine_decay/)." - ], - "id": "566264eadc76c2c" + ] }, { + "cell_type": "code", + "execution_count": 12, + "id": "e8d7e053", "metadata": { "ExecuteTime": { "end_time": "2024-09-23T14:39:53.433012Z", "start_time": "2024-09-23T14:39:53.415903Z" } }, - "cell_type": "code", + "outputs": [], "source": [ "learning_rate = 1e-4\n", "optimizer = keras.optimizers.Adam(learning_rate=learning_rate)" - ], - "id": "e8d7e053", - "outputs": [], - "execution_count": 12 + ] }, { + "cell_type": "code", + "execution_count": 13, + "id": "51808fcd560489ac", "metadata": { "ExecuteTime": { "end_time": "2024-09-23T14:39:53.476089Z", "start_time": "2024-09-23T14:39:53.466001Z" } }, - "cell_type": "code", - "source": "approximator.compile(optimizer=optimizer)", - "id": "51808fcd560489ac", "outputs": [], - "execution_count": 13 + "source": [ + "approximator.compile(optimizer=optimizer)" + ] }, { "cell_type": "markdown", @@ -388,13 +408,12 @@ "source": [ "### Training\n", "\n", - "We are ready to train our deep posterior approximator on the two moons example. We pass the simulator object to the `fit` method, which will generate training data on the fly (i.e., online training).\n", - "\n", - "Internally, BayesFlow creates a [keras PyDataset](https://keras.io/api/utils/python_utils/#pydataset-class) from your simulator object, which is then passed onto keras `fit` method. You can also create the dataset yourself using either the BayesFlow wrappers such as `bf.datasets.OnlineDataset` or write your own dataset class that inherits from `keras.utils.PyDataset`." + "We are ready to train our deep posterior approximator on the two moons example. We pass the dataset object to the `fit` method and watch as Bayesflow trains." ] }, { "cell_type": "code", + "execution_count": 14, "id": "0f496bda", "metadata": { "ExecuteTime": { @@ -402,13 +421,6 @@ "start_time": "2024-09-23T14:39:53.513436Z" } }, - "source": [ - "history = approximator.fit(\n", - " epochs=30,\n", - " dataset=training_dataset,\n", - " validation_data=validation_dataset,\n", - ")" - ], "outputs": [ { "name": "stderr", @@ -423,75 +435,83 @@ "output_type": "stream", "text": [ "Epoch 1/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 6ms/step - loss: 0.6938 - loss/inference_loss: 0.6938 - val_loss: 0.5508 - val_loss/inference_loss: 0.5508\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 6ms/step - loss: 0.6938 - loss/inference_loss: 0.6938 - val_loss: 0.5508 - val_loss/inference_loss: 0.5508\n", "Epoch 2/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.6250 - loss/inference_loss: 0.6250 - val_loss: 0.6023 - val_loss/inference_loss: 0.6023\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.6250 - loss/inference_loss: 0.6250 - val_loss: 0.6023 - val_loss/inference_loss: 0.6023\n", "Epoch 3/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.6056 - loss/inference_loss: 0.6056 - val_loss: 0.4454 - val_loss/inference_loss: 0.4454\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.6056 - loss/inference_loss: 0.6056 - val_loss: 0.4454 - val_loss/inference_loss: 0.4454\n", "Epoch 4/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.6006 - loss/inference_loss: 0.6006 - val_loss: 0.5079 - val_loss/inference_loss: 0.5079\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.6006 - loss/inference_loss: 0.6006 - val_loss: 0.5079 - val_loss/inference_loss: 0.5079\n", "Epoch 5/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.6020 - loss/inference_loss: 0.6020 - val_loss: 0.5414 - val_loss/inference_loss: 0.5414\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.6020 - loss/inference_loss: 0.6020 - val_loss: 0.5414 - val_loss/inference_loss: 0.5414\n", "Epoch 6/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5973 - loss/inference_loss: 0.5973 - val_loss: 0.6961 - val_loss/inference_loss: 0.6961\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.5973 - loss/inference_loss: 0.5973 - val_loss: 0.6961 - val_loss/inference_loss: 0.6961\n", "Epoch 7/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5874 - loss/inference_loss: 0.5874 - val_loss: 0.5399 - val_loss/inference_loss: 0.5399\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.5874 - loss/inference_loss: 0.5874 - val_loss: 0.5399 - val_loss/inference_loss: 0.5399\n", "Epoch 8/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5939 - loss/inference_loss: 0.5939 - val_loss: 0.4877 - val_loss/inference_loss: 0.4877\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.5939 - loss/inference_loss: 0.5939 - val_loss: 0.4877 - val_loss/inference_loss: 0.4877\n", "Epoch 9/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5841 - loss/inference_loss: 0.5841 - val_loss: 0.5115 - val_loss/inference_loss: 0.5115\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.5841 - loss/inference_loss: 0.5841 - val_loss: 0.5115 - val_loss/inference_loss: 0.5115\n", "Epoch 10/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5827 - loss/inference_loss: 0.5827 - val_loss: 0.5383 - val_loss/inference_loss: 0.5383\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.5827 - loss/inference_loss: 0.5827 - val_loss: 0.5383 - val_loss/inference_loss: 0.5383\n", "Epoch 11/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5807 - loss/inference_loss: 0.5807 - val_loss: 0.4411 - val_loss/inference_loss: 0.4411\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.5807 - loss/inference_loss: 0.5807 - val_loss: 0.4411 - val_loss/inference_loss: 0.4411\n", "Epoch 12/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5774 - loss/inference_loss: 0.5774 - val_loss: 0.5844 - val_loss/inference_loss: 0.5844\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.5774 - loss/inference_loss: 0.5774 - val_loss: 0.5844 - val_loss/inference_loss: 0.5844\n", "Epoch 13/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5813 - loss/inference_loss: 0.5813 - val_loss: 0.8106 - val_loss/inference_loss: 0.8106\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.5813 - loss/inference_loss: 0.5813 - val_loss: 0.8106 - val_loss/inference_loss: 0.8106\n", "Epoch 14/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 5ms/step - loss: 0.5756 - loss/inference_loss: 0.5756 - val_loss: 0.4150 - val_loss/inference_loss: 0.4150\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 5ms/step - loss: 0.5756 - loss/inference_loss: 0.5756 - val_loss: 0.4150 - val_loss/inference_loss: 0.4150\n", "Epoch 15/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m6s\u001B[0m 5ms/step - loss: 0.5761 - loss/inference_loss: 0.5761 - val_loss: 0.5451 - val_loss/inference_loss: 0.5451\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 5ms/step - loss: 0.5761 - loss/inference_loss: 0.5761 - val_loss: 0.5451 - val_loss/inference_loss: 0.5451\n", "Epoch 16/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5747 - loss/inference_loss: 0.5747 - val_loss: 0.6248 - val_loss/inference_loss: 0.6248\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.5747 - loss/inference_loss: 0.5747 - val_loss: 0.6248 - val_loss/inference_loss: 0.6248\n", "Epoch 17/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5666 - loss/inference_loss: 0.5666 - val_loss: 0.4689 - val_loss/inference_loss: 0.4689\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.5666 - loss/inference_loss: 0.5666 - val_loss: 0.4689 - val_loss/inference_loss: 0.4689\n", "Epoch 18/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5705 - loss/inference_loss: 0.5705 - val_loss: 0.3853 - val_loss/inference_loss: 0.3853\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.5705 - loss/inference_loss: 0.5705 - val_loss: 0.3853 - val_loss/inference_loss: 0.3853\n", "Epoch 19/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5739 - loss/inference_loss: 0.5739 - val_loss: 0.5055 - val_loss/inference_loss: 0.5055\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.5739 - loss/inference_loss: 0.5739 - val_loss: 0.5055 - val_loss/inference_loss: 0.5055\n", "Epoch 20/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5688 - loss/inference_loss: 0.5688 - val_loss: 0.5032 - val_loss/inference_loss: 0.5032\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.5688 - loss/inference_loss: 0.5688 - val_loss: 0.5032 - val_loss/inference_loss: 0.5032\n", "Epoch 21/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5663 - loss/inference_loss: 0.5663 - val_loss: 0.5237 - val_loss/inference_loss: 0.5237\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.5663 - loss/inference_loss: 0.5663 - val_loss: 0.5237 - val_loss/inference_loss: 0.5237\n", "Epoch 22/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5650 - loss/inference_loss: 0.5650 - val_loss: 0.3955 - val_loss/inference_loss: 0.3955\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.5650 - loss/inference_loss: 0.5650 - val_loss: 0.3955 - val_loss/inference_loss: 0.3955\n", "Epoch 23/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5666 - loss/inference_loss: 0.5666 - val_loss: 0.7317 - val_loss/inference_loss: 0.7317\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.5666 - loss/inference_loss: 0.5666 - val_loss: 0.7317 - val_loss/inference_loss: 0.7317\n", "Epoch 24/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5632 - loss/inference_loss: 0.5632 - val_loss: 0.6094 - val_loss/inference_loss: 0.6094\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.5632 - loss/inference_loss: 0.5632 - val_loss: 0.6094 - val_loss/inference_loss: 0.6094\n", "Epoch 25/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5701 - loss/inference_loss: 0.5701 - val_loss: 0.5721 - val_loss/inference_loss: 0.5721\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.5701 - loss/inference_loss: 0.5701 - val_loss: 0.5721 - val_loss/inference_loss: 0.5721\n", "Epoch 26/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5711 - loss/inference_loss: 0.5711 - val_loss: 0.6184 - val_loss/inference_loss: 0.6184\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.5711 - loss/inference_loss: 0.5711 - val_loss: 0.6184 - val_loss/inference_loss: 0.6184\n", "Epoch 27/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5672 - loss/inference_loss: 0.5672 - val_loss: 0.6326 - val_loss/inference_loss: 0.6326\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.5672 - loss/inference_loss: 0.5672 - val_loss: 0.6326 - val_loss/inference_loss: 0.6326\n", "Epoch 28/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5585 - loss/inference_loss: 0.5585 - val_loss: 0.6209 - val_loss/inference_loss: 0.6209\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.5585 - loss/inference_loss: 0.5585 - val_loss: 0.6209 - val_loss/inference_loss: 0.6209\n", "Epoch 29/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5594 - loss/inference_loss: 0.5594 - val_loss: 0.5672 - val_loss/inference_loss: 0.5672\n", + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.5594 - loss/inference_loss: 0.5594 - val_loss: 0.5672 - val_loss/inference_loss: 0.5672\n", "Epoch 30/30\n", - "\u001B[1m1024/1024\u001B[0m \u001B[32m━━━━━━━━━━━━━━━━━━━━\u001B[0m\u001B[37m\u001B[0m \u001B[1m5s\u001B[0m 5ms/step - loss: 0.5597 - loss/inference_loss: 0.5597 - val_loss: 0.4648 - val_loss/inference_loss: 0.4648\n" + "\u001b[1m1024/1024\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.5597 - loss/inference_loss: 0.5597 - val_loss: 0.4648 - val_loss/inference_loss: 0.4648\n" ] } ], - "execution_count": 14 + "source": [ + "history = approximator.fit(\n", + " epochs=30,\n", + " dataset=training_dataset,\n", + " validation_data=validation_dataset,\n", + ")" + ] }, { "cell_type": "markdown", "id": "b90a6062", "metadata": {}, - "source": "## Validation" + "source": [ + "## Validation" + ] }, { "cell_type": "markdown", @@ -506,6 +526,7 @@ }, { "cell_type": "code", + "execution_count": 15, "id": "8562caeb", "metadata": { "ExecuteTime": { @@ -513,26 +534,6 @@ "start_time": "2024-09-23T14:42:36.076923Z" } }, - "source": [ - "# Set the number of posterior draws you want to get\n", - "num_samples = 5000\n", - "\n", - "# Obtain samples from amortized posterior\n", - "conditions = {\"x\": np.array([[0.0, 0.0]])}\n", - "samples_at_origin = approximator.sample(conditions=conditions, num_samples=num_samples)[\"theta\"]\n", - "\n", - "# Prepare figure\n", - "f, axes = plt.subplots(1, figsize=(6, 6))\n", - "\n", - "# Plot samples\n", - "axes.scatter(samples_at_origin[0, :, 0], samples_at_origin[0, :, 1], color=\"#153c7a\", alpha=0.75, s=0.5)\n", - "sns.despine(ax=axes)\n", - "axes.set_title(r\"Posterior samples at origin $x=(0, 0)$\")\n", - "axes.grid(alpha=0.3)\n", - "axes.set_aspect(\"equal\", adjustable=\"box\")\n", - "axes.set_xlim([-0.5, 0.5])\n", - "axes.set_ylim([-0.5, 0.5])" - ], "outputs": [ { "data": { @@ -546,16 +547,35 @@ }, { "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAg0AAAIQCAYAAAACUF3RAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAACNeUlEQVR4nOz9d3xc1bn3f3/2FLVRL7YsXHCVcS8EAzZFJpRQTEuIIScQ4E5OwpOQAElIQk7u/JIQUsCEkNupQEwOJYRiRG8WxTbYCZa7JaxiFWRZvY2kqfv5YzTb6h7ZlmzZ3/frdY7t0S5rlobsa9a61rUM0zRNRERERA7BdqwbICIiIqODggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGGdDzzz9Pdna29X+zZs3i3HPP5Yc//CEHDhw46vfbsmULDz/8MC0tLUf92nDw/VRWVg7L9U8Ex3MfDffnoz9H0h/Hc18erj/84Q9ceumlBINB6zW32829997LsmXLmDt3LldeeSWvvPLKYV0/0mv961//4pxzzqG9vf2w34scHgUNckj33Xcf//znP3n00Ue57rrrePnll7nhhhuO+n+w+fn5/OEPfxi2h8L555/PP//5T8aMGTMs15fhNdyfj/4cyWfmRPu8HThwgEceeYTbb78dm+3go+Nb3/oWa9eu5Zvf/CZ//etfmTt3LnfeeScvvfTSkO8R6bWuvvpq4uLi+Nvf/nbE70uGxnGsGyDHv+nTpzN37lwAzjzzTAKBAKtXr+btt99mxYoVx7h1h9bR0UFsbCypqamkpqYe9evKiedofGaO9uftWHv88cdJSEjgoosusl5777332LBhAw888ACXX345EPrfiKqqKn7zm99w6aWXYrfbI7r+UK7lcDj44he/yOrVq/nqV7+q/w5HkEYaZMgWLFgAQFVVlfXaf/7zH2666SYWLlzI/PnzWblyJe+++26P8xoaGvif//kfzjvvPObMmcOZZ57JypUr2bhxIw8//DC/+c1vALjgggusKZFNmzZZ5+/bt4+77rqLs846izlz5vC5z32OJ554osc9Hn74YbKzs9m1axe33347n/nMZ7jwwguBgYeLI2n7YNftz2DvNaysrIwf/vCHXHTRRcyfP59zzjmHr3/96xQWFvZ774KCAm6//XYWL17MGWecwX333Yff76ekpIRbb72VhQsXsnz5cv7617/2e/7u3bv55je/yaJFi1i8eDHf/e53aWhoGPA9DKXfI33P/YmkHyL5fPTnSH+3/X1m3n77ba644grmzJnDBRdcwJo1a6xrdNffueHj9u7dy5133snixYs5++yz+eEPf0hra+ug76WmpoaFCxdyxx139Hg9Ly+P2bNn8+CDDw56/pHwer08++yzXH755T1GGd566y3i4uK45JJLehx/zTXXUFNTw7Zt2yK+x1CvdcUVV9DW1nbYUyFyeDTSIENWVlYGYH2L2rx5M7fccgszZszg3nvvJSoqiqeeeoqvf/3rrFq1iksvvRSA733ve+zevZs77riDU089lZaWFnbv3k1TUxNf+MIXaG5u5h//+Ad/+MMfyMjIAGDatGkAFBUVsXLlSsaNG8fdd99NRkYG69ev5xe/+AWNjY1885vf7NHGb33rW1x66aWsXLly0GmUSNs+1OsO9l7DampqSE5O5q677iI1NZXm5mZeeOEFrrvuOl544QWmTJnS45rf+c53WLFiBStXrmTDhg387W9/w+/3s3HjRm644QZuvfVWXnrpJe6//34mTZrU4xshwDe/+U0uueQSVq5cSVFREQ899BDFxcU888wzOJ3Oft/HUPo9kvfcn0j64VCfj/4Mx+/2/fff51vf+hann346v/vd7/D7/Tz66KPU1dUN+h57C9/r85//PJ988gkPPPAAEJoKHMiYMWO49dZb+cMf/sCtt97KnDlz2LRpE9/+9re5/vrr+wQTYaZpEggEImqXw9H/I2H79u00NTWxZMmSHq/v3buXqVOn9jkvHEDt3buXRYsWRXTvoV4rIyODKVOm8N577/H5z38+onvIUWCKDOC5554zZ8yYYW7dutX0+XxmW1ubmZeXZ5555pnmwoULzdraWtM0TfO6664zzzrrLLOtrc061+/3m5dffrl57rnnmsFg0DRN01ywYIF57733Dni/v/3tb+aMGTPMioqKPj+75ZZbzHPPPddsbW3t8frPfvYzc+7cuWZTU5Npmqb5+9//3pwxY4b50EMPDfh+ul8/0rYPdt3+HOq99sfv95ter9e86KKLzF/+8pfW6+F7P/rooz2Ov/LKK80ZM2aYb775pvWaz+czzzzzTPOb3/xmn/O7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Dz/8MA8//DBPPfUUhmGwfPlyfvSjHw06ghBpv0f6nvsTaT8M9vnoz3D8bs8991yrbd/5znfIyMjg+uuvp6amhtzc3MO65qHU1NRw8803k5aWxp///Gdr1GTq1Klce+21PP7441x//fWHNUUXqXHjxnH66afzzjvv8MUvfrHHzx5++GEefPBBfv/739PU1MSUKVNYtWoVl112WY/j3G430De35nCuBbBp0yZaW1v7JPjK8DJM0zSPdSNEZPg8/PDD/OEPf+DDDz88oSoUHi98Ph9XXXUVY8eO5dFHHz3WzRk2b7zxBnfccQd5eXk9cmMi9d577/Hf//3fvPjii30KYR2O733ve1RUVPD0008f8bUkcqoIKSIyBD/60Y945ZVX2Lx5M6+++iq33HILxcXFhxxRGe0uuugi5s6dy5///OfDOv+jjz7isssuOyoBQ3l5Oa+99hrf/e53j/haMjSanhARGQK3282vf/1rGhoacDqdzJo1i7/85S+cffbZx7ppw8owDH7+85+zbt06gsFgj3LSkbj77ruPWluqqqr4n//5H04//fSjdk2JjKYnREREJCKanhAREZGIKGgQERGRiChoEBERkYiccEGD2bUNrFI1REREjq4TLmgIBoNs3bqVYDB4rJsyZKZpWpviyPBTf48s9ffIU5+PrJOhv0+4oGG0G43Bzmim/h5Z6u+Rpz4fWSd6fytoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYiMSNDwxBNPsHz5cubOncs111zDf/7zn4jO+/jjj5k1axZXXnnlMLdQREREDmXYg4ZXX32V++67j2984xusXbuWxYsX89WvfpWqqqpBz2ttbeXuu+/mrLPOGu4mioiISASGPWh47LHHuPbaa/nCF77A1KlTueeee8jMzOSpp54a9Lyf/OQnXH755SxYsGC4mygiIiIRcAznxb1eL7t27eJrX/taj9eXLl1Kfn7+gOc999xzlJeX89vf/pY//vGPh3Vv0zQxTfOwzj1Wwm0ebe0erdTfI0v9PfLU5yNrNPe3YRgRHTesQUNjYyOBQIC0tLQer6enp1NbW9vvOfv27eOBBx7giSeewOE4/Oa1tLRgs42uPE/TNGlvbwci/wXK4VN/jyz198hTn4+s0dzfycnJER03rEFDWO/OM02z3w4NBALcddddfOtb32Ly5MlHdM/ExETsdvsRXWOkhaPTpKSkUfeBG43U3yNL/T3y1Ocj62To72ENGlJSUrDb7dTV1fV4vb6+nvT09D7Hu91udu7cyZ49e/j5z38OQDAYxDRNZs2axSOPPBJxYqRhGKPylxZu92hs+2ik/h5Z6u+Rpz4fWSd6fw9r0BAVFcXs2bPZsGEDF154ofX6xo0bueCCC/ocHx8fz0svvdTjtSeffJKPPvqI3//+94wfP344mysiIiKDGPbpiZtvvpnvf//7zJkzh4ULF/LPf/6T/fv3s3LlSgAeeOABDhw4wG9+8xtsNhszZszocX5aWhrR0dF9XhcREZGRNexBw6WXXkpjYyOrV6+mpqaGGTNm8Je//IVTTjkFgNraWvbv3z/czRAREZEjZJijcW3IIAKBAFu3bmXBggWjMhGyubn5hE6iOZ6ov0eW+nvkqc9H1snQ36NrTaKIiIgcMwoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkREjpGi8lpWrcmjqLz2WDdFJCIKGkREjrJIg4HcvJ08+crH5ObtHKGWiRwZx7FugIjIaFRUXktu3k5W5Mxh2sSMHj8LBwMAd96UM+A1VuTM6fGnyPFOQYOInFQG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RESGz+hakygiIiLHjIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIgob/f3v3EhJV/4cB/DGtlUZecJMtWjSBZo7NwvISqYQmmiRRiyAoqRwoMGQMkiQss8tUpOLC7DZkEZYIlpRELboQZYyWqYWRmZV5JScpG2d+/0V/fRsd7Yx5Zt5z3ucDbn7+jjznizLPnDnjEBERkSQsDURERCQJSwMRERFJwtJAREREkrA0EBERkSQsDURERCQJSwMRERFJwtJAREREkrA0EBERkSQsDURERCQJSwMRERFJ4uPpALNNCAEAsNlsHk7iOiEE7HY7bDYbvLy8PB1H9Thv9+K83Y8zdy+lz3vOnDl/zK260mC32wEAL1++9HASIiIi5dBqtfD29p52j5cYe2quEna7HaOjo5IaExEREf0i5XFTdaWBiIiI5MEbIYmIiEgSlgYiIiKShKWBiIiIJGFpICIiIklYGoiIiEgSlgYiIiKShKWBiIiIJGFpICIiIklYGjzo69evMBgM0Ol00Ol0MBgMGBoaknx8fn4+li5diosXL8oXUmVcnbnVasWJEyeQlpYGrVaL2NhY5Obm4suXL25MrRyVlZVISEhAeHg4MjIy0NDQMO3+p0+fIiMjA+Hh4UhMTMTVq1fdlFQ9XJl5fX09tm3bhpUrV2LFihXYvHkzHjx44Ma0yufq7/iY58+fIzQ0FOnp6TInlBdLgwfl5OSgra0NFRUVqKioQFtbG3JzcyUde/fuXTQ1NSE4OFjmlOri6sx//PiBlpYW6PV6VFdXo7S0FB0dHdDr9W5MrQx1dXUoKiqCXq9HTU0NdDodduzYgU+fPjnd/+HDB+zcuRM6nQ41NTXIyspCYWEh7ty54+bkyuXqzJ89e4bo6GiUl5ejuroaUVFR0Ov1aGlpcXNyZXJ13mMsFgv27duHVatWuSmpjAR5RHt7u9BoNKKxsXF8zWw2C41GI96+fTvtsd3d3SIuLk68efNGxMfHiwsXLsicVh3+Zua/a2pqEhqNRnz8+FGOmIq1ceNGkZ+f77CWnJwsjEaj0/3Hjx8XycnJDmsHDhwQmzZtki2j2rg6c2dSUlJESUnJbEdTpZnOOzs7W5w+fVoUFxeL9evXyxlRdrzS4CFmsxl+fn6IiIgYX9NqtfDz84PZbJ7yOLvdDoPBgMzMTCxZssQdUVVjpjOf6Nu3b/Dy8sL8+fPliKlIP3/+xKtXrxAbG+uwHhMTM+VsGxsbERMT47AWFxeH5uZmWK1W2bKqxUxmPpHdbsfw8DAWLFggQ0J1mem8b9y4gc7OTuzevVvuiG6huo/GVoq+vj4EBgZOWg8MDERfX9+Ux509exY+Pj7YunWrnPFUaaYz/93IyAiMRiNSU1Ph6+s72xEVa3BwEDabbdJ8g4KC0Nvb6/SYvr4+BAUFOawFBgZidHQUg4ODfOntD2Yy84nOnz+P79+/Y926dXJEVJWZzLujowMnT55EZWUlfHzU8XCrjrP4FykpKUFpaem0e65fvz7l94QQU340aXNzM0wmE6qrq/mx37+Rc+a/s1qt2Lt3L4QQOHjwoKsx/xMmzvFPs3W239k6Tc3VmY+5efMmSktLUVZW5rRMk3NS522z2ZCTk4M9e/Zg8eLF7oonO5aGWbZlyxakpKRMuyckJASvX79Gf3//pO8NDAxM+Qfc0NCA/v5+xMfHj6/ZbDYcO3YMJpMJ9+7d+7vwCiXnzMdYrVZkZ2ejq6sLly5d4lWGCfz9/eHt7T3pik1/f/+kqwljnD1DGxgYgI+PDy+XSzCTmY+pq6tDXl4ezpw5g+joaDljqoar8x4eHkZzczNaW1tx6NAhAL9eDhJCIDQ0FOfOnVPkjZEsDbMsICAAAQEBf9wXGRkJi8WCFy9eYPny5QCApqYmWCwWREZGOj0mPT190h94ZmYm0tPTkZGR8ffhFUrOmQP/FIb379/DZDLB399/1rKrxbx58xAWFoZHjx5h7dq14+uPHz9GYmKi02O0Wi3u37/vsPbw4UMsW7YMc+fOlTWvGsxk5sCvKwz79+/HqVOnsGbNGjckVQdX5+3r64va2lqHtStXruDJkycoLi5GSEiI7Jll4bl7MCkzM1OkpaUJs9kszGazSE1NFbt27XLYk5SUJOrr66f8GXz3hGtcnbnVahVZWVli9erVorW1VfT09Ix/jYyMeOIU/rVu3bolwsLCRFVVlWhvbxeFhYVCq9WKrq4uIYQQRqNRGAyG8f2dnZ0iIiJCHDlyRLS3t4uqqioRFhYmbt++7alTUBxXZ15bWytCQ0PF5cuXHX6Xh4aGPHUKiuLqvCdSw7sneKXBg4xGIw4fPozt27cDABISEpCfn++w5927d7BYLJ6Ip0quzry7u3v8ZZ+J/5TFZDIhKirKDamVISUlBYODgygrK0NPTw80Gg3Ky8uxcOFCAEBvby8+f/48vn/RokUoLy9HUVERKisrERwcjLy8PCQlJXnqFBTH1Zlfu3YNo6OjKCgoQEFBwfj6hg0bcPToUbfnVxpX561GXkL8/84jIiIiomnw/zQQERGRJCwNREREJAlLAxEREUnC0kBERESSsDQQERGRJCwNREREJAlLAxEREUnC0kBERESSsDQQERGRJCwNREREJAlLAxEREUnC0kBERESS/A8s4JnEnCTYGAAAAABJRU5ErkJggg==", "text/plain": [ "
" - ], - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAg0AAAIQCAYAAAACUF3RAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAACNeUlEQVR4nOz9d3xc1bn3f3/2FLVRL7YsXHCVcS8EAzZFJpRQTEuIIScQ4E5OwpOQAElIQk7u/JIQUsCEkNupQEwOJYRiRG8WxTbYCZa7JaxiFWRZvY2kqfv5YzTb6h7ZlmzZ3/frdY7t0S5rlobsa9a61rUM0zRNRERERA7BdqwbICIiIqODggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGGdDzzz9Pdna29X+zZs3i3HPP5Yc//CEHDhw46vfbsmULDz/8MC0tLUf92nDw/VRWVg7L9U8Ex3MfDffnoz9H0h/Hc18erj/84Q9ceumlBINB6zW32829997LsmXLmDt3LldeeSWvvPLKYV0/0mv961//4pxzzqG9vf2w34scHgUNckj33Xcf//znP3n00Ue57rrrePnll7nhhhuO+n+w+fn5/OEPfxi2h8L555/PP//5T8aMGTMs15fhNdyfj/4cyWfmRPu8HThwgEceeYTbb78dm+3go+Nb3/oWa9eu5Zvf/CZ//etfmTt3LnfeeScvvfTSkO8R6bWuvvpq4uLi+Nvf/nbE70uGxnGsGyDHv+nTpzN37lwAzjzzTAKBAKtXr+btt99mxYoVx7h1h9bR0UFsbCypqamkpqYe9evKiedofGaO9uftWHv88cdJSEjgoosusl5777332LBhAw888ACXX345EPrfiKqqKn7zm99w6aWXYrfbI7r+UK7lcDj44he/yOrVq/nqV7+q/w5HkEYaZMgWLFgAQFVVlfXaf/7zH2666SYWLlzI/PnzWblyJe+++26P8xoaGvif//kfzjvvPObMmcOZZ57JypUr2bhxIw8//DC/+c1vALjgggusKZFNmzZZ5+/bt4+77rqLs846izlz5vC5z32OJ554osc9Hn74YbKzs9m1axe33347n/nMZ7jwwguBgYeLI2n7YNftz2DvNaysrIwf/vCHXHTRRcyfP59zzjmHr3/96xQWFvZ774KCAm6//XYWL17MGWecwX333Yff76ekpIRbb72VhQsXsnz5cv7617/2e/7u3bv55je/yaJFi1i8eDHf/e53aWhoGPA9DKXfI33P/YmkHyL5fPTnSH+3/X1m3n77ba644grmzJnDBRdcwJo1a6xrdNffueHj9u7dy5133snixYs5++yz+eEPf0hra+ug76WmpoaFCxdyxx139Hg9Ly+P2bNn8+CDDw56/pHwer08++yzXH755T1GGd566y3i4uK45JJLehx/zTXXUFNTw7Zt2yK+x1CvdcUVV9DW1nbYUyFyeDTSIENWVlYGYH2L2rx5M7fccgszZszg3nvvJSoqiqeeeoqvf/3rrFq1iksvvRSA733ve+zevZs77riDU089lZaWFnbv3k1TUxNf+MIXaG5u5h//+Ad/+MMfyMjIAGDatGkAFBUVsXLlSsaNG8fdd99NRkYG69ev5xe/+AWNjY1885vf7NHGb33rW1x66aWsXLly0GmUSNs+1OsO9l7DampqSE5O5q677iI1NZXm5mZeeOEFrrvuOl544QWmTJnS45rf+c53WLFiBStXrmTDhg387W9/w+/3s3HjRm644QZuvfVWXnrpJe6//34mTZrU4xshwDe/+U0uueQSVq5cSVFREQ899BDFxcU888wzOJ3Oft/HUPo9kvfcn0j64VCfj/4Mx+/2/fff51vf+hann346v/vd7/D7/Tz66KPU1dUN+h57C9/r85//PJ988gkPPPAAEJoKHMiYMWO49dZb+cMf/sCtt97KnDlz2LRpE9/+9re5/vrr+wQTYaZpEggEImqXw9H/I2H79u00NTWxZMmSHq/v3buXqVOn9jkvHEDt3buXRYsWRXTvoV4rIyODKVOm8N577/H5z38+onvIUWCKDOC5554zZ8yYYW7dutX0+XxmW1ubmZeXZ5555pnmwoULzdraWtM0TfO6664zzzrrLLOtrc061+/3m5dffrl57rnnmsFg0DRN01ywYIF57733Dni/v/3tb+aMGTPMioqKPj+75ZZbzHPPPddsbW3t8frPfvYzc+7cuWZTU5Npmqb5+9//3pwxY4b50EMPDfh+ul8/0rYPdt3+HOq99sfv95ter9e86KKLzF/+8pfW6+F7P/rooz2Ov/LKK80ZM2aYb775pvWaz+czzzzzTPOb3/xmn/O7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Dz/8MA8//DBPPfUUhmGwfPlyfvSjHw06ghBpv0f6nvsTaT8M9vnoz3D8bs8991yrbd/5znfIyMjg+uuvp6amhtzc3MO65qHU1NRw8803k5aWxp///Gdr1GTq1Klce+21PP7441x//fWHNUUXqXHjxnH66afzzjvv8MUvfrHHzx5++GEefPBBfv/739PU1MSUKVNYtWoVl112WY/j3G430De35nCuBbBp0yZaW1v7JPjK8DJM0zSPdSNEZPg8/PDD/OEPf+DDDz88oSoUHi98Ph9XXXUVY8eO5dFHHz3WzRk2b7zxBnfccQd5eXk9cmMi9d577/Hf//3fvPjii30KYR2O733ve1RUVPD0008f8bUkcqoIKSIyBD/60Y945ZVX2Lx5M6+++iq33HILxcXFhxxRGe0uuugi5s6dy5///OfDOv+jjz7isssuOyoBQ3l5Oa+99hrf/e53j/haMjSanhARGQK3282vf/1rGhoacDqdzJo1i7/85S+cffbZx7ppw8owDH7+85+zbt06gsFgj3LSkbj77ruPWluqqqr4n//5H04//fSjdk2JjKYnREREJCKanhAREZGIKGgQERGRiChoEBERkYiccEGD2bUNrFI1REREjq4TLmgIBoNs3bqVYDB4rJsyZKZpWpviyPBTf48s9ffIU5+PrJOhv0+4oGG0G43Bzmim/h5Z6u+Rpz4fWSd6fytoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYgoaBAREZGIKGgQERGRiChoEBERkYiMSNDwxBNPsHz5cubOncs111zDf/7zn4jO+/jjj5k1axZXXnnlMLdQREREDmXYg4ZXX32V++67j2984xusXbuWxYsX89WvfpWqqqpBz2ttbeXuu+/mrLPOGu4mioiISASGPWh47LHHuPbaa/nCF77A1KlTueeee8jMzOSpp54a9Lyf/OQnXH755SxYsGC4mygiIiIRcAznxb1eL7t27eJrX/taj9eXLl1Kfn7+gOc999xzlJeX89vf/pY//vGPh3Vv0zQxTfOwzj1Wwm0ebe0erdTfI0v9PfLU5yNrNPe3YRgRHTesQUNjYyOBQIC0tLQer6enp1NbW9vvOfv27eOBBx7giSeewOE4/Oa1tLRgs42uPE/TNGlvbwci/wXK4VN/jyz198hTn4+s0dzfycnJER03rEFDWO/OM02z3w4NBALcddddfOtb32Ly5MlHdM/ExETsdvsRXWOkhaPTpKSkUfeBG43U3yNL/T3y1Ocj62To72ENGlJSUrDb7dTV1fV4vb6+nvT09D7Hu91udu7cyZ49e/j5z38OQDAYxDRNZs2axSOPPBJxYqRhGKPylxZu92hs+2ik/h5Z6u+Rpz4fWSd6fw9r0BAVFcXs2bPZsGEDF154ofX6xo0bueCCC/ocHx8fz0svvdTjtSeffJKPPvqI3//+94wfP344mysiIiKDGPbpiZtvvpnvf//7zJkzh4ULF/LPf/6T/fv3s3LlSgAeeOABDhw4wG9+8xtsNhszZszocX5aWhrR0dF9XhcREZGRNexBw6WXXkpjYyOrV6+mpqaGGTNm8Je//IVTTjkFgNraWvbv3z/czRAREZEjZJijcW3IIAKBAFu3bmXBggWjMhGyubn5hE6iOZ6ov0eW+nvkqc9H1snQ36NrTaKIiIgcMwoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkRERCQiChpEREQkIgoaREREJCIKGkREjpGi8lpWrcmjqLz2WDdFJCIKGkREjrJIg4HcvJ08+crH5ObtHKGWiRwZx7FugIjIaFRUXktu3k5W5Mxh2sSMHj8LBwMAd96UM+A1VuTM6fGnyPFOQYOInFQG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RESGz+hakygiIiLHjIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIggYRERGJiIIGERERiYiCBhEREYmIgob/f3v3EhJV/4cB/DGtlUZecJMtWjSBZo7NwvISqYQmmiRRiyAoqRwoMGQMkiQss8tUpOLC7DZkEZYIlpRELboQZYyWqYWRmZV5JScpG2d+/0V/fRsd7Yx5Zt5z3ucDbn7+jjznizLPnDnjEBERkSQsDURERCQJSwMRERFJwtJAREREkrA0EBERkSQsDURERCQJSwMRERFJwtJAREREkrA0EBERkSQsDURERCQJSwMRERFJ4uPpALNNCAEAsNlsHk7iOiEE7HY7bDYbvLy8PB1H9Thv9+K83Y8zdy+lz3vOnDl/zK260mC32wEAL1++9HASIiIi5dBqtfD29p52j5cYe2quEna7HaOjo5IaExEREf0i5XFTdaWBiIiI5MEbIYmIiEgSlgYiIiKShKWBiIiIJGFpICIiIklYGoiIiEgSlgYiIiKShKWBiIiIJGFpICIiIklYGjzo69evMBgM0Ol00Ol0MBgMGBoaknx8fn4+li5diosXL8oXUmVcnbnVasWJEyeQlpYGrVaL2NhY5Obm4suXL25MrRyVlZVISEhAeHg4MjIy0NDQMO3+p0+fIiMjA+Hh4UhMTMTVq1fdlFQ9XJl5fX09tm3bhpUrV2LFihXYvHkzHjx44Ma0yufq7/iY58+fIzQ0FOnp6TInlBdLgwfl5OSgra0NFRUVqKioQFtbG3JzcyUde/fuXTQ1NSE4OFjmlOri6sx//PiBlpYW6PV6VFdXo7S0FB0dHdDr9W5MrQx1dXUoKiqCXq9HTU0NdDodduzYgU+fPjnd/+HDB+zcuRM6nQ41NTXIyspCYWEh7ty54+bkyuXqzJ89e4bo6GiUl5ejuroaUVFR0Ov1aGlpcXNyZXJ13mMsFgv27duHVatWuSmpjAR5RHt7u9BoNKKxsXF8zWw2C41GI96+fTvtsd3d3SIuLk68efNGxMfHiwsXLsicVh3+Zua/a2pqEhqNRnz8+FGOmIq1ceNGkZ+f77CWnJwsjEaj0/3Hjx8XycnJDmsHDhwQmzZtki2j2rg6c2dSUlJESUnJbEdTpZnOOzs7W5w+fVoUFxeL9evXyxlRdrzS4CFmsxl+fn6IiIgYX9NqtfDz84PZbJ7yOLvdDoPBgMzMTCxZssQdUVVjpjOf6Nu3b/Dy8sL8+fPliKlIP3/+xKtXrxAbG+uwHhMTM+VsGxsbERMT47AWFxeH5uZmWK1W2bKqxUxmPpHdbsfw8DAWLFggQ0J1mem8b9y4gc7OTuzevVvuiG6huo/GVoq+vj4EBgZOWg8MDERfX9+Ux509exY+Pj7YunWrnPFUaaYz/93IyAiMRiNSU1Ph6+s72xEVa3BwEDabbdJ8g4KC0Nvb6/SYvr4+BAUFOawFBgZidHQUg4ODfOntD2Yy84nOnz+P79+/Y926dXJEVJWZzLujowMnT55EZWUlfHzU8XCrjrP4FykpKUFpaem0e65fvz7l94QQU340aXNzM0wmE6qrq/mx37+Rc+a/s1qt2Lt3L4QQOHjwoKsx/xMmzvFPs3W239k6Tc3VmY+5efMmSktLUVZW5rRMk3NS522z2ZCTk4M9e/Zg8eLF7oonO5aGWbZlyxakpKRMuyckJASvX79Gf3//pO8NDAxM+Qfc0NCA/v5+xMfHj6/ZbDYcO3YMJpMJ9+7d+7vwCiXnzMdYrVZkZ2ejq6sLly5d4lWGCfz9/eHt7T3pik1/f/+kqwljnD1DGxgYgI+PDy+XSzCTmY+pq6tDXl4ezpw5g+joaDljqoar8x4eHkZzczNaW1tx6NAhAL9eDhJCIDQ0FOfOnVPkjZEsDbMsICAAAQEBf9wXGRkJi8WCFy9eYPny5QCApqYmWCwWREZGOj0mPT190h94ZmYm0tPTkZGR8ffhFUrOmQP/FIb379/DZDLB399/1rKrxbx58xAWFoZHjx5h7dq14+uPHz9GYmKi02O0Wi3u37/vsPbw4UMsW7YMc+fOlTWvGsxk5sCvKwz79+/HqVOnsGbNGjckVQdX5+3r64va2lqHtStXruDJkycoLi5GSEiI7Jll4bl7MCkzM1OkpaUJs9kszGazSE1NFbt27XLYk5SUJOrr66f8GXz3hGtcnbnVahVZWVli9erVorW1VfT09Ix/jYyMeOIU/rVu3bolwsLCRFVVlWhvbxeFhYVCq9WKrq4uIYQQRqNRGAyG8f2dnZ0iIiJCHDlyRLS3t4uqqioRFhYmbt++7alTUBxXZ15bWytCQ0PF5cuXHX6Xh4aGPHUKiuLqvCdSw7sneKXBg4xGIw4fPozt27cDABISEpCfn++w5927d7BYLJ6Ip0quzry7u3v8ZZ+J/5TFZDIhKirKDamVISUlBYODgygrK0NPTw80Gg3Ky8uxcOFCAEBvby8+f/48vn/RokUoLy9HUVERKisrERwcjLy8PCQlJXnqFBTH1Zlfu3YNo6OjKCgoQEFBwfj6hg0bcPToUbfnVxpX561GXkL8/84jIiIiomnw/zQQERGRJCwNREREJAlLAxEREUnC0kBERESSsDQQERGRJCwNREREJAlLAxEREUnC0kBERESSsDQQERGRJCwNREREJAlLAxEREUnC0kBERESS/A8s4JnEnCTYGAAAAABJRU5ErkJggg==" + ] }, "metadata": {}, "output_type": "display_data" } ], - "execution_count": 15 + "source": [ + "# Set the number of posterior draws you want to get\n", + "num_samples = 5000\n", + "\n", + "# Obtain samples from amortized posterior\n", + "conditions = {\"x\": np.array([[0.0, 0.0]]).astype(\"float32\")}\n", + "samples_at_origin = approximator.sample(conditions=conditions, num_samples=num_samples)[\"theta\"]\n", + "\n", + "# Prepare figure\n", + "f, axes = plt.subplots(1, figsize=(6, 6))\n", + "\n", + "# Plot samples\n", + "axes.scatter(samples_at_origin[0, :, 0], samples_at_origin[0, :, 1], color=\"#153c7a\", alpha=0.75, s=0.5)\n", + "sns.despine(ax=axes)\n", + "axes.set_title(r\"Posterior samples at origin $x=(0, 0)$\")\n", + "axes.grid(alpha=0.3)\n", + "axes.set_aspect(\"equal\", adjustable=\"box\")\n", + "axes.set_xlim([-0.5, 0.5])\n", + "axes.set_ylim([-0.5, 0.5])" + ] }, { "cell_type": "markdown", @@ -571,6 +591,7 @@ }, { "cell_type": "code", + "execution_count": 16, "id": "f76289b3", "metadata": { "ExecuteTime": { @@ -578,11 +599,10 @@ "start_time": "2024-09-23T14:42:38.593542Z" } }, + "outputs": [], "source": [ "# Will be added soon." - ], - "outputs": [], - "execution_count": 16 + ] }, { "cell_type": "markdown", @@ -594,6 +614,7 @@ }, { "cell_type": "code", + "execution_count": 17, "id": "89dcb727", "metadata": { "ExecuteTime": { @@ -601,11 +622,10 @@ "start_time": "2024-09-23T14:42:38.637439Z" } }, + "outputs": [], "source": [ "# Will be added soon." - ], - "outputs": [], - "execution_count": 17 + ] } ], "metadata": {