first version of DGN example

This commit is contained in:
N_T committed 2025-01-27 14:12:26 +08:00
1 parent 60dd9aa3bc
commit 458934b3c8
2 files changed
+342 -421

No files matched your search

+1
View File
@@ -43,6 +43,7 @@ parts:
- file: probmodels-time.ipynb
- file: probmodels-uncond.md
- file: probmodels-graph.md
- file: probmodels-graph-ellipse.ipynb
- caption: Reinforcement Learning
chapters:
- file: reinflearn-intro.md
+341 -421
View File
@@ -4,9 +4,38 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"# Test the sample and distributional accuracy of the GNN-based probabilistic models\n",
"Distributional Accuracy of Diffusion Graph Nets\n",
"-----------------------------------------------\n",
"\n",
"!!! cube1 version, modified !!!"
"The following notebook shows how to run and evaluate trained diffusion graph net models (DGNs). It also evaluates the accuracy of the inferred distributions in comparison to popular baselines. In the experiments here, the training trajectories are intentionally short. Specifically, the trajectories are too short to cover one full oscillation period, meaning they do not explicitly provide full statistical information about the systems. \n",
"\n",
"```{admonition} Learning with Partial Statistics\n",
":class: tip\n",
"The key point to demonstrate below is the following: the diffusion training manages to learn complete statistics by combining the information _across multiple_ initial conditions and geometries. This is a very powerful capability that sets it apart from other Bayesian learning methods.\n",
"```\n",
"\n",
"The `Ellipse` task used below involves a canonical fluid dynamics problem of predicting pressure $p$ field around an elliptical cylinder. It makes use of the graph-based representation by focusing solely on the surface of the immersed object, as shown below. This helps to reduce dimensionality, and as we'll focus on using pretrained models, it makes this notebook easy to run.\n",
"\n",
"```{figure} resources/probmodels-graph-ellipse.jpg\n",
"---\n",
"height: 200px\n",
"name: probmodels-graph-ellipse\n",
"---\n",
"The `Ellipse` tasks focuses on predicting samples from the pressure distribution on the surface of a elliptical obstacle immersed in a fluid. The trained models should directly predict samples on the surface, without resolving the far field or the initial transient phase of the flow.\n",
"```\n",
"It's important to keep in mind that we don't resolve the full flow of time with this method (this was the task in {doc}`probmodels-time`). Rather, the goal is to very efficiently obtain samples from the equilibrium state of the simulation, as prescribed by the trianing data, not to resolve the evolution of an initial condition over time. A consequence is that trained models work on a graph that describes the geometry of the ellipse, but they are agnostic to time. They simply produce _one_ sample of the distribution of states of time. \n",
"\n",
"This in turn makes it more difficult to evaluate how closely a computed sample aligns with the ground truth: we don't know which sample out of the full distribution was generated! Thus, for a good test evaluation, it's important to have a densely sampled ground truth distribution, and for each sample inferred by a trained network, we'll search for the closest one in the test data set for the chosen input geometry. This can leave a small \"discretization error\" due to the discrete samples in the test set. It will nonetheless provide a good estimate of the distributional accuracy when enough samples are used on both sides, in terms of the test set itself, and the model outputs.\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Implementation\n",
"\n",
"The following notebook uses the `dgn4cfd` [code](https://github.com/tum-pbs/dgn4cfd/), and hence we'll import some basic libraries and clone the `dgn4cfd` repo below. \n"
]
},
{
@@ -18,9 +47,9 @@
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import torch, tqdm\n",
"from torchvision import transforms\n",
"import matplotlib.pyplot as plt\n",
"device = torch.device('cuda:0')"
]
},
@@ -42,33 +71,20 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Settings:\n",
"moved down\n",
"TimeEllipseInDist: This dataset contains the length of each simulation in DATASET. This length is a multiple of the vortex-shedding period."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"metadata": {}
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Load the models:\n",
"To keep runtimes of this notebook low, we'll simply load pre-trained models from the repository. We'll compare the following variants:\n",
"- Diffusion Graph Net (DGN)\n",
"- Latent Diffusion Graph Net (LDGN)\n",
"- DGN (same as above) trained with Flow-Matching (FM-DGN)\n",
"- LDGN with Flow-Matching (FM-LDGN)\n",
"The last two show the advantages of the faster flow matching-based inference for the DGNs. Otherwise they're identical to the regular DGN/LDGN versions which use DDPM as underlying diffusion model.\n",
"\n",
"We'll also load and evaluate a few baseline models, first of all a regular graph net with the same architecture as the DGN versions above. It already contains all the architectural tweaks, such as a hierarchy, but can show how much we gain (or loose) just by switching the regular, supervised training with a diffusion modeling process. Naturally, the vanilla Grap Net is fully deterministic, and can't provide a full distribution.\n",
"- Vanilla Graph Net\n",
"- Bayesian Graph Net\n",
"- Gaussian Mixure Graph Net\n",
"- Variational Graph Autoencoder (VGAE)\n",
"- Flow-Matching Graph Net (FMGN)\n",
"- Latent Flow-Matching Graph Net (LFMGN)"
"\n",
"The last three baselines are probabilistic models, and as such they compete more directly with DGN: one would hope that they can likewise learn the posterior from the training data. As we'll see, DGN outperforms these baselines quite clearly.\n"
]
},
{
@@ -134,7 +150,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Define some plotting functions"
"As a next step, we need a test dataset to evaluate our models with. The `dgn4cfd` codebase contains several test and training data sets, but we'll use the `pOnEllipseInDist` dataset which contains partial distributions (similar to the training data), but with unseen conditions. We'll also load the `TimeEllipseInDist` dataset, which contains more samples and will provide a ground truth distribution for the evaluation.\n",
"\n",
"The `transform` object configures the input geometries and meshes. In this example we'll use a hierarchy with 3 coarsened graph levels.\n"
]
},
{
@@ -143,75 +161,12 @@
"metadata": {
"metadata": {}
},
"outputs": [],
"source": [
"def plot(pos, target, pred, r2):\n",
" pos = pos.cpu()\n",
" target = target.cpu()\n",
" pred = pred.cpu()\n",
" # Plots\n",
" top = pos[:, 1] >= 0.5\n",
" bottom = torch.logical_not(top)\n",
" plt.plot(pos[top , 0].cpu(), target[top ].cpu(), 'k^', label='g.t. top wall')\n",
" plt.plot(pos[bottom, 0].cpu(), target[bottom].cpu(), 'kv', label='g.t. bottom wall')\n",
" plt.plot(pos[top, 0].cpu(), pred [top ].cpu(), 'b^', label='pred. top wall', alpha=0.4)\n",
" plt.plot(pos[bottom, 0].cpu(), pred [bottom].cpu(), 'bv', label='pred. bottom wall', alpha=0.4)\n",
" plt.title(r'Pressure on the ellipse wall ($R^2$ = ' + f\"{r2:.4f}\" + r')', fontsize=16)\n",
" plt.ylabel(r'$p$', fontsize=16)\n",
" plt.xlabel(r'$x$', fontsize=16)\n",
" plt.grid()\n",
" plt.legend(fontsize=16)\n",
" plt.show()\n",
"\n",
"\n",
"from scipy.stats import gaussian_kde\n",
"\n",
"def pdf(pos, pred, title, vmin=None, vmax=None, w2_distance_1d=None, w2_distance_nd=None):\n",
" pos = pos.cpu()\n",
" ang = torch.atan2(pos[:,1], pos[:,0])\n",
" idx = torch.argsort(ang)\n",
" idx = idx[ang[idx] > 0]\n",
" y = pred[idx].cpu().numpy()\n",
" if vmin is None:\n",
" vmin = y.min() - 0.1\n",
" if vmax is None:\n",
" vmax = y.max() + 0.1\n",
" x = np.linspace(vmin, vmax, 1000)\n",
" f = np.stack([gaussian_kde(y[i])(x) for i in range(y.shape[0])])\n",
" f = f / f.max(axis=1)[:,None]\n",
"\n",
" plt.figure(figsize=(4, 5))\n",
" plt.imshow(np.flip(f.T), aspect='auto', cmap='binary')\n",
" plt.yticks(np.linspace(100, 900, 5), np.flip(np.round(x[np.linspace(100, 900, 5).astype(int)], 2)))\n",
" plt.xticks([])\n",
" plt.yticks(fontsize=16)\n",
" plt.title(title, fontsize=28)\n",
" # Add a label with the Wasserstein-2 distance. It must be black with a white background and located on the top right corner and black border\n",
" if w2_distance_1d is not None and w2_distance_nd is not None:\n",
" plt.text(0.2, 0.76, r'$W_2^\\mathregular{node}$' + f' = {w2_distance_1d:.4f} \\n' + r'$W_2^\\mathregular{graph}$' + f' = {w2_distance_nd:.4f}', fontsize=20, bbox=dict(facecolor='white', edgecolor='black', boxstyle='round,pad=0.2'), transform=plt.gca().transAxes)\n",
" plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Load a dataset"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"metadata": {}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Downloading dataset from https://huggingface.co/datasets/mariolinov/Ellipse/resolve/main/pOnEllipseInDist.h5...\n",
"Dataset downloaded.\n",
"Dataset already exists.\n",
"Number of samples: 50\n",
"Dataset already exists.\n"
]
@@ -219,9 +174,9 @@
],
"source": [
"DATASET = dgn.datasets.DatasetUrl.pOnEllipseInDist\n",
"TIME_DATASET = dgn.datasets.DatasetUrl.TimeEllipseInDist\n",
"NUM_DENOISING_STEPS = 50\n",
"TIME_DATASET = dgn.datasets.DatasetUrl.TimeEllipseInDist \n",
"\n",
"# Training dataset\n",
"transform = transforms.Compose([\n",
" dgn.transforms.MeshEllipse(), # Create a mesh on the ellipse\n",
" dgn.transforms.ScaleEdgeAttr(0.02), # Scale the relative position stored as `edge_attr`\n",
@@ -237,8 +192,7 @@
"])\n",
"dataset = dgn.datasets.pOnEllipse(\n",
" path = dgn.datasets.DatasetDownloader(DATASET).file_path,\n",
" T = 101,\n",
" transform = transform,\n",
" T = 101, transform = transform,\n",
")\n",
"print('Number of samples:', len(dataset))\n",
"\n",
@@ -250,147 +204,70 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## Sample Inference"
"The next cell defines a plotting function that shows the closest ground truth pressure distribution that was found in the reference data set in black next to the neural network outputs, shown in light red.\n",
"\n",
"The `SIM_IDX` variable chooses a specific flow condition from the test data set (feel free to try others)."
]
},
{
"cell_type": "code",
"execution_count": 7,
"execution_count": null,
"metadata": {
"metadata": {}
},
"outputs": [],
"source": [
"SIM_IDX = 25\n",
"\n",
"def plot(ax, pos, target, pred, r2, title):\n",
" pos = pos.cpu()\n",
" target = target.cpu()\n",
" pred = pred.cpu()\n",
" # Plots\n",
" top = pos[:, 1] >= 0.5\n",
" bottom = torch.logical_not(top)\n",
" ax.plot(pos[top , 0].cpu(), target[top ].cpu(), 'k^', label='g.t. top')\n",
" ax.plot(pos[bottom, 0].cpu(), target[bottom].cpu(), 'kv', label='g.t. bottom')\n",
" ax.plot(pos[top, 0].cpu(), pred [top ].cpu(), '^', color=\"red\", label='pred. top', alpha=0.6)\n",
" ax.plot(pos[bottom, 0].cpu(), pred [bottom].cpu(), 'v', color=\"red\", label='pred. bottom', alpha=0.6)\n",
" ax.set_title(title+r' ($R^2$ = ' + f\"{r2:.4f}\" + r')', fontsize=16)\n",
" ax.set_ylabel(r'$p$', fontsize=16)\n",
" ax.set_xlabel(r'$x$', fontsize=16)\n",
" ax.grid()\n",
" ax.legend(fontsize=16)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The next cell creates a 3x3 grid of graphs with the `plot()` function. The first row will contain the DGN models, and the vanilla GN. The next row will show flow-matching in direct comparison to the DDPM versions in the first row, while the last one will contain the outputs of the remaining three baseline."
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"DGN R2 = 0.9953 at t=34\n"
"DGN R2 = 0.9871 at t=31\n",
"LDGN R2 = 0.9987 at t=42\n",
"Vanilla Graph Net R2 = 0.9912 at t=6\n",
"Flow-Matching Graph Net R2 = 0.9970 at t=27\n",
"Latent Flow-Matching Graph Net R2 = 0.9985 at t=19\n",
"Bayesian Graph Net R2 = 0.9830 at t=67\n",
"Gaussian Mixture Graph Net R2 = 0.9690 at t=29\n",
"VGAE R2 = 0.9914 at t=55\n"
]
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"LDGN R2 = 0.9997 at t=60\n"
]
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Vanilla Graph Net R2 = 0.9912 at t=6\n"
]
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Bayesian Graph Net R2 = 0.9456 at t=44\n"
]
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gaussian Mixture Graph Net R2 = 0.9786 at t=77\n"
]
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"VGAE R2 = 0.9567 at t=5\n"
]
},
{
"data": {
"image/png": "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nSml1N13360AlZCQoLZt22b1SE9Pd7iuSl0JFsr72LBhg0P7f/311xWgunbtanedBx54QAFq9OjRDtf7qaeeUoCKjo62Wb5t2zZLXd98802Hz7lp06bqhx9+KLG/BQsWKED16NFDPf7440rTtBLbduvWTR09etSh+m/cuNESBKemppa67g033KAA9cknnzi078qSAKmG2QqQLl68qL7//nvVqlUrS6RedNCh+Un4/PPP29znDz/8YHkhFhQUlCg3GAyWb9L79u2zLB8+fLgCVGJiYpn1Ls+6SjknQHL2+Zbmk08+sbS9rW9S5m++vr6+Kicnx2Z9X3/99RLb5ebmKn9/fwWoY8eOOVQXpRwPkMp7TGe3XWX2VxUB0kMPPWSzntHR0QpQL7zwgmVZeZ7TVfGcs5UNys7OVu7u7qpfv37q0UcfVYBVAGwv61Qac1Dy1ltvlShzZoBkznr+/fffdteJj49XgLr33nstywoKCtT+/fvVnXfeqTw9PVVCQoLd7c31qkzgYrZw4UKr7KyjD3MWtyzmTGDv3r3trvPkk08qQMXHxztc7/Xr1yswZYltPXeLBkFz5syxKnv11VfVf//7X7V//36VkZGhzpw5o9asWaN69eqlAOXq6lqiHefOnWspA9TUqVPVwYMHVXp6ulq7dq265pprFKA6duzo0AUU5ouRHAkKzc/dhx9+uMx1nUECpBpW2gscUK1atVJ79+612sZclpSUZHOf999/v+VblT333XefAtR7771nWTZr1iwFqJ49e6pVq1aV+OAvqjzrKuWcAMnZ51uayZMnK0BNnz7dZrnRaFQNGjRQgPr5559t1tfeh0m3bt0UYDMbZo+jAVJ5j+nstqvM/qoiQLJ3JY352/zgwYMty8rznK6K55xSSrVo0UIB6q+//lJKKbV69WoFpqxW0d+VMj0HGzVqpDRNU2lpaSX2lZaWphYtWqQeffRR9a9//cvygW7+8CvabW/mrAApMzPT8j8oLZPTuHFju+99vr6+JbJ/dVlVBUhKKXXdddcpQIWGhqpvvvlGXbx4UR0+fFg98sgjStM0SzDz4osvOrQ/o9GobrzxRgWU6FqeM2eO5X80bty4EtsePXrUMgzh448/LvU46enpysvLSwFq5cqVZdbr5ZdfVoC6/fbbHTqPypIAqYaZ33h69+5teQObMmWKeuqpp9S3335r89up+clZ9HLOoszfhB15FO1OyMrKslxya/6GEB0draZPn16if7886yrlnADJ2edbmqFDhypAvfHGG3bXMY/pKP7t3Xwse/3w/fr1K/c3XEcDpPIe09ltV5n9VUWAdPHiRZv1NI8HadeunWVZeZ7TVfGcU+rKeJJ3331XKaUsWaMdO3ZYsknLine truncated
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Flow-Matching Graph Net R2 = 0.9983 at t=45\n"
]
},
{
"data": {
"image/png": "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pPfu3RuAzZs3k5SUVOx8np6eLpctKCjI5X2tr7Oz448bNw6A999/3+VjFluZhWLCofxakJRSqlGjRgpQDz/8sG0b16P3yZMnK51Opzp37qxGjRqlOnTooE6cOKGUUioxMdHWZFujRg3Vu3dvNWTIENv5IiMjbfta7du3T/n7+ytANWnSRA0dOlSNGDFCxcbGqmrVqqnWrVsXaV+llDp+/LgCVERERIF1kftXamldb0Fy9s/Xq1dPjRw5UvXr1095eXkpQPXt21cZDIY8+azlff7555WmaapTp05q5MiRqnXr1rbugv/9738uleHXX39VY8eOtbUkDhs2zDZOY+zYsergwYPFPmdJ111Rj1eSY5Cs9fHoo48qTdNs75lbb73VNkYid30U9j1d0vU2YsQIBaglS5bYbX/55Zdt1zNkyBC7tGPHjilA1a9f3257r169lE6nUy1btlT9+/dXI0aMUG3btrUdZ968eQ7LUJItSM8//7wC1LPPPut0n2+++UYBqnr16g7T//77bwUoDw8Pp60Vd955p6pWrZrasWOHy2UrDz/88EO+LSRKKTVkyJACuyRzmzhxogLUXXfd5TD93Llzttf9p59+KnY+pZTq0qVLgV1st99+u8vXkJaWpuLi4hSg7r//fqf71apVSwHqzJkzLh+7OCRAKmf5BUh79+5VOp1OAerTTz+1bbe+af39/dXWrVvz5DObzapTp04KUBMmTFBpaWm2NKPRqB577DEFqB49etjlGz9+vNPm34yMDLVx48Yi7atUyQRIJX29+cnMzLSV54EHHrD7EDh27JiKjIxUgJo+fXqevNbyBgYGqm3bttmlzZgxQwHqlltucbksSrnexVbYc5Z03RXneKURIHl7e6t169bZpc2dO1cBKiAgwG7gcGHe06Xxnvvoo48UoCZOnGi3vUePHsrDw0M1bdpUBQYGquzs7ALzrFixwuGXyJYtW5S/v79yd3dXp0+fzpNekgGSdUxJ7i/XnKZNm6YA1aVLF4fp//jHP5z+nSml1P33368ANWvWLLV161a7R2pqqstlVUqpsWPH2t43hXmsX7/epeO/8847ClBRUVFO93n44YcVoIYPH+5yuZ955hkFqHbt2jlM37p1q62s7733XrHzKaXUoUOHVIMGDRRYBmkPHjxYDR06VNWvX195eHio++67L9/6X7VqlRo7dqy67777VFxcnG3Ad79+/fLtXhw0aJAC1BdffJFflZQYCZDKmaMA6fLly+qnn35SDRs2VICqU6eO3aBD65v2xRdfdHjMn3/+2faHaDQa86SbTCbbL+l9+/bZtvfv31+Ba/3GhdlXqZIJkEr6evPzxRdf2Ore0aBA6y9fPz+/PAMRreV955138uTLzMxUAQEBClCnTp1yqSxKuR4gFfacJV13xTleaQRI//d//+ewnO3atVOAevnll23bCvOeLo33nKPWoIyMDOXp6am6deumnnjiCQXYBcDOWp3yYw1K3n///TxpJRkgWVs9//77b6f7WFsNcs5SMxqNav/+/eq+++5T3t7eatasWU7zW8tVnMDFasGCBXats64+rK24BbG2BHbq1MnpPtOnT1eAiouLc7nc69atU2BpJXb03s0Z+M2ePbvY+azOnTtne/1yPpo3b64++eSTfMv81ltv5cl3zz33qKSkpHzzWd+7jz76aL77lRQJkMpZfn/ggGrYsKHas2ePXR5r2oEDBxwec/LkybZfVc489NBDClAfffSRbdvMmTMVoDp06KBWrlyZ54s/p8Lsq1TJBEglfb35mTBhggLU1KlTHaabzWZVvXp1BajffvvNYXmdfZm0adNGAQ5bw5xxNUAq7DlLuu6Kc7zSCJB2797tsAzWX/N9+vSxbSvMe7o03nNKKds06aNHjyqlLL+0wdKqlfPfSlnegzVr1lSapqnk5OQ8x0pOTlYLFy5UTzzxhPrnP/9p+0K3DpzO2W1vVVIBUnp6uu01yK8lISgoyOlnn5+fX57Wv8qstAIkpZTq2rWrAlRYWJj6/vvv1eXLl9WxY8fUY489pjRNs03bf+WVV0ok32+//aaCg4NVnTp11OLFi1VSUpJKSUlRP/zwg2rcuLEC1D/+8Y8Cy52VlaWOHj2q3njjDVW9enVVo0aNPL0POb3++uu2YKosSIBUzhytgzRx4kT1zDPPqB9++MHhr1PrB4iz9TKsv4RdeeTsTrh69aptyi2g3N3dVbt27dTUqVPz9O8XZl+lSiZAKunrzU+/fv0UoN59912n+1jHdOT+9W49l8lkcpivW7duhf6F62qAVNhzlnTdFed4pREgOWuut44HadasmW1bYd7TpfGeU+rGuJD58+crpZSt1Wj79u221qTu3bsrpZTatWuXAlSbNm3yHOfjjz+2teA4e4wbNy5PvpIKkBITE23nMZvNDvc5efKkbZ+77rrL1uXSo0cPpdfrFVjGJqWkpLh0zoqutLrYlLK05li7fHM//u///s/WYvrxxx8XO9+lS5dUrVq1lKZpebrzlbK0hPr4+ChA/fLLLy5fw7Zt25SmaSo8PNzpZ/3HH3+soHDjm4rDMmxclLt//vOLine truncated
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Latent Flow-Matching Graph Net R2 = 0.9980 at t=10\n"
]
},
{
"data": {
"image/png": "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UkqdPXvWWGVZtWpVFR8fr+6++27j9WJiYozHGvz1118qNDRUAapx48Zq4MCB6p577lEdOnRQwcHBqlWrVqU6VimlTpw4oQBVt27d65aF+bfUsrrf6ynaPl+nTh113333qT59+qiAgAAFqN69e6u8vLxi6Qz5femll5RGo1GdOnVS9913n2rVqpWxueB///ufTXn47bff1IgRI4w1iYMGDTL20xgxYoT6559/HL6ms8uutOdzZh8kQ3lMnDhRaTQa4zNz8803G/s/mJeHvc+0s8vtnnvuUYBaunSpyfZXXnnFeD933323yb5jx44pQNWrV89ke8+ePZWXl5dq0aKF6tevn7rnnntU69atjeeZN2+exTw4swbppZdeUoB68cUXrR7z7bffKkBVqVLF4v7jx48rQPn5+VmtrbjrrrtUcHCw2rFjh815Kw8//vij8Vmx5u67775uk6S5MWPGKEDde++9FvefP3/e+Hv/+eefHU6nlFJdunS5bhNb3759TdI44/5r1KihAJWUlGT1HM4kAVI5KylA2r9/v/Ly8lKAWrRokXG74aENDQ1V27ZtK5ZOp9OpTp06KUCNHj1apaenG/dptVr11FNPKUB1797dJN2oUaOsVn9mZ2erTZs2lepYpZwTIDn7fkuSm5trzM9jjz1m8iZw7NgxFRMTowD1/PPPF0tryG9YWJj6448/TPZNmzZNAeqmm26yOS9K2d7EZu81nV12jpyvLAKkwMBAtW7dOpN9c+bMUYCqXLmyScdhe57psnjm/vvf/ypAjRkzxmR79+7dlZ+fn2rSpIkKCwtTBQUF102zcuVKix8iW7duVaGhocrX11edOXOm2H5nBkidO3e2+OFa1JQpUxSgunTpYnH/Qw89ZPXvTCmlHn30UQWomTNnqm3btpm80tLSbM6rUkqNGDHC+NzY89qwYYNN53/33XcVoGJjY60e88QTTyhADR482OZ8v/DCCwpQbdq0sbh/27Ztxry+//77DqdTSqlDhw6p+vXrK9B30h4wYIAaOHCgqlevnvLz81PDhg0rVv7OuP/+/fsrQH3xxRdWz+FMEiCVM0sB0pUrV9TPP/+sGjRooAAVFRVl0unQ8NC+/PLLFs/5yy+/GB9ErVZbbH9hYaHxm/Rff/1l3N6vXz8FxduNLbHnWKWcEyA5+35L8sUXXxjL3lKnQMM335CQkGIdEQ35fffdd4uly83NVZUrV1aAOn36tE15Ucr2AMneazq77Bw5X1kESP/5z38s5rNNmzYKUK+88opxmz3PdFk8c5Zqg7Kzs5W/v7/q2rWreuaZZxRgEgBbq3UqiSEomT9/frF9zgyQDLWex48ft3pMQkKCAtNRalqtVh04cEANGzZMBQYGqpkzZ1pNb8iXI4GLwYIFC0xqZ219GWpxr8dQE9ipUyerxzz//PMKUAkJCTbne926dQr0tcSWnt2igd+rr77qcDqD8+fPG39/RV/NmjVTCxcuLHa8M+7f8OxOnDjR6jmcSfoguYlRo0YZ+xmEhYVx++23c+zYMRo0aMDKlSupVKlSsTSDBw+2eC7D/BWDBg0ytt8X5eXlxW233QbA1q1bjdvbtWsHwNixY1m9ejW5ublW82vPsc7i7PstiaFvz/3332+xzX3gwIFUqVKFjIwMdu/ebfEcd955Z7Ft/v7+1K9fH9C3yTubvdd0dtmVxe/CESNGjLC4ffjw4QAmfbjseabL4j7r169PvXr1OHHiBMeOHQPgt99+Iy8vj169ehn7hBj6ECmlWL9+PRqNhp49exY736VLl/j888+ZPHkyY8aMYeTIkYwcOZJNmzYBcPjwYZvyVRpZWVlkZWUBUK1aNavH7dmzB4APP/zQ+P7n6+vLzTffzIoVK/jpp5948cUXraY/efIkSv9Fv9irW7duduX54Ycf5rPPPrP71aRJE7uu42w9evTgtttuQylF//79+fHHH0lLS+P48eM8/fTTfP755/j6+gL659LRdKDvl9SiRQsOHDjAkiVLSE5OJjU1lR9//BGtVsvo0aMZPXq00+/V8CydP3/e6ee2pPhftigXnTp1omHDhoC+M2J4eDi33norffr0sfgGDFjt8GzorDl16lSmTp1a4nUvXrxo/PczzzzD77//ztq1a+nTpw++vr60atWK2267jfvvv5+2bduW6lhncfb9lsQQSNSrV8/ifo1GQ7169bh8+bLVQKdOnToWt4eGhgKUSVBp7zWdXXZl8btwhLXfn2H7mTNnjNvseabL6j7j4+NZsGABa9eupUGDBsZgqFevXrRo0QJ/f3/Wrl3LCy+8wN69e7l06RK33HJLsSBkwYIFTJw40RikWJKenm5zvuyVlpZm/HdISIjFY06fPk1KSgoA9957L4GBgeh0Os6cOcPmzZvJyMhg8ODBHDt2jCpVqpRZXl3FUA4l/U4yMzOBa3+vtlq2bBkDBw5ky5Yt9O/f32Tff/7zH37//Xd27dpF1apVHU535coV7r77blJSUti2bRvt27c37rvjjjto1qwZLVq0YNGiRTz44IN0797dafdv2H758uUSy8NZJEByEw8//LCxl76tAgMDLW4Line truncated
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
"<Figure size 1400x1400 with 9 Axes>"
]
},
"metadata": {},
@@ -398,7 +275,15 @@
}
],
"source": [
"SIM_IDX = 25\n",
"# denoising steps \n",
"NUM_DENOISING_STEPS = 50\n",
"# flow matching steps\n",
"NUM_FM_STEPS = int(NUM_DENOISING_STEPS/10)+1\n",
"\n",
"fig, ax = plt.subplots(3, 3, figsize=(14, 14)) \n",
"ax = ax.flatten()\n",
"curr_ax = 0\n",
"\n",
"graph = dataset.get_sequence(SIM_IDX, n_in=T[SIM_IDX])\n",
"\n",
"# DGN inference\n",
@@ -409,102 +294,157 @@
"r2, t = np.max(r2), np.argmax(r2)\n",
"print(f\"DGN R2 = {r2:.4f} at t={t}\")\n",
"# Plot the results\n",
"plot(graph.pos, graph.target[:,t], pred, r2)\n",
"plot(ax[curr_ax],graph.pos, graph.target[:,t], pred, r2, \"DGN\")\n",
"curr_ax += 1\n",
"\n",
"# LDGN inference\n",
"steps = dgn.nn.diffusion.DiffusionStepsGenerator('linear', DGN.diffusion_process.num_steps)(NUM_DENOISING_STEPS)\n",
"pred = LDGN.sample(graph, steps=steps)\n",
"# Compute the accuracy\n",
"r2 = [dgn.metrics.r2_accuracy(pred, target) for target in graph.target.split(1, dim=1)] \n",
"r2, t = np.max(r2), np.argmax(r2)\n",
"print(f\"LDGN R2 = {r2:.4f} at t={t}\")\n",
"# Plot the results\n",
"plot(graph.pos, graph.target[:,t], pred, r2)\n",
"plot(ax[curr_ax],graph.pos, graph.target[:,t], pred, r2, \"LDGN\")\n",
"curr_ax += 1\n",
"\n",
"# Vanilla Graph Net inference\n",
"with torch.no_grad():\n",
" VanillaGN.eval()\n",
" pred = VanillaGN(graph)\n",
"# Compute the accuracy\n",
"r2 = [dgn.metrics.r2_accuracy(pred, target) for target in graph.target.split(1, dim=1)] \n",
"r2, t = np.max(r2), np.argmax(r2)\n",
"print(f\"Vanilla Graph Net R2 = {r2:.4f} at t={t}\")\n",
"# Plot the results\n",
"plot(graph.pos, graph.target[:,t], pred, r2)\n",
"plot(ax[curr_ax], graph.pos, graph.target[:,t], pred, r2, \"Vanilla GNN\")\n",
"curr_ax += 1\n",
"\n",
"# Flow matching versions\n",
"\n",
"# Flow-Matching Graph Net inference\n",
"steps = np.linspace(0, 1, NUM_FM_STEPS)\n",
"pred = FMGN.sample(graph, steps=steps)\n",
"r2 = [dgn.metrics.r2_accuracy(pred, target) for target in graph.target.split(1, dim=1)]\n",
"r2, t = np.max(r2), np.argmax(r2)\n",
"print(f\"Flow-Matching Graph Net R2 = {r2:.4f} at t={t}\")\n",
"plot(ax[curr_ax],graph.pos, graph.target[:,t], pred, r2, \"FM-DGN\")\n",
"curr_ax += 1\n",
"\n",
"# Latent Flow-Matching Graph Net inference\n",
"steps = np.linspace(0, 1, NUM_FM_STEPS)\n",
"pred = LFMGN.sample(graph, steps=steps) \n",
"r2 = [dgn.metrics.r2_accuracy(pred, target) for target in graph.target.split(1, dim=1)]\n",
"r2, t = np.max(r2), np.argmax(r2)\n",
"print(f\"Latent Flow-Matching Graph Net R2 = {r2:.4f} at t={t}\")\n",
"plot(ax[curr_ax],graph.pos, graph.target[:,t], pred, r2, \"FM-LDGN\")\n",
"curr_ax += 1\n",
"\n",
"# skip one cell\n",
"curr_ax += 1 \n",
"\n",
"# Other baselines following\n",
"\n",
"# Bayesian Graph Net inference\n",
"pred = BayesianGN.sample(graph)\n",
"# Compute the accuracy\n",
"r2 = [dgn.metrics.r2_accuracy(pred, target) for target in graph.target.split(1, dim=1)]\n",
"r2, t = np.max(r2), np.argmax(r2)\n",
"print(f\"Bayesian Graph Net R2 = {r2:.4f} at t={t}\")\n",
"# Plot the results\n",
"plot(graph.pos, graph.target[:,t], pred, r2)\n",
"plot(ax[curr_ax],graph.pos, graph.target[:,t], pred, r2, \"Bayes GNN\")\n",
"curr_ax += 1\n",
"\n",
"# Gaussian Mixture Graph Net inference\n",
"pred = GaussianMixGN.sample(graph)\n",
"# Compute the accuracy\n",
"r2 = [dgn.metrics.r2_accuracy(pred, target) for target in graph.target.split(1, dim=1)]\n",
"r2, t = np.max(r2), np.argmax(r2)\n",
"print(f\"Gaussian Mixture Graph Net R2 = {r2:.4f} at t={t}\")\n",
"# Plot the results\n",
"plot(graph.pos, graph.target[:,t], pred, r2)\n",
"plot(ax[curr_ax],graph.pos, graph.target[:,t], pred, r2, \"Gauss. Mix\")\n",
"curr_ax += 1\n",
"\n",
"# VGAE inference\n",
"pred = VGAE.sample(graph)\n",
"# Compute the accuracy\n",
"r2 = [dgn.metrics.r2_accuracy(pred, target) for target in graph.target.split(1, dim=1)]\n",
"r2, t = np.max(r2), np.argmax(r2)\n",
"print(f\"VGAE R2 = {r2:.4f} at t={t}\")\n",
"# Plot the results\n",
"plot(graph.pos, graph.target[:,t], pred, r2)\n",
"plot(ax[curr_ax],graph.pos, graph.target[:,t], pred, r2, \"VGAE\")\n",
"curr_ax += 1\n",
"\n",
"# Flow-Matching Graph Net inference\n",
"steps = np.linspace(0, 1, NUM_DENOISING_STEPS + 1)\n",
"pred = FMGN.sample(graph, steps=steps)\n",
"# Compute the accuracy\n",
"r2 = [dgn.metrics.r2_accuracy(pred, target) for target in graph.target.split(1, dim=1)]\n",
"r2, t = np.max(r2), np.argmax(r2)\n",
"print(f\"Flow-Matching Graph Net R2 = {r2:.4f} at t={t}\")\n",
"# Plot the results\n",
"plot(graph.pos, graph.target[:,t], pred, r2)\n",
"\n",
"# Latent Flow-Matching Graph Net inference\n",
"steps = np.linspace(0, 1, NUM_DENOISING_STEPS + 1)\n",
"pred = LFMGN.sample(graph, steps=steps) \n",
"# Compute the accuracy\n",
"r2 = [dgn.metrics.r2_accuracy(pred, target) for target in graph.target.split(1, dim=1)]\n",
"r2, t = np.max(r2), np.argmax(r2)\n",
"print(f\"Latent Flow-Matching Graph Net R2 = {r2:.4f} at t={t}\")\n",
"# Plot the results\n",
"plot(graph.pos, graph.target[:,t], pred, r2)"
"# Show the combined figure\n",
"plt.tight_layout()\n",
"plt.show()\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Distribution inference\n",
"Approximate the learned distributions by sampling many times"
"There are a lot of graphs here, but they show several interesting aspects:\n",
"* First of all, the DGN and its FM variants produce very accurate pressure distributions; typically only the DGN version is slightly noise with the default settings (the latent space model LDGN already performs better).\n",
"* Flow matching uses one tenths of the steps (i.e. is 5x faster), but gives the same quality as denoising.\n",
"* The Bayes GNN has problems, and the Gaussian Mixture model produces clearly suboptimal outputs. We actually tuned this GM model quite a bit, but to no avail.\n",
"* The VGAE outputs often look surprisingly good here, but this holds only for a single sample. As we'll see, this model has trouble learning the proper distribution across many samples.\n",
"\n",
"One difficulty here is that we're only seeing a single output. You'll see that re-running the cell will produce variants, but naturally, we'll need a thorough evaluation of the distributional accuracy of the models to properly draw conclusions about their performance.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Evaluating Distributional Accuracy\n",
"\n",
"To evaluate a large number of samples, and compute their node wise and graph-based Wasserstein distances. These quantified metrics are a good start, but it's still interesting to visualize the distributions to provide more intuition for how well or badly certain methods do. For this, we'll plot stacks of Gaussian kernel density estimates that show the distribution of pressure values along the length of the ellipses.\n",
"\n",
"These plots can directly be compared in terms of how much density they contain in different regions of the plot. For reference, the distribution of the ground truth data is shown in the first cell below.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"from scipy.stats import gaussian_kde\n",
"\n",
"def pdf(ax, pos, pred, title, vmin=None, vmax=None, w2_distance_1d=None, w2_distance_nd=None):\n",
" pos = pos.cpu()\n",
" ang = torch.atan2(pos[:,1], pos[:,0])\n",
" idx = torch.argsort(ang)\n",
" idx = idx[ang[idx] > 0]\n",
" y = pred[idx].cpu().numpy()\n",
" if vmin is None:\n",
" vmin = y.min() - 0.1\n",
" if vmax is None:\n",
" vmax = y.max() + 0.1\n",
" x = np.linspace(vmin, vmax, 1000)\n",
" f = np.stack([gaussian_kde(y[i])(x) for i in range(y.shape[0])])\n",
" f = f / f.max(axis=1)[:,None]\n",
"\n",
" ax.imshow(np.flip(f.T), aspect='auto', cmap='binary')\n",
" ax.set_yticks(np.linspace(100, 900, 5), np.flip(np.round(x[np.linspace(100, 900, 5).astype(int)], 2)), fontsize=16)\n",
" ax.set_xticks([])\n",
" #ax.set_yticks(fontsize=16)\n",
" ax.set_title(title, fontsize=28)\n",
" # Add a label with the Wasserstein-2 distance\n",
" if w2_distance_1d is not None and w2_distance_nd is not None:\n",
" ax.text(0.2, 0.76, r'$W_2^\\mathregular{node}$' + f' = {w2_distance_1d:.4f} \\n' + r'$W_2^\\mathregular{graph}$' + f' = {w2_distance_nd:.4f}', fontsize=18, bbox=dict(facecolor='white', edgecolor='black', boxstyle='round,pad=0.2'), transform=ax.transAxes)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We'll use `NUM_SAMPLES = 200` below, and plot the distributions for ground truth and the 8 models below."
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"metadata": {}
},
"outputs": [
{
"data": {
"image/png": "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HIbgDarc12SBC2On16fT8ooyVFQ0JiDve9/7EIlE7PdPPPEEtm/fPoY1as+UKVMc77261ACg2Wxi586drvsivLiATIwXnzI/r507d3Z0Du+8885IVGnMmei/6WRERWMCEovFcO6559rv6/U67rzzzjGsUXvmzp3reL9x40bP3928eTOKxaL93i2Yyl00vHw7Ws1/NZoceeSR9v/5fB5///vfPX/3z3/+80hUacyZ6L/pZERFY4LyjW98w9ELu/766/H666+PYY1as2DBAsf73/3ud56/e//997fcF8F76l6vhWVZg+byGitOOukkx/vf//73nr6Xy+Xw2GOPjUSVAAyOQ8i5mkYS/pvu3r3bswXxxBNPeD4GP7/RPLeJiorGBOU973kP/vVf/9V+n8vl8NnPfraj3thoMmvWLEea7cMPP2xP9NeKQqGA22+/3X4fjUZxxhlnGMseddRR9v87d+70NGhq9erVjvXRx5KzzjrLMV3Ibbfd5mnMzB133IFSqTRi9ZIxpNHMXuO/qWVZWLt2bdvv/PnPf8aTTz7p+Rj8/MZLZt54RkVjAnP77bc75m1at24dTjvttHHr37788svt/xuNBj7/+c+3FbmlS5fijTfesN9/9rOfdR1RLC2Qm266qeW+d+7ciUsvvbRNrUePadOmYfHixfb7zZs344c//GHL77z00ku46qqrRrRefCAaAMf8YSPN+9//fsf7dr9psVjE5z73uY6Owc9vy5YtYzruaSKgojGB6enpwT333OMY7PfMM8/g3e9+N773ve85GlsTjUYDjz32GM4+++xRcW199rOfdUzj/uyzz+KMM84wrjuQy+XwhS98AXfccYf9WV9fH77//e+77v+DH/ygowG44447cMsttxgDqE899RQWLFiAbdu2GScDHCt+9KMfOfz4V111Fb7zne+gWq0OKvvEE0/gQx/6ELLZrCMxotscddRRjvnNfvjDH+Khhx4aUeuGmD17tmMup4cffhhXXHGF0QL761//ikWLFuH555/v6DflwlSr1fC5z30OL774omM6eIUxFlPrKt1ly5Yt1hFHHGFcJWzevHnWeeedZ11++eXWlVdeaS1fvtz6yle+Yp1++unWlClTjN+54IILXI813BXitmzZYk2bNs2xj2AwaH34wx+2vvGNb1jf+ta3rH/5l3+xenp6BpX5f//v/7Xd/69+9atB53PUUUdZl19+ufW9733P+upXv2rNnz/f3nb00Udby5YtG9LU6LRynxc6mX77jjvuGHQOM2bMsC644ALrO9/5jvW1r33NsaJfX1+fdfXVV4/Y1OiWZVlLliwx3iuxWMxKJBL264knnnB8rxsrCj7xxBODVvibPXu2dfHFF1vf+97Line truncated
"text/plain": [
"<Figure size 400x500 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
@@ -517,21 +457,11 @@
"output_type": "stream",
"text": [
"DGN\n",
"R2 of mean: 0.9986 R2 of std: 0.9872\n",
"Wasserstein-2 distance 1d: 0.0121\n",
"Wasserstein-2 distance nd: 0.1628\n"
"R2 of mean: 0.9979 R2 of std: 0.9795\n",
"Wasserstein-2 distance 1d: 0.0143\n",
"Wasserstein-2 distance nd: 0.1854\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAY0AAAG7CAYAAAA/hMlhAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACk+0lEQVR4nO29d5xU1f3//5ped2eBFUEBURSwEBXBhgVRsaCCGk00NjTEiohYwC5GwSQW7LEiGmMiCfhBzTfGAoIlgMFeEEVpUhbYmd3p5f7+2N/78p4z587OLrOV9/PxmMfuzNy5987MnfM673pshmEYEARBEIQSsLf1CQiCIAgdBxENQRAEoWRENARBEISSEdEQBEEQSkZEQxAEQSgZEQ1BEAShZEQ0BEEQhJIR0RAEQRBKxtnWJyAIQiGrVq3CF198gZqaGtTU1CCZTCIUCqGqqgp77bUXBg0aBK/X29anKeyAiGgIOzQ//vgjdt9996LbuN1ueL1edOvWDT169ED//v2x//7746ijjsLgwYNhs9nKci7Lly/Hww8/jDfffBPLly8vuq3T6cT++++P008/HWeddRb69+/f6P6t3uvbb7+NESNGlHyeM2fOxNixY837c+bMwZgxY0p+vdDBMQRhB2blypUGgGbfevfubdxyyy3G+vXrm30Oa9euNS666CLD4XA0+zxGjRplLF68uFnv9dBDD23S+T733HN5r58zZ06z37vQ8RBLQxAUHA5H3v1cLgfDokXb6tWr8fvf/x4PPPAA7rzzTlx77bVNsjyWLl2K0047DT///HPe4zabDb/4xS8waNAgdOvWDZWVlaipqcH69evx6aef4ocffsjb/vXXX8frr7+OTCZTcP6N8dFHH+G1117DKaec0qTXCTsmIhqCwDj66KMxf/78vMcMw0AkEsHWrVuxcuVKfPjhh3jnnXfw9ttvm9tEo1Fcd911WLhwIV555RW4XK5Gj/XWW29h9OjRiMVi5mPV1dWYMmUKzj//fOy0006Wr/3qq6/wj3/8AzNmzMDmzZvzzrU53HrrrRg1alTZXG1CJ6aNLR1BaFNUl83RRx9d8mu/+OILY8yYMQXunnHjxjX62jVr1hjV1dV5rzv11FONSCTSpPOPRCLGHXfcYXg8HgOAkU6nLbdV36vT6cy7/7e//a2kY4p7asdGUm4FoZnsu+++mDNnDv70pz/lzdCfeuop/PnPfy762nPOOQc1NTXm/bPPPhtz5sxBRUVFk86hoqICt99+OxYtWoS+ffs26bVnnXUWAoGAef+2225DNptt0j6EHQ8RDUHYTiZNmoRJkyblPXbnnXcimUxqt/9//+//YeHCheb93r1748knn2xyLIIzZMgQLFu2rEn76N69OyZMmGDe//bbbzFr1qxmn4OwYyCiIQhlYNq0aRg4cKB5/+eff8Yzzzyj3faPf/xjwWtDodB2n0NVVVWTYxLXX389qqqqzPt33nknUqnUdp+L0HkR0RCEMuB0OnH11VfnPfbCCy8UbLdy5Uq888475v1u3brhl7/8ZYufnxVVVVW47rrrzPs//fQTnnrqqTY7H6H9I6IhCGXi/PPPh9O5LSHx448/zsuMAoD33nsv7/6YMWPg8Xha5fysmDBhQl6m1t133414PN6GZyS0Z0Q0BKFMBINBDBo0yLyfTqfx4Ycf5m2zaNGivPtDhw5tlXMrRjAYxJQpU8z7P//8Mx5++OE2PCOhPSOiIQhlRBWBb7/9Nu/+Z599lnd/8ODBLX5OpXD55Zdj1113Ne/fe++9iEQibXhGQntFREMQykjPnj3z7m/ZsiXvPi/EA4AePXq0+DmVgtfrxa233mre37JlC+6///42PCOhvSKiIQhlhGciAYWiod4vR9ZUubj44ouxxx57mPcfeOCBApETBBENQSgjwWAw735dXV3R+7y4rhhvvPEGnE5no7djjz222efucrlwxx13mPcjkQjuvffeZu9P6JyIaAhCGVFFobKyMu++KirRaLSk/eZyOWSz2ZJu28NvfvMb7LPPPub9Rx55pKCZorBjI6IhCGUkHA7n3e/atWvR++r2bY3dbsfUqVPN+/F4HL///e/b8IyE9oaIhiCUkXXr1uXd79KlS979bt265d1fv359Sfs95ZRTYBiG9lZuzjjjjLysrqeffho//vhj2Y8jdExENAShjCxZsiTv/t577513n9dxAMD//ve/Fj+npmKz2fKsi1QqhTvvvLMNz0hoT4hoCEKZqK+vxxdffGHed7vdOPTQQ/O2OfLII/PuL168uFXOramcdNJJGDZsmHn/hRdeKKg5EXZMRDQEoUy88MILyGQy5v0hQ4bA5/PlbXPUUUfl3Z87d65lN9y25u677zb/z2azeXUcwo6LiIYglIFMJlPQeuOC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 truncated
"text/plain": [
"<Figure size 400x500 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
@@ -544,26 +474,50 @@
"output_type": "stream",
"text": [
"LDGN\n",
"R2 of mean: 0.9984 R2 of std: 0.9462\n",
"Wasserstein-2 distance 1d: 0.0148\n",
"Wasserstein-2 distance nd: 0.1573\n"
"R2 of mean: 0.9987 R2 of std: 0.9650\n",
"Wasserstein-2 distance 1d: 0.0126\n",
"Wasserstein-2 distance nd: 0.1455\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAY0AAAG7CAYAAAA/hMlhAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACcQ0lEQVR4nO2dd5xU1fn/P9PrzhaQooIoCtiiohgVVLDFDoolVkRjrKhAoqBfCyQRTWLB3sESYkHFIGosEaRoFIO9gnSlLLA7O31m5/7+4Pdcnjl77szs7mzleb9e89qdmTv33rkzcz7nqcdmGIYBQRAEQSgCe1ufgCAIgtBxENEQBEEQikZEQxAEQSgaEQ1BEAShaEQ0BEEQhKIR0RAEQRCKRkRDEARBKBoRDUEQBKFonG19AoIgNB3DMPDVV1/hp59+QnV1Naqrq2Gz2VBRUYGqqirsvffe6N+/P+x2mR8KpUFEQ+h0rFixArvuuqt5/8gjj8TcuXObtc/p06dj9OjRls/bbDa43W74/X7ssMMO2GmnnbDnnnti4MCBGDZsGHbbbbdmHV/lvffew1NPPYV3330XGzZsyLut3+/H4MGDccYZZ+C0007DDjvsUHD/uvdbXl6O5cuXo7KysujzvOiii/D000+b97ds2YKKioqiXy+0P2T6IQglwDAMJJNJbNmyBT/88APef/99PPTQQ/jd736Hvn374sADD8Sjjz6KRCLRrON88sknGDp0KI455hjMmDGjoGAAQCwWwzvvvIPLLrsMvXr1wtVXX401a9Y0+ti1tbX461//2pTTFjoRYmkIQhOw2WwNXD719fWW2//vf//D5ZdfjilTpuDhhx/GCSec0OhjTp8+HZdddhlSqVTO4x6PB4cccgh23XVXdO3aFR6PB+vWrcO6devw4YcfYvPmzea2yWQSDz74ID7//HPMnz+/0edw33334brrrkP37t0b/VqhcyCiIQhN4JZbbsFtt92W81h9fT1qamqwZcsWfP311/jwww/x+uuv4+uvvza3WblyJU466SRMmTIFN9xwQ9HHu/3223HTTTflPLb33nvjtttuw0knnQSfz6d9XX19PRYtWoTnnnsO06ZNQzqdBrDVMmoKsVgMt99+O6ZOndqk1wsdH3FPCUKJcDgc6NKlC3bffXcMHz4cd9xxB7766iu89dZb2Hfffc3tDMPAhAkTMGPGjKL2+9Zbb+H//u//ch6bNGkSvvjiC5xxxhmWgkHndPjhh+PRRx/FDz/8gPPOO69J783p3Da/fPTRR7F69eom7Ufo+IhoCEIL85vf/AYfffQRzj777JzHL774YnzxxRd5X7t+/XpccMEFOZbBfffdh1tuuaXRGVF9+vTBc889h6effhqBQKBRr+VB8WQyiUmTJjXq9ULnQURDEFoBv9+P5557Doceeqj5WDKZbODiUrnnnntQXV1t3j/11FMxZsyYZp3LhRdeiH/+85+Nes2JJ56Iww47zLz/9NNP48cff2zWeQgdExENQWglnE4nZsyYkePqmTVrVk7Mg1NXV4dHHnnEvO9wOHD//feX5Fyqqqoa/Zq//OUv5v+ZTAa33nprSc5F6FiIaAhCK9KnTx+cfvrp5n3DMPDcc89pt3355ZdRW1tr3j/++OPRu3fvFj9HKyjVl3jhhRfw5Zdfttn5CG2DiIYgtDIXX3xxzv0PPvhAu928efNy7v/2t79tsXMqlj//+c/m/9lsFjfffHMbno3QFohoCEIr8+tf/xo2m828v3jxYsTj8QbbLViwIOf+oEGDWvzcCvHrX/8ap556qnn/tddew8cff9yGZyS0NiIagtDKVFRUYI899jDvp1IpLF++PGebeDyOpUuXmveDwSD69evXaueYjz/96U85oqfWjwidGxENQWgDevbsmXOfV20DwKZNm3Lud+vWLWegbkt+9atf5aQPv/vuu83u7SV0HEQ0BKENUJv2qaKh3i8vL2/pU2oUkyZNgsPhMO+LtbH9IKIhCG1AMBjMuV9XV5f3fmOK8W644QY4nc6Ct8mTJzf5/Pv164dRo0aZ9xctWoQ33nijyfsTOg4iGoLQBqiiEAqFcu6rohKNRoved319fVG3bDbb9DeArf233G63ef///u//mtzTSug4iGgIQhvA6y+AhsV26n11+/bALrvsgt///vfm/SVLlmDmzJlteEZCayCiIQhtwM8//5xzX13YqEuXLjn3N2zYUPQs/u9//zsMw2hwe//995t30hpuuukm+P1+8/4tt9ySt0W80PER0RCEVqampiYnndbj8TRY2c/v9+c8FolE8MMPP7TaORZLjx49cPXVV5v3v/vuO8sKd6FzIKIhCK3MRx99lGM1DBo0CF6vt8F2hx9+eM799lpEd8MNN+TEZCZNmmSu2yF0PkQ0BKGVmTZtWs79I444QrvdkUcemXP/+eefb7Fzag5VVVUYN26ceX/58uV4/PHH2/CMhJZEREMQWpGVK1filVdeMe/bbDacf/752m1HjhyZM4N/6623sGrVqhY/x6YwduzYnDjMn//8Z21rFKHjI6IhCK1EJpPBeeedh0wmYz52+umnY88999RuHwqFcNlll5n3s9lss9fSaClCoVDO8rW//PILHnzwwTY8I6GlENEQhFYgHo/joosuwsKFC83HvF5vwTUpxo0bl5N++69//atka2qUmquvvjqnPcqdd97ZoB5F6PiIaAhCC/Puu+/i0EMPxT/+8Y+cx5966qmctcN19OjRA88880xO36lrrrkGkydPbnZxXqnx+Xw57USqq6vxr3/9qw3PSGgJRDQEoUTU19dj8+bN+OmnnzB79mzceOON2HfffXHsscfi888/N7ez2Wz429/+hnPOOaeo/Z500kkNloW99dZbsd9++2HmzJkFYwebN2/GY489ht/97neNfk+N5dJLL8Uuu+xi3ueuOKFz4Cy8iSB0bObNm5ezxGqx3HLLLbjlllu0z02ePDlnQSIARRW19enTBw8//DCOP/74Rp/LjjvuiCuvvNJMZ/3qq69w5plnwuPx4NBDD8Vuu+2Grl27wu/3IxKJYP369fjmm2/w2WefNTi3UCiEgQMHNuocisHtduPWW29tsNCU0HkQ0RC2C5pSpZzP/WMYRqP2ecABB+Cyyy7DqFGjtDUZxfC73/0O++yzD66//nrMnz/ffDyZTGLu3LlFtSf3er0YNWoUJk+ejG7dujXpPApx4YUX4s4778T333/fIvsX2hYRDUEoEW63G36/HzvssAN22mknDBgwAAcddBCGDRvWoOK7qRxyyCH44IMP8M477+Cpp57Ce++9h40bN+Z9TTAYxMEHH4yzzjoLZ599doO27KXG4XBg0qRJ7WJ5WqH02AxpSykIHRbDMPDll19i2bJlqK6uxqZNm2C321FZWYnKykoMGDAAe+21F+x2CV8KpUFEQxAEQSgamX4IgiAIRSOiIQiCIBSNiIYgCIJQNCIagiAIQtGIaAiCIAhFI6IhCIIgFI0U9zWSbDaLn3/+GWVlZTlN5ARBEDoqhmGgrq4OO+64Y8GaHhGNRvLzzz+jV69ebX0agiAIJWf16tXYeeed824jotFIysrKAGy9uHxVNUEQhI5KOBxGr169zPEtHyIajYRcUqFQSERDEIRORTEudwmEC4IgCEUjoiEIgiAUjYiGIAiCUDQiGoIgCELRiGgIgiAIRSOiIQiCIBSNpNwKeUkkEnj77bfx8ccfo7a2FrJmlyC0D7xeL3beeWeceuqpJVtOuBhENARL7rjjDtx+++2oq6vDTjvthKqqKlk2VBDaCfF4HKtWrcLYsWPx61//Gi+99FKrdKsQ0RC0TJo0CbfddhuuueYaXH755dhzzz3b+pQEQVCIRqOYM2cOrr/+egwdOhTz5s0r2Aakucga4Y0kHA6jvLwctbW1nbYifPXq1ejduzduvvlmTJ48ua1PRxCEAqxcuRIHH3wwzjjjDDz44IONfn1jxjXxNQgNmDlzJtxuN8aPH9/WpyIIQhHssssuOP/88/Hyyy+jvr6+RY8loiE04P3338eRRx6J8vLytj4VQRCK5JRTTsH69evxzTfftOhxRDSEBmzevBk9e/Zs69MQBKER0G928+bNLXocEQ2hAfX19XC5XG19GoIgNAL6zYp7ShAEQWg3iGgIQgFWrFgBm82Giy66qK1PRRDaHBENQRAEoWhENARBEISiEdEQBEEQikZEQ+gQzJ07FzabDbfddhsWL16MY489FmVlZSgvL8dpp52GFStWaF83bdo0/PrXv0YwGEQwGMSvf/1rTJ8+XbttfX097rzzTuy+++7wer3YfffdMWXKFGSzWcvz+uCDD3DKKaega9eu8Hg82GOPPfB///d/iMViJXjXgtD+ENEQmsTrr78Om80Gm82GGTNm5N323//+t7mtzWYrmBJ4+umnw2azweVyYfXq1TnPffLJJzjiiCPgdrtx2WWX4aCDDsKsWbNwzDHHIJFI5Gx7zTXX4OKLL8batWtxySWX4JJLLsHatWsxevRoXHvttQ2O+/vf/x4TJkxANpvFVVddhd/85je4++67tdsCwMMPP4yhQ4di4cKFOOmkk3DNNddg5513xl/+8hcce+yxSKVSed9nZ2HlypUYP348BgwYgEAggKqqKgwaNAh/+9vfSiqezT3Ohg0b8Prrr+OWW27BCSecgK5du5rfyVIkOdxwww053/O5c+fm3T6VSuGJJ57Ab37zG/Ts2RMejwfBYBD9+/fH6NGjsWjRomafU4tgCI2itrbWAGDU1ta29am0GIcccohxySWX5N3mgw8+MAAYAIyHH34477YnnniiuS0AY/PmzZbbrly50nA4HAYA44wzzjAff//9983XP//88zmvueCCCwwAxj//+U/zsXnz5hkAjD333NOoqakxH9+8ebPRr18/A4DxwQcfNNj/fvvtZ0QiEfPxNWvWGF27djUAGKNGjTIf//rrrw2n02nst99+RnVLine truncated
"text/plain": [
"<Figure size 400x500 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 200/200 [00:03<00:00, 55.34it/s]\n"
" \r"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Flow-Matching DGN\n",
"R2 of mean: 0.9979 R2 of std: 0.4831\n",
"Wasserstein-2 distance 1d: 0.0221\n",
"Wasserstein-2 distance nd: 0.2149\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
" \r"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Latent Flow-Matching DGN\n",
"R2 of mean: 0.9988 R2 of std: 0.8086\n",
"Wasserstein-2 distance 1d: 0.0150\n",
"Wasserstein-2 distance nd: 0.1568\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 200/200 [00:03<00:00, 54.93it/s]\n"
]
},
{
@@ -571,21 +525,11 @@
"output_type": "stream",
"text": [
"Bayesian Graph Net\n",
"R2 of mean: 0.9974 R2 of std: -0.6108\n",
"Wasserstein-2 distance 1d: 0.0369\n",
"Wasserstein-2 distance nd: 0.5989\n"
"R2 of mean: 0.9983 R2 of std: -0.8248\n",
"Wasserstein-2 distance 1d: 0.0358\n",
"Wasserstein-2 distance nd: 0.5815\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAY0AAAG7CAYAAAA/hMlhAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACvCklEQVR4nO2dd5wT1fr/P8mmbmEBEUTpIKCoFLEBCqKgggqKeNWrAioqKiLiVfCKIBawi72AIPYKfBELioIUG4jItaAgTUQUlC3Z9Mzvj/09h2dOzqRtls0u5/165bWbzMnMpJ3PPPXYDMMwoNFoNBpNCthr+gQ0Go1GU3vQoqHRaDSalNGiodFoNJqU0aKh0Wg0mpTRoqHRaDSalNGiodFoNJqU0aKh0Wg0mpTRoqHRaDSalNGiodFoNJqUcdT0CWg0dZXJkyfjjjvuEPd184X0CIVCWL16NbZv345du3bh77//hsfjQf369dG4cWN06dIFzZo1q+nT3P8wNDXOpk2bDABJbzabzSgsLDSaNWtm9OvXz7jtttuM77//vqZPX2PBpEmTTJ+fJjnhcNiYOXOmccYZZxj5+flJfxONGjUyLrroIuOdd94x/H5/SscYNmxY3H5OPPHEtM+1ZcuW4vmdO3dOOFb+LgAw2rRpY4RCobSO2bt3b/H84uLitM85G2j3VC3CMAyUl5fjt99+w0cffYS77roLnTp1wrnnnovt27fX9OlpNFXi1VdfRceOHXH55Zfj/fffR0VFRdLn7Nq1C6+88grOPfdctGzZEg888AB8Pl/ax162bBk+/PDDTE47Y3799Vc8//zz+/SY2UC7p3KUvLy8uMcMw0AsFot7fO7cuVi1ahWWLFmCNm3a7IvT02iyRiQSwfXXX4+nnnoqbluDBg3Qs2dPNG3aFAceeCDC4TD++OMPbNu2DZ9//jmCwaAY++eff+I///kPSkpKcOedd6Z9HrfddhtOO+20Kr2WdLnzzjsxbNgweDyefXrcqqAtjRykd+/eiEQicbdoNIrS0lJ8+eWXuOWWW+D1esVztm3bhn//+9/ab55DTJ48GYZhiJsmnmg0irPPPjtOMAYMGIAVK1Zg165dWLBgAZ599lncfffduO+++zBnzhx8+umn2L17N+bNm4f+/fubnpvpe71q1SrMnTs349eSCdu3b1eKZS6jRaOWUVRUhGOPPRbTpk3DypUrUVRUJLZ98cUX+Oijj2rw7DSa9Ljtttvw/vvvi/sFBQVYsGABFi5ciB49esBut56iCgoKMGjQIHz44YdYtmwZjj322IzOweHY63CZOHGi0prPNvyYU6dORXl5ebUfM1to0ajFdOnSBWPHjjU9tnDhwho6G40mPT7++GPce++94r7H48Enn3yCM888M+199erVC8uXL8fYsWNhs9nSeu6IESPE/99//z1eeeWVtI+fLvyYf/31Fx555JFqP2a20KJRyzn99NNN97ds2VJDZ6LRpMdtt91mciXdc889GVsLAOB0OvHQQw/FXUgl45ZbbjFZ7JMnT0YkEsn4PFLhiiuuQKtWrcT9Bx54AP/880+1HjNb6EB4LadRo0am+36/P63nb9q0CT/88AM2b96M0tJSOBwONGjQAG3btsVxxx2H/Pz8bJ5u1jEMA2vXrsX333+Pv/76C4FAAI0aNULbtm3Rs2dPuFyujPb7zz//YPXq1fjll19QUlKCaDSK/Px8NGnSBG3atMFRRx1Vbe+NYRj4+eef8eOPP2Lbtm0oKyuD2+1GgwYN0LFjR3Tv3j3j16UiEAhgyZIl2LJlC/7++280bNgQnTp1wvHHH29yo2STZcuW4csvvxT327dvjzFjxmRl3w0bNkxr/AEHHIAbb7xR1NRs3LgRzz//PK688sqsnI8Kl8uFSZMmCYujpKQE999/P+65555qO2bWqJFEX40JuU6jd+/eKT935cqVpudefPHFCceHQiFj4cKFxvDhw41DDjkkYQ68w+Ewhg4danz77bcJ91lRUWE0bNhQPO/UU09N+fyJWbNmmY791ltvJRz/zz//GOPHjzcOOuggy/PPz883rrzySuO3335L+TxWr15tDBw40HA4HAnfm7y8POPYY481nnrqKct9pVOn4fP5jDfeeMM4//zzjUaNGiU8ttfrNa644gpj48aNKb8u/vxJkyYZhlH5ud14441G/fr1lcdp3Lix8cQTT6R8jHSQayXuv//+ajlOKsf+559/jJKSEtN3uFmzZkYgEEi4n6rUaaxZs8aIRCJGhw4dxGMFBQXGzp07E+4nF+o0tGjkAFURjdtvv9303OnTpyccP3fu3JQKCfnN6XQmnBwNwzDGjRtnKkL85ZdfUn4NhmEYxx13nHh+06ZNjXA4bDn2gw8+MBo0aJDy+derV8/44IMPkp7DE088Ydjt9rTemw4dOljuLx3RePjhh9P+XAoLC425c+cmfV2GES8amzZtMo444oiUjjNy5MiUjpEOrVq1Mh1j27ZtWT+GFSrRMAzDuPfee02PP/zwwwn3U1XRMAzDeP31102PjxkzJuF+ckE0tHuqFrNu3TpTAK2goAAXXHBBys/3eDzo3LkzOnbsiMaNG6OgoAB+vx9btmzBihUrsG3bNgBAOBzGqFGj0KRJE5xzzjnKfY0aNQoPPfSQSC995plncP/996d0Ht9++63JVXH55ZdbukVefvllDB8+3ORzPuSQQ3DiiSeiRYsWcLvd2LFjB5YsWYINGzYAAEpLSzFw4EB88MEHOPXUU5X7/fTTT3HttdeaHmvdujV69uyJZs2awePxoLy8HDt27MC6devwv//9r9qybIqKitC5c2d06NABBxxwAPLz8+Hz+bBx40YsW7YMf/31FwCgvLwc559/PpYvX55WLKCsrAxnnXUW/ve//wEAunbtih49euCAAw7A33//jcWLF+PHH38U45977jn06NEDw4cPz8rr2759OzZv3izuN23aNCfagVx33XV4+OGH8ccffwCozGq64oorUFhYWG3HHDp0KO655x6sXbsWAPD0009j3LhxaN68ebUds8rUiFRpTKRjaZSVlRlfffWVMWHCBKOgoMD0vBkzZiQ91gcffGBccsklxqJFixK2XYjFYsb//d//mVxYBxxwgOHz+Syfc8YZZ4ixjRo1SmreE1dffbV4nt1uN7Zs2aIc9+233xoej0eMPfjgg40333zTiEajyvN/4403TBZJ48aNjb/++ku575NPPlmMy8/PN954442E5/znn38azz77rDF06FDLMelYGs8//7wxatQoY/ny5QmtrEgkYrzwwgtGvXr1xH4PP/xwIxaLJdw/Pw+Xy2UAMNq2bWssX748bmwsFjMefvhhw2aziee0aNFC+T5nwnvvvWc6nwEDBmRlv6liZWkYhmE89thjpm133XWX5X6yYWkYhmEsWLDAtO2KK66w3E8uWBpaNHIAVe+pvLy8uJuV66RNmzbG22+/XS3ntnHjRqOoqEgc6+mnn7Yc++6775rO66WXXkq6/7KyMtP+zzzzTMuxXbt2FeNatmyZkktj9erVhtfrFc+bOHFi3JhQKGTk5eWJMXfeeWfS/aZCdfaeWrlypemck7nf5O9Ms2bNjD/++CPhc0aOHGl6zieffJKVc3/xxRdN+73sssuyst9USSQawWDQJAb169c3bedkSzQMwzCOP/54sc3hcFi6d3NBNHTKbY4SjUbjbip3yIABA/DOO+/g3HPPrZbzaNOmDS699FJx/91337Uce8YZZ6B169bi/tNPP510/y+//DLKysrE/auvvlo57sMPP8SaNWvE/ZkzZ6bk0ujWrRtGjx5tOidDqhjetWsXotGouN+9e/ek+61pTjjhBFO6daLPRcXjjz+OJk2aJBxzww03mO5//vnnaR3Dir///tt0v7i4OCv7zQYulwu33367uL9nz56U3axV4e677xb/RyIRTJo0qdqPmSlaNGo57733Hrp06YJzzz0Xf/75Z7Uc48gjjxT/89iDjN1ux6hRo8T95cuX4/vvv0+472eeeUb837JlS5xxxhnKcXPmzBH/H3744TjllFOSnjfB4zx//fVX3DkVFBSY7nNxymVS/VxkmjdvjrPPPjvpuMMPPxwHHHCAuM/jHFWBXyQA8e9/IigNONlt6dKlGZ/fsGHD0L59e3F/+vTp1fbbIvr27Yu+ffuK+6+99pqIOeUaWjRykN69e5t6FvFbRUUFNm/ejDfffNM0wc6dOxfHHnsstm7dmvJxNmzYgHvuuQfnnHMOOnTogAMPPBAejyfuB3jNNdeI5/z1118IhUKW+7zssstMzdcSWRtfffWVaYK+8sorLdtG8EngpJNOSun1EYceeqjp/rfffmu6X69ePXTs2FHcnzJlCt5444190k5Cxdq1azFx4kQMHDgQ7dq1Q6NGjeB2u+M+F15N/dtvv6W8/169eqVcNc0L0Pbs2ZPyMRIhB5bT6UpLPdiS3WRrMh3y8vJM66D4fL59Uj/BrY1YLIbbbrut2o+ZETXiFNOYqErK7dNPP2167vHHH580YLl161bjnHPOUcZHUrkl84Vzn3FxcbFl8HzEiBFinNPptNzvzp07Tce32WzKmE+iG3/+I488EneMZ555Ju51Nm/e3Lj22muNN954I61aDyLdmMb3339v8lmnc/N4PAn3zcfedNNNKb+Gk046STyvT58+KT8vEXPmzMk4pnH00Uen9H58+umnlvtIFNMgYrGYcdRRR4kxbrfb2Lp1q2lMNmMaxJlnnmka99VXX5m265iGpspcddVVuOiii8T9L774ImGnzvXr1+PYY4+tUjfPQCCQcDtPXS0pKcGrr74aN2bPnj14/fXXxf3Bgwdb+th37dplum8YRkpXm/zGKSkpiTvGlVdeGZdyu23bNjzxxBM4//zz0axZM7Ru3RojRozA/PnzE1pbmbBixQocd9xxGbtVkn0mnHTcQdwiMbLUqZe7vACIFNdUWLVqldICz3YLine truncated
"text/plain": [
"<Figure size 400x500 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
@@ -598,21 +542,11 @@
"output_type": "stream",
"text": [
"Gaussian Mixture Graph Net\n",
"R2 of mean: 0.9714 R2 of std: 0.1178\n",
"Wasserstein-2 distance 1d: 0.0530\n",
"Wasserstein-2 distance nd: 0.7163\n"
"R2 of mean: 0.9717 R2 of std: 0.1322\n",
"Wasserstein-2 distance 1d: 0.0528\n",
"Wasserstein-2 distance nd: 0.7149\n"
]
},
{
"data": {
"image/png": "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33wzHA6H/v5Pf/pTyc8pGCOiIZQMdS0H3jjnQ9M0ZDKZZl80vUdLOe6443SXT0NDA1555RV9Hw+AH3TQQRg8eHCrztEWOut9I4444ggcf/zx+vs5c+aUPKtpjz32wMUXX6y/X7ZsGebNm1fScwrGiGgIJaNbt24570OhUAfVJBebzYZzzjlHf09CoWlajruqI6wMoPPeNw6PbWia1i49/2nTpsHtdue8N0pkEEqLiIZQMrp3757zfuPGjQV9bt9994W2da2XJq9ijIoGcgXhnXfeQVVVFd577z2sWbMGAOBwOHD22We3quzp06cX5CYaPXq04ec7830jhg0bhtNOO01///rrr+e49UrBLrvsgiuuuEJ//9VXX+GFF14o6TmFpohoCCVjv/32y3n/6aefdlBNmrL//vvjV7/6FYCto42fe+65nAD4mDFjmjTehZLNZgtyE2UyGcPPd+b7xrn11lvbPatp6tSpOe67P//5z212twktQ0RDKBk8ywbY6ofuTHBr48knn8ScOXMM97U3nf2+Efvss0+ONbZw4UK8/fbbJT3nTjvthAkTJujvV65cidmzZ5f0nEIuIhpCyTjkkEPgcrn09++9917Jp55oCb/73e9gs9kAAN9//72etdStWzecfPLJrS735ptvNnUT8dfChQsNP9/Z7xvn5ptvzln/oj2sjWuvvRbl5eX6++nTp+dMuyKUFhENoWR4PJ6cnmg6ncYTTzzRgTXKpVevXjj22GObbD/rrLPgdDo7oEZb6ez3jTNgwABcdNFF+vtly5bh1VdfLek5y8vL8cc//lF/v27dOjzyyCMlPaewDRENoaRce+21OYPj7rzzTqxdu7YDa5SLkRuqI11TRGe/b5xp06blWEbTpk3Lmda9FEyYMAE9evTQ38+YMaPg1GShbYhoCCVln332wW9/+1v9fSQSwbnnnotoNNqBtdrGqaeeinvuuUd/Pfjggzj00EM7ulqd/r5x+vbti8svv1x//+WXX5Y8q8nn82Hq1Kn6+02bNuG+++4r6TmF/0+7rEQu7NCEQiGtf//+GgD9dcghh2gbN25scVn9+vXTy+jXr5/pcfxcY8eObX3lFfbff/+Czl8MOuK+aVrr7t3GjRs1n8+nf85ut+eUc8899xRcv/3337+gc8bjca1Pnz6m55wwYUJB5QgtQywNoeSUlZVhzpw5OYPWPvroIwwYMAA33XQT1q9fn/fzmUwG7777LsaOHdtpXTSloCvdt549e+Lqq6/W37dHGqy6FK2k3rYP9uYPEYS2M2TIEHz44Yc4+eST8cMPPwDYOoXHrbfeiltvvRWDBw/G0KFDUVlZiYqKCiQSCYRCIfzwww/49NNPUVdX16TMkSNHtvNVtD9d6b798Y9/xEMPPdSuI9gvvvhi3HnnnVi1alW7nXOHp6NNHWHHora2Vhs/frzmcrlyXAkteR166KHaokWL8p4HrXCxFEJ7uqc47XXfNK1t9+7WW281PHcp3FPEM888Y3hOcU+VBnFPCe1KRUUF7rvvPqxcuRLXXXddk9HPRlitVuy999744x//iK+++goffPABjjzyyHaobeehq9y3iRMnYqeddirpOVTOOeecnKVohdJi0bQS58YJQjNs2rQJK1aswJYtW1BdXY1YLIaysjJUVFSgb9++GDp0aJOZXwW5b0LHIKIhCIIgFIy4pwRBEISCEdEQBEEQCkZEQxAEQSgYEQ1BEAShYEQ0BEEQhIIR0RAEQRAKRqYRaSHZbBa//PILAoFAztTVgiAIXRVN0xCJRLDzzjvnLOFrhIhGC/nll1/Qt2/fjq6GIAhC0Vm3bh369OmT9xgRjRYSCAQAbL25ZWVlHVwbQRCEthMOh9G3b1+9fcuHiEYLIZdUWVmZiIYgCNsVhbjcJRAuCIIgFIyIhiAIglAwIhqCIAhCwYhoCIIgCAUjoiEIgiAUjIiGIAiCUDCScivkJR6P480338SyZcsQCoUga3YJQufA7XajT58++PWvf4099tij3c4roiGYcscdd+Avf/kLIpEIdtllF3Tr1q3ZKQYEQWgfYrEYfv75Z0yaNAmHHHIIXn755XaZrUJEQzDklltuwc0334yrr74al19+Ofbaa6+OrpIgCAqNjY147bXXcN1112HkyJFYtGhRs9OAtBVZI7yFhMNhBINBhEKh7XZE+Lp167Drrrti2rRpmD59ekdXRxCEZli7di0OPvhgnHHGGXjwwQdb/PmWtGviaxCaMGfOHDidTkyePLmjqyIIQgH069cP5557Lv71r38hk8mU9FwiGkIT3n33XRx11FEIBoMdXRVBEArklFNOwaZNm/DNN9+U9DwiGkITamtr0bt3746uhiAILYCe2dra2pKeR0RDaEImk4HD4ejoagiC0ALomRX3lCAIgtBpENEQhGZYs2YNLBYLLrzwwo6uiiB0OCIagiAIQsGIaAiCIAgFI6IhCIIgFIyIhtAlWLhwISwWC26++WYsX74cxx57LAKBAILBIE477TSsWbPG8HOzZs3CIYccAr/fD7/fj0MOOQSzZ882PDaTyeCvf/0rBgwYALfbjQEDBmDGjBnLine truncated
"text/plain": [
"<Figure size 400x500 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
@@ -625,70 +559,16 @@
"output_type": "stream",
"text": [
"VGAE\n",
"R2 of mean: 0.9992 R2 of std: 0.9433\n",
"Wasserstein-2 distance 1d: 0.0119\n",
"Wasserstein-2 distance nd: 0.2079\n"
"R2 of mean: 0.9986 R2 of std: 0.9365\n",
"Wasserstein-2 distance 1d: 0.0136\n",
"Wasserstein-2 distance nd: 0.2303\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAY0AAAG7CAYAAAA/hMlhAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACcrElEQVR4nO2dd5hURdr2785xAiOCgaCigGlVVl0VVERFhTViXhO6LiZU5H0V3NfErmGDAfOaQMyCgothV0VRUHcVxRxBlCBpgEmdw/n+4HuKp6vr9HTP9ASG53ddfXU41efUOd2n7npCVTksy7IgCIIgCEXg7OgKCIIgCJsPIhqCIAhC0YhoCIIgCEUjoiEIgiAUjYiGIAiCUDQiGoIgCELRiGgIgiAIRSOiIQiCIBSNu6MrIAhdGcuy8OWXX+LHH39EbW0tamtr4XA4UF1djZqaGuy+++4YMGAAnE7pvwmbCZYgdBFuuOEGC4B63Hjjja3eZyaTsbbffnu1T7fbba1cubLZ77355pvWmWeeafXo0SOnTqZHMBi0jjzySOsf//iHtWbNmlbXeebMmXnHePDBB1u8v0MPPbTZcyjmsXDhwlafm9DxiGgIXYbFixdbDodDNVL9+vVr9T7//e9/5zR8I0eOLFj+ww8/bFUj6/P5rEsvvdRatmxZi+t8wgkn5O33wAMPbPH+RDQEjrinhC7DTjvthCFDhmDevHkAgMWLF+O9997D4MGDW7zPadOm5bw/99xzbctOnToVY8aMQTKZzPnc5/PhgAMOwI477oju3bvD5/Nh1apVWLVqFT744AOsX79elU0kErjvvvvw2WefqfMohdraWrzyyit5n3/wwQf4/vvv0b9//5L3qeNyuVr0PYfD0epjC52AjlYtQSgnjz76aE7v9g9/+EOL99XQ0GAFg0G1r27dulnxeNxY9uabb87rWe++++7W9OnTrWg0anuMdDptvfvuu9Yf/vAHy+PxqO8OHjy4RXWePHmybU//2muvbdE+dUtjyZIlLdqP0DUQ0RC6FHpDX11dbdvQN8djjz2W01hefPHFxnKvvfZajlsMgHXTTTdZmUympOMtWbLE+t3vftcq0dhnn31UHRwOh+V2u9X73r17l1wnyxLREHKRlA2hS1FRUYGTTjpJva+rq8M///nPFu2rGNfU6tWrcfbZZ8NiKwzcfffduP7660vOiNphhx3w5JNP4vHHH0coFCq5vl988QUWLlyo3g8ePBhHH320er9s2TK8/fbbJe9XEDgiGkKXQ2/c9ca/GH7++We888476v3AgQPxm9/8Jq/cnXfeidraWvX+uOOOw9ixY0s+Huecc87BM888U/L3pk6dmrefc845p2AZQSgVEQ2hyzFs2DD07t1bvf/Xv/6FtWvXlrSPJ554Isd6MFkZjY2NePDBB9V7l8uFe+65pwU1zqempqak8ul0Gk899ZR67/P5cMopp+C4445DdXW1+vzFF19EY2NjWeoobJmIaAhdDqfTibPPPlu9T6fTePrpp0vaxxNPPJGzv7POOiuvzAsvvID6+nr1/uijj0afPn1aUOPW869//QurV69W74899lhUV1fD5/Ph1FNPVZ9Ho1HMmDGjI6oodBFENIQuSWtcVJSeShx++OHo1atXXjnuvgKA008/vcRalo/HH3885z0XTXFRCeVEREPokvTv3x8HHnigev/JJ5/gq6++Kuq7usCcd955xnLz58/Peb/ffvuVVskysWHDBsyePVu932qrrXDMMceo94MHD0a/fv3U+3nz5mHJkiXtWkeh6yCiIXRZWmJtJBIJPPfcc+p9ZWUlTjzxxLxysVgMixYtUu/D4XBZBs61hGeeeQaJREK9P/300+HxeHLKcMvDsqwWJQcIAiCiIXRhTjvtNPj9fvX+qaeeQjabLfid2bNnY8OGDer9KaecgkAgkFdu3bp1Oe979OjRYSOeddeU7o4CNooGr9+0adNyAv2lsPPOO8Ptdpf0GD9+fIuOJXQ+RDSELkt1dTWOP/549X7FihWYM2dOwe8U65riU38AQFVVVcsq2Uq++eYbfPjhh+p9//79sf/+++eV22mnnXKmU/nxxx9bNE0JAGQymRY9hK6BiIbQpdEb/UJumbVr1+Jf//qXet+vXz8MGTLEWFZPWy1lMN4111xTVO980qRJze6rUABcR7dA9O8KQjGIaAhdmiOPPBLbbbedej9z5kw0NTUZyz799NNIpVLqvcnNQ4TD4Zz3kUik6DoV2zNvzpWWyWRyUoMdDocxNZg49dRTc9x106dPRzQaLbrexJIlS2BtnIKo6Mddd91V8nGEzomIhtClcblcOQ1pJBLBCy+8YCzLrRCHw1FQNPTBd3y8Rnvx5ptv4pdfflHvhwwZgh122MG2fFVVFY477jj1vrGxES+++GJbVlHogohoCF2eYrKovvrqK3zyySfq/aGHHlqwAd5qq61y3q9Zs6bowPLf//53Y2+81HmhTNOGNIe4qITWIqIhdHl22223nDEUc+fOxbJly3LK6I1noXUzACAYDGKnnXZS75uamnIGBLY19fX1mDVrlnrv9/txyimnNPu9o446Cj179lTv33rrLSxfvrwtqih0UUQ0hC0CLgLZbBZPPvlkzns+b1MoFMLJJ5/c7D4PPvjgnPc8i6mtef755xGPx9X7eDyOrbbaqtngut/vx5o1a9T3stmsjNkQSkJEQ9giOOOMM+D1etV7HkDWYwOjRo3KC3SbOPTQQ3PeP/vss2WoaXGYpgIpNsCuu9HERSWUgoiGsEVQU1ODY489Vr3/5ptv8NFHHwEo3TVFjBo1CpWVler9v/71LyxdurQMtS3MDz/8gPfff79s+/v+++/xn//8p2z7E7o2IhrCFoMpIN7Y2JgTG+jTpw8OO+ywovZXWVmJMWPGqPfZbLbVa2kUgy5yf/rTn0pOgdVdUjKJoVAsIhrCFsMxxxyDHj16qPfPPvssnnnmmZyxCuecc05J04FcddVVOem3//znP8u2poYJy7LyxmYUGtBnx0knnZTjgnvuuedy5q8SBDtENIQtBrfbjd/97nfqfW1tLa655pqcMsWkrXK22WYbTJs2LUdoLr/8ckyaNKnZwXkt4a233spxgR1yyCHo27dvyfsJhUJ5y+K+9NJLZamj0LUR0RC2KPRpRerq6tTrgw46CLvsskvJ+xw5ciRuvPHGnM9uuOEG7LXXXpgxYwZisVjB769fvx4PPfQQfv/73zd7rJbGX0zo3xUXlVAMDqulU10KwmbKPvvsg08//TTv84ceeggXXnhhi/f7yCOP4JJLLsmZigTYuPTqgQceiJ122gndu3dHMBhEU1MTVq9eja+//hqffvpp3oR+lZWVeOKJJ3JGcDc1NWGbbbZRU5YEg0GsWrUKFRUVLaqvZVno27evGrPicrmwfPlybLPNNjnlhg4dmrPglMvlatHxrr/+elx//fUt+q7QibAEYQvjrrvusgDkPPx+v1VXV9fqfX/wwQfWwQcfnLf/Yh9+v98aM2aMtXr16rx9P/bYYzllzzzzzFbXd+LEiTn7/Nvf/pZX5tBDD23x+fDHDTfc0Or6Ch2PuKeELY4zzzwzb5GiE044oSzTmx9wwAF499138frrr+P000/H1ltv3ex3wuEwhg0bhgcffBArV67Egw8+mBOwJ4pZN6NUdBeVjNkQmkPcU4LQhliWhS+++AKLFy9GbW0t1q1bB6fTiW7duqFbt24YOHAgdtttNzid0n8TNg9ENARBEISike6NIAiCUDQiGoIgCELRiGgIgiAIRSOiIQiCIBSNiIYgCIJQNCIagiAIQtG4O7oCmxvZbBa//PILKioqSpoNVRAEobNiWRYaGxux3XbbNTtmSESjRH755Rf07t27o6shCIJQdpYtW4ZevXoVLCOiUSI0OdyyZctyVm0TBEHYXGloaEDv3r2LmvxSRKNEyCVVWVkpoiEIQpeiGJe7BMIFQRCEohHREARBEIpGREMQBEEoGhENQRAEoWhENARBEISiEdEQBEEQikZSboWCxONxvP766/jwww9RX18PWbNLEDoHfr8fvXr1wnHHHYeddtqp3Y4roiHYctttt+GWW25BY2Mjtt9+e9TU1MiypILQSYjFYli6dCnGjRuH3/zmN5g+fXq7zFYhoiEYuemmm3DjjTfi8ssvx0UXXYRdd921o6skCIJGJBLBK6+8gquvvhpDhw7FO++80+w0IK1F1ggvkYaGBlRVVaG+vr7LjghftmwZ+vTpg+uuuw6TJk3q6OoIgtAMP//8M/bff3+cfPLJuO+++0r+fintmvgahDxmzJgBr9eL8ePHd3RVBEEogr59++Kss87CCy+8gEwm06bHEtEQ8nj77bdx6KGHoqqqqqOrIghCkRx77LFYvXo1vv766zY9joiGkMf69eux7bbbdnQ1BEEoAbpn169f36bHEdEQ8shkMvB4PB1dDUEQSoDuWXFPCYIgCJ0GEQ1BaIaffvoJDocD5513XkdXRRA6HBENQRAEoWhENARBEISiEdEQBEEQikZEo4VYlmV8CG3D3Llz4XA4cOONN2LBggU48sgjUVFRgaqqKpx44on46aefjN+bMmUKfvOb3yAcDiMcDuM3v/kNpk6daiybyWTwl7/8BTvvvDP8fj923nln3Hrrrchms7b1evfdd3Hssceie/fu8Pl82GWXXfB///d/iEajZThrQeh8iGi0kKamprxHJBJBNBpFPB5HKpVCJpPpskLy8ssvw+FwwOFw4Omnny5Y9t///rcq63A4mk0JPOmkk+BwOODxeLBs2bKcbR999BEOOeQQeL1ejBkzBvvuuy9mzZqFI444AvF4PKfs5ZdfjvPPPx8rVqzABRdcgAsuuAArVqzA6NGjccUVV+Qd9w9/+AMmTJiAbDaLSy+9FEcddRTuuOMOY1kAeOCBBzB06FC89957GDlyJC6//HL06tULN998M4488kgkk8mC59lV+PnLine truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 400x500 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
" \r"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Flow-Matching Graph Net\n",
"R2 of mean: 0.9973 R2 of std: 0.9801\n",
"Wasserstein-2 distance 1d: 0.0164\n",
"Wasserstein-2 distance nd: 0.1939\n"
]
},
{
"data": {
"image/png": "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ZZfB5/PV2zHPPvtsPPjgg/juu+8AAM8++yzGjh2Ljh071tsxtTtRIld3YjweN4488si0fvTv399YtWpVRttAIGBcfPHFaW1bt25tbNiwQbnvxx57LM3NsmPHDmW7zZs3i3ZWq1U87tixo2m/586dm9aPhQsXZv0+8sXMnWgYhjFgwACxffz48cr3T548Oc0VlUqlDMMw8nYnnnfeecZjjz1m/Pbbb1nbbdmyxRg9enTavh966KGs78nHtabiiiuuyPgvvPDCC0YikVC2D4fDxrvvvmscc8wxxrfffqtsw/+35Fpr27at8X//93/K9m+99VaaC87j8RiBQKAgn5m7t+x2u2GxWAyr1Wo8/PDDRjQazWj//fffGx07dkzb/8cff2y6/0QiYRx11FFp7Y877jhj/fr1GW0DgYBxySWXGAAMp9NZL+7EDz/8MG2/w4YNK8h+c0XlTiSefPLJtNfuv/9+0/3srjuR4OEAAMZll11mup9CuBObhYjRIJ7LbY899si671xF7KWXXko7/lFHHWUEg8Gs+6aTiW6jR49Wtlu+fHlau3fffVfZ7rXXXhNtTjrppLTYx4oVK5TvGT9+vGjj9/uNeDyetc/5kk3EnnvuObG9U6dOQqA4Rx99tGhz++23i+35ili+XHPNNWnxAzNBMYzdE7EFCxakvbdt27bGTz/9lPP7Vd+ZYWTG6/x+v/Hzzz9n3dcDDzyQ9p6XXnrJtG1dRYxur732Wta+yLHgiy66yLTttGnT0tr269ev1njPRRddlNGnQv2HXn311ZzO6/oim4hFo9G0/0Z5ebnpRXGhRMwwDKNv377iNZvNZvz666/K/eiYGCOZTOZ0K1Sq6RNPPCEeW61WvPjii/B4PLW+Z++99xbP33jjjTRXJHHIIYdgzz33FM/NYlx8+/HHH5/mGszlPQMHDkybpFjfnHPOOaIczbp16zLcab/88gu+/PJL8bwQrsRcueuuu4Trb8OGDfVWIFp2Db/44os48MADc35/rnOG7rvvPqW7lnPNNdekuU35d19IRowYUes8v379+uHII4/MqS/PPvuseGyxWPDcc8/VmmU5adIk7LHHHjn2OD+2b9+e9rysrKxejlMXHA4H7rrrLvG8srISjzzySL0f94EHHhCPE4kE7r777no7VrMRsYZk3bp1aYPcCSecgEMOOaTW9/l8Plx99dXieSQSMS3SOWTIEPHYTJDmzp0rHg8dOrRWEausrMQ333wjnh933HG19rmQlJWV4fTTTxfP5QQP/vxPf/oTunXr1mB9a9++Pdq1ayee83TpQrFjx46037tPnz7KuOju4nQ6cemll9barry8HD179hTPf/7554L3BQCuvfbanNrxyuurVq1SJpvLine truncated
"text/plain": [
"<Figure size 400x500 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
" \r"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Latent Flow-Matching Graph Net\n",
"R2 of mean: 0.9990 R2 of std: 0.9602\n",
"Wasserstein-2 distance 1d: 0.0110\n",
"Wasserstein-2 distance nd: 0.1475\n"
]
},
{
"data": {
"image/png": "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47M+/2uuuQZvvvkmAKBLly4YOXIkDj30UEQiEaxdu1Y1uQHA2rVrcfPNN2PevHlp+7FYLLrnbzabDU2ytal30dJZuHAhLrroIs255+fnY9SoUejRowdisRg2bNiAjz/+WG3z448/4oQTTsBnn32ma9YdNGgQfD6fWuTnww8/NDQ/7t+/H19//XXa8g8//NCwSt+nn36q+Y2deuqpWZ9vfbj88svVIlcvvfQSZsyYoftbWLp0KXbv3g0A8Hg8GDduXL2Oazab0bdvX/Tt2xeHHnoo8vLykEgksGfPHqxbt05z/f71r3/B6/Vi5syZafsxmUzqbz2VSmlSDo3+12k7mZ9//hknnXQSdu3apVnes2dPDBs2DB06dIDJZMLevXvx1VdfYf369Wn3l0z8+uuvuOuuu/Drr7/CbDbj+OOPx+DBg+Hz+bB79268//772L59u9r+7rvvxoknnohTTjkl62NkSyKRwPnnn4+VK1cCAHr37o2TTz4Z7du3R1VVFVauXIkvvvhCbb9kyRI89NBDNcYVLFiwANddd53meygqKsKoUaPQrVs3RCIRfPPNN/jkk08QjUYxYcIETJ8+vcHPD0Ba4GNDuEwaggcffBDvvfeempJ81113YcmSJY16zL/85S+YO3cuIpEIgOrf1u9///vGve/XRZ00lkXjvffeUy677DJl6dKlSjgcNmyXSqWU//73vxr3SnFxsRIMBjPu38g9kQ07d+5USkpKNArxueeeM3y6+uijjzRPKy6XK6MbReyb3W5XAChut1uZO3eukkwm09ovW7ZMKSgo0HwPmzZtMtx/XV0OdaUlWDS2b9+u+Hw+TfuJEycqfr8/re2mTZuU4447TtN2yJAhSiKR0N336NGj1XYDBgww7MMrr7yitrNYLOr7yy67zHCbu+++W23n8XgMf2N1xcii4ff7NSZ8I0vNhRdeqHsetbFoVFRUKCNHjlReeuklpaysLGN/N2zYkGZZ+OyzzzJuU5une5lQKJRmhTrqqKMyns/evXuVWbNmKcccc4zuevl3S//jgwYN0nVTxWKxNJfbkCFDGuycxSds6ku7du2U//73v7rtX331VbUd3ZsqKysN979z5860/72bb75Z1834008/qf97DoejUSwaf/7znzX7ffTRRxtkv9liZNFQFEUZN26cpm+rVq3S3UdDWTQURev6BKAsWLDAcD9iu5xwndSWLVu2aHzuzz77bMb29REaY8aMUbctLCxUNmzYUOM227ZtU9q1a5fV4CK7OKxWq7J8+fKM+3/ppZc029xzzz2GbZtbaJhMJsVisWT1OvfccxvkPC6//HJN2+uvvz5jn/1+v9KvXz/NNvPnz9dt+9RTT2nObf/+/brt/vjHP6rLine truncated
"text/plain": [
"<Figure size 400x500 with 1 Axes>"
"<Figure size 1400x1400 with 9 Axes>"
]
},
"metadata": {},
@@ -699,12 +579,17 @@
"NUM_SAMPLES = 200\n",
"BATCH_SIZE = 200 # Number of samples generated in parallel. Reduce this number if you run out of memory.\n",
"\n",
"fig, ax = plt.subplots(3, 3, figsize=(14, 14)) \n",
"ax = ax.flatten()\n",
"curr_ax = 0\n",
"\n",
"graph = dataset.get_sequence(SIM_IDX, n_in=T[SIM_IDX])\n",
"gt_mean = graph.target.mean(dim=1)\n",
"gt_std = graph.target.std (dim=1)\n",
"# Plot the ground-truth PDF on the upper half of the ellipse\n",
"vmin, vmax = graph.target.min().item() - 0.1, graph.target.max().item() + 0.1\n",
"pdf(graph.pos, graph.target, 'Ground truth', vmin=vmin, vmax=vmax)\n",
"pdf(ax[curr_ax], graph.pos, graph.target, '*Ground truth*', vmin=vmin, vmax=vmax)\n",
"curr_ax += 1\n",
"\n",
"# DGN inference\n",
"steps = dgn.nn.diffusion.DiffusionStepsGenerator('linear', DGN.diffusion_process.num_steps)(NUM_DENOISING_STEPS)\n",
@@ -722,7 +607,8 @@
"print(f\"Wasserstein-2 distance 1d: {w2_distance_1d:.4f}\")\n",
"print(f\"Wasserstein-2 distance nd: {w2_distance_nd:.4f}\")\n",
"# Plot the PDF on the upper half of the ellipse\n",
"pdf(graph.pos, pred, 'DGN', w2_distance_1d=w2_distance_1d, w2_distance_nd=w2_distance_nd, vmin=vmin, vmax=vmax)\n",
"pdf(ax[curr_ax], graph.pos, pred, 'DGN', w2_distance_1d=w2_distance_1d, w2_distance_nd=w2_distance_nd, vmin=vmin, vmax=vmax)\n",
"curr_ax += 1\n",
"\n",
"# LDGN inference\n",
"steps = dgn.nn.diffusion.DiffusionStepsGenerator('linear', DGN.diffusion_process.num_steps)(NUM_DENOISING_STEPS)\n",
@@ -739,8 +625,46 @@
"w2_distance_nd = dgn.metrics.w2_distance_nd(pred, graph.target)\n",
"print(f\"Wasserstein-2 distance 1d: {w2_distance_1d:.4f}\")\n",
"print(f\"Wasserstein-2 distance nd: {w2_distance_nd:.4f}\")\n",
"# Plot the PDF on the upper half of the ellipse\n",
"pdf(graph.pos, pred, 'LDGN', w2_distance_1d=w2_distance_1d, w2_distance_nd=w2_distance_nd, vmin=vmin, vmax=vmax)\n",
"pdf(ax[curr_ax], graph.pos, pred, 'LDGN', w2_distance_1d=w2_distance_1d, w2_distance_nd=w2_distance_nd, vmin=vmin, vmax=vmax)\n",
"curr_ax += 1\n",
"\n",
"# skip one\n",
"curr_ax += 1\n",
"\n",
"# FMGN inference\n",
"steps = np.linspace(0, 1, NUM_FM_STEPS )\n",
"pred = FMGN.sample_n(NUM_SAMPLES, graph, steps=steps, batch_size=BATCH_SIZE).cpu().squeeze(-1)\n",
"mean = pred.mean(dim=1)\n",
"std = pred.std (dim=1)\n",
"# Compute the accuracy of the mean and std\n",
"mean_r2 = dgn.metrics.r2_accuracy(mean, gt_mean)\n",
"std_r2 = dgn.metrics.r2_accuracy(std , gt_std )\n",
"print('Flow-Matching DGN')\n",
"print(f\"R2 of mean: {mean_r2:.4f}\", f\"R2 of std: {std_r2:.4f}\")\n",
"# Compute the Wasserstein-2 distance\n",
"w2_distance_1d = dgn.metrics.w2_distance_1d(pred, graph.target)\n",
"w2_distance_nd = dgn.metrics.w2_distance_nd(pred, graph.target)\n",
"print(f\"Wasserstein-2 distance 1d: {w2_distance_1d:.4f}\")\n",
"print(f\"Wasserstein-2 distance nd: {w2_distance_nd:.4f}\")\n",
"pdf(ax[curr_ax], graph.pos, pred, 'FM DGN', w2_distance_1d=w2_distance_1d, w2_distance_nd=w2_distance_nd, vmin=vmin, vmax=vmax)\n",
"curr_ax += 1\n",
"\n",
"# LFMGN inference\n",
"steps = np.linspace(0, 1, NUM_FM_STEPS )\n",
"pred = LFMGN.sample_n(NUM_SAMPLES, graph, steps=steps, batch_size=BATCH_SIZE).cpu().squeeze(-1)\n",
"mean = pred.mean(dim=1)\n",
"std = pred.std (dim=1)\n",
"# Compute the accuracy of the mean and std\n",
"mean_r2 = dgn.metrics.r2_accuracy(mean, gt_mean)\n",
"std_r2 = dgn.metrics.r2_accuracy(std , gt_std )\n",
"print('Latent Flow-Matching DGN')\n",
"print(f\"R2 of mean: {mean_r2:.4f}\", f\"R2 of std: {std_r2:.4f}\")\n",
"w2_distance_1d = dgn.metrics.w2_distance_1d(pred, graph.target)\n",
"w2_distance_nd = dgn.metrics.w2_distance_nd(pred, graph.target)\n",
"print(f\"Wasserstein-2 distance 1d: {w2_distance_1d:.4f}\")\n",
"print(f\"Wasserstein-2 distance nd: {w2_distance_nd:.4f}\")\n",
"pdf(ax[curr_ax], graph.pos, pred, 'FM LDGN', w2_distance_1d=w2_distance_1d, w2_distance_nd=w2_distance_nd, vmin=vmin, vmax=vmax)\n",
"curr_ax += 1\n",
"\n",
"# Bayesian Graph Net inference\n",
"pred_list = []\n",
@@ -761,8 +685,8 @@
"w2_distance_nd = dgn.metrics.w2_distance_nd(pred, graph.target)\n",
"print(f\"Wasserstein-2 distance 1d: {w2_distance_1d:.4f}\")\n",
"print(f\"Wasserstein-2 distance nd: {w2_distance_nd:.4f}\")\n",
"# Plot the PDF on the upper half of the ellipse\n",
"pdf(graph.pos, pred, 'Bayesian GNN', w2_distance_1d=w2_distance_1d, w2_distance_nd=w2_distance_nd, vmin=vmin, vmax=vmax)\n",
"pdf(ax[curr_ax], graph.pos, pred, 'Bayesian GNN', w2_distance_1d=w2_distance_1d, w2_distance_nd=w2_distance_nd, vmin=vmin, vmax=vmax)\n",
"curr_ax += 1\n",
"\n",
"# Gaussian Mixture Graph Net inference\n",
"pred = GaussianMixGN.sample_n(NUM_SAMPLES, graph, batch_size=BATCH_SIZE).cpu().squeeze(-1)\n",
@@ -778,8 +702,8 @@
"w2_distance_nd = dgn.metrics.w2_distance_nd(pred, graph.target)\n",
"print(f\"Wasserstein-2 distance 1d: {w2_distance_1d:.4f}\")\n",
"print(f\"Wasserstein-2 distance nd: {w2_distance_nd:.4f}\")\n",
"# Plot the PDF on the upper half of the ellipse\n",
"pdf(graph.pos, pred, 'GM-GNN', w2_distance_1d=w2_distance_1d, w2_distance_nd=w2_distance_nd, vmin=vmin, vmax=vmax)\n",
"pdf(ax[curr_ax], graph.pos, pred, 'GM-GNN', w2_distance_1d=w2_distance_1d, w2_distance_nd=w2_distance_nd, vmin=vmin, vmax=vmax)\n",
"curr_ax += 1\n",
"\n",
"# VGAE inference\n",
"pred = VGAE.sample_n(NUM_SAMPLES, graph, batch_size=BATCH_SIZE).cpu().squeeze(-1)\n",
@@ -795,45 +719,41 @@
"w2_distance_nd = dgn.metrics.w2_distance_nd(pred, graph.target)\n",
"print(f\"Wasserstein-2 distance 1d: {w2_distance_1d:.4f}\")\n",
"print(f\"Wasserstein-2 distance nd: {w2_distance_nd:.4f}\")\n",
"# Plot the PDF on the upper half of the ellipse\n",
"pdf(graph.pos, pred, 'VGAE', w2_distance_1d=w2_distance_1d, w2_distance_nd=w2_distance_nd, vmin=vmin, vmax=vmax)\n",
"\n",
"# FMGN inference\n",
"steps = np.linspace(0, 1, NUM_DENOISING_STEPS + 1)\n",
"pred = FMGN.sample_n(NUM_SAMPLES, graph, steps=steps, batch_size=BATCH_SIZE).cpu().squeeze(-1)\n",
"mean = pred.mean(dim=1)\n",
"std = pred.std (dim=1)\n",
"# Compute the accuracy of the mean and std\n",
"mean_r2 = dgn.metrics.r2_accuracy(mean, gt_mean)\n",
"std_r2 = dgn.metrics.r2_accuracy(std , gt_std )\n",
"print('Flow-Matching Graph Net')\n",
"print(f\"R2 of mean: {mean_r2:.4f}\", f\"R2 of std: {std_r2:.4f}\")\n",
"# Compute the Wasserstein-2 distance\n",
"w2_distance_1d = dgn.metrics.w2_distance_1d(pred, graph.target)\n",
"w2_distance_nd = dgn.metrics.w2_distance_nd(pred, graph.target)\n",
"print(f\"Wasserstein-2 distance 1d: {w2_distance_1d:.4f}\")\n",
"print(f\"Wasserstein-2 distance nd: {w2_distance_nd:.4f}\")\n",
"# Plot the PDF on the upper half of the ellipse\n",
"pdf(graph.pos, pred, 'Flow-Matching GNN', w2_distance_1d=w2_distance_1d, w2_distance_nd=w2_distance_nd, vmin=vmin, vmax=vmax)\n",
"\n",
"# LFMGN inference\n",
"steps = np.linspace(0, 1, NUM_DENOISING_STEPS + 1)\n",
"pred = LFMGN.sample_n(NUM_SAMPLES, graph, steps=steps, batch_size=BATCH_SIZE).cpu().squeeze(-1)\n",
"mean = pred.mean(dim=1)\n",
"std = pred.std (dim=1)\n",
"# Compute the accuracy of the mean and std\n",
"mean_r2 = dgn.metrics.r2_accuracy(mean, gt_mean)\n",
"std_r2 = dgn.metrics.r2_accuracy(std , gt_std )\n",
"print('Latent Flow-Matching Graph Net')\n",
"print(f\"R2 of mean: {mean_r2:.4f}\", f\"R2 of std: {std_r2:.4f}\")\n",
"# Compute the Wasserstein-2 distance\n",
"w2_distance_1d = dgn.metrics.w2_distance_1d(pred, graph.target)\n",
"w2_distance_nd = dgn.metrics.w2_distance_nd(pred, graph.target)\n",
"print(f\"Wasserstein-2 distance 1d: {w2_distance_1d:.4f}\")\n",
"print(f\"Wasserstein-2 distance nd: {w2_distance_nd:.4f}\")\n",
"# Plot the PDF on the upper half of the ellipse\n",
"pdf(graph.pos, pred, 'Latent Flow-Matching GNN', w2_distance_1d=w2_distance_1d, w2_distance_nd=w2_distance_nd, vmin=vmin, vmax=vmax)"
"pdf(ax[curr_ax], graph.pos, pred, 'VGAE', w2_distance_1d=w2_distance_1d, w2_distance_nd=w2_distance_nd, vmin=vmin, vmax=vmax)\n",
"curr_ax += 1\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"First, the ground truth distribution is worth a closer look: it's a bi-modal distribution, caused by the recurring vortex shedding behind the ellipse. Hence, it's important for models to capture the two extremes (regions with higher density), as well as the less dense inner part. Comparing the GT version with the distributions of the different approaches shows that the DGN methods faithfully reproduce the distribution. The noise of the regular DGN averages out to some extent here, it can even exhibit a performance that surpasses the LDGN version. As before, flow matching can produce these distributions at a fraction of the cost, and hence is generally preferable.\n",
"\n",
"The problems of the Baysian NN and the Gaussian mixture model very clearly show up in their distributions. The problems of the VGAE approach show up more clearly here: it has mode-collapse issues, which are even more severe in more complex scenarios.\n",
"\n",
"The graph-based Wasserstein distance largely captures the intuition behind the observations above, but fails to illustrate how well outer (and inner) parts of the distribution are matched. Nonetheless, it's of course crucial as a tool for higher-dimensional distributions such as those of the 3D wing case from the previous page. \n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {