phiflow 2.2 updates

This commit is contained in:
NT committed 2022-08-27 13:53:10 +02:00
1 parent dc64cbf008
commit 8502c1e36c
4 files changed
+170 -141

No files matched your search

+135 -92
View File
@@ -2,7 +2,9 @@
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"metadata": {
"id": "BiKkPaSYZKnF"
},
"source": [
"# Burgers Optimization with a Differentiable Physics Gradient\n",
"\n",
@@ -25,10 +27,12 @@
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"metadata": {
"id": "W69db7SUZKnI"
},
"outputs": [],
"source": [
"!pip install --upgrade --quiet phiflow==2.2\n",
"#!pip install --upgrade --quiet phiflow==2.2\n",
"from phi.tf.flow import *\n",
"\n",
"N = 128\n",
@@ -47,7 +51,9 @@
},
{
"cell_type": "markdown",
"metadata": {},
"metadata": {
"id": "lewJYuRzZKnL"
},
"source": [
"Below we verify that the fields of our simulation are now backed by TensorFlow."
]
@@ -55,7 +61,10 @@
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"metadata": {
"id": "5u03jWPfZKnM",
"outputId": "6606726e-3498-4419-da44-021f8e30adda"
},
"outputs": [
{
"data": {
@@ -74,7 +83,9 @@
},
{
"cell_type": "markdown",
"metadata": {},
"metadata": {
"id": "FBoE0HsOZKnN"
},
"source": [
"## Gradients\n",
"\n",
@@ -86,38 +97,41 @@
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"metadata": {
"id": "WjRnOIihZKnO",
"outputId": "5851883a-1635-48a9-bb7f-1d254c2983af"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Instructions for updating:\n",
"This op will be removed after the deprecation date. Please switch to tf.sets.difference().\n",
"Loss: 0.382915\n"
]
}
],
"source": [
"velocities = [velocity]\n",
"\n",
"with math.record_gradients(velocity.values):\n",
"\n",
"def loss_function(velocity):\n",
" velocities = [velocity]\n",
" for time_step in range(STEPS):\n",
" v1 = diffuse.explicit(1.0*velocities[-1], NU, DT, substeps=1)\n",
" v2 = advect.semi_lagrangian(v1, v1, DT)\n",
" velocities.append(v2)\n",
"\n",
" loss = field.l2_loss(velocities[16] - SOLUTION_T16)*2./N # MSE\n",
" return loss, velocities\n",
"\n",
" grad = math.gradients(loss, velocity.values)\n",
"gradient_function = math.gradient(loss_function)\n",
"\n",
"(loss,velocities), grad = gradient_function(velocity)\n",
"\n",
"print('Loss: %f' % (loss))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"metadata": {
"id": "n7PQQAP6ZKnP"
},
"source": [
"Because we're only constraining time step 16, we could actually omit steps 17 to 31 in this setup. They don't have any degrees of freedom and are not constrained in any way. However, for fairness regarding a comparison with the previous case, we include them.\n",
"\n",
@@ -132,11 +146,14 @@
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"metadata": {
"id": "ujFnJy0eZKnQ",
"outputId": "fd89f5c8-c34b-4f0b-a5e4-82443d831f75"
},
"outputs": [
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -154,19 +171,21 @@
"pltx = np.linspace(-1,1,N)\n",
"\n",
"# first gradient\n",
"fig.plot(pltx, grad.numpy('x') , lw=2, color='green', label=\"Gradient\") \n",
"fig.plot(pltx, grad[0].values.numpy('x') , lw=2, color='green', label=\"Gradient\") \n",
"fig.plot(pltx, velocity.values.numpy('x'), lw=2, color='mediumblue', label=\"u at t=0\")\n",
"plt.xlabel('x'); plt.ylabel('u'); plt.legend();\n",
"\n",
"# some (optional) other fields to plot:\n",
"#fig.plot(pltx, (velocities[16]).values.numpy('x') , lw=2, color='cyan', label=\"u at t=0.5\") \n",
"#fig.plot(pltx, (SOLUTION_T16).values.numpy('x') , lw=2, color='red', label=\"solution at t=0.5\") \n",
"#fig.plot(pltx, (velocities[16] - SOLUTION_T16).values.numpy('x') , lw=2, color='blue', label=\"difference at t=0.5\") \n"
"# fig.plot(pltx, (velocities[16]).values.numpy('x') , lw=2, color='cyan', label=\"u at t=0.5\") \n",
"# fig.plot(pltx, (SOLUTION_T16).values.numpy('x') , lw=2, color='red', label=\"solution at t=0.5\") \n",
"# fig.plot(pltx, (velocities[16] - SOLUTION_T16).values.numpy('x') , lw=2, color='blue', label=\"difference at t=0.5\") \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"metadata": {
"id": "pEsbDiF4ZKnT"
},
"source": [
"This gives us a \"search direction\" for each velocity variable. Based on a linear approximation, the gradient tells us how to change each of them to increase the loss function (gradients _always_ point \"upwards\"). Thus, we can use the gradient to run an optimization and find an initial state `velocity` that minimizes our loss.\n",
"\n"
@@ -174,7 +193,9 @@
},
{
"cell_type": "markdown",
"metadata": {},
"metadata": {
"id": "m8fc8eMeZKnU"
},
"source": [
"## Optimization \n",
"\n",
@@ -186,7 +207,10 @@
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"metadata": {
"id": "fGVc9zQcZKnV",
"outputId": "b27673a4-1b17-4ba7-a707-523248fb8bf0"
},
"outputs": [
{
"name": "stdout",
@@ -205,25 +229,18 @@
"\n",
"grads=[]\n",
"for optim_step in range(5):\n",
" velocities = [velocity]\n",
" with math.record_gradients(velocity.values):\n",
" for time_step in range(STEPS):\n",
" v1 = diffuse.explicit(1.0*velocities[-1], NU, DT)\n",
" v2 = advect.semi_lagrangian(v1, v1, DT)\n",
" velocities.append(v2)\n",
" (loss,velocities), grad = gradient_function(velocity)\n",
" print('Optimization step %d, loss: %f' % (optim_step,loss))\n",
" grads.append( grad[0] )\n",
"\n",
" loss = field.l2_loss(velocities[16] - SOLUTION_T16)*2./N # MSE\n",
" print('Optimization step %d, loss: %f' % (optim_step,loss))\n",
"\n",
" grads.append( math.gradients(loss, velocity.values) )\n",
"\n",
" velocity = velocity - LR * grads[-1]\n",
"\n"
" velocity = velocity - LR * grads[-1]\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"metadata": {
"id": "pXTveI7uZKnW"
},
"source": [
"\n",
"Now we'll check well the 16th state of the simulation actually matches the target after the 5 update steps. This is what the loss measures, after all. The next graph shows the constraints (i.e. the solution we'd like to obtain) in green, and the reconstructed state after the initial state `velocity` (which we updated five times via the gradient by now) was updated 16 times by the solver. \n",
@@ -233,11 +250,14 @@
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"metadata": {
"id": "ce-MV-4eZKnX",
"outputId": "1ec5844e-2915-4656-dec3-585260fdfa5c"
},
"outputs": [
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -262,7 +282,9 @@
},
{
"cell_type": "markdown",
"metadata": {},
"metadata": {
"id": "2r8mVjyrZKnY"
},
"source": [
"This seems to be going in the right direction! It's definitely not perfect, but we've only computed 5 GD update steps so far. The two peaks with a positive velocity on the left side of the shock and the negative peak on the right side are starting to show.\n",
"\n",
@@ -272,7 +294,9 @@
},
{
"cell_type": "markdown",
"metadata": {},
"metadata": {
"id": "23T8WOKUZKnZ"
},
"source": [
"## More optimization steps\n",
"\n",
@@ -283,22 +307,25 @@
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"metadata": {
"id": "JIpn4s4YZKnZ",
"outputId": "85274162-8128-4e2b-a6a6-76a7d3a07c62"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Optimization step 0, loss: 0.183476\n",
"Optimization step 5, loss: 0.096224\n",
"Optimization step 10, loss: 0.054792\n",
"Optimization step 15, loss: 0.032819\n",
"Optimization step 20, loss: 0.020334\n",
"Optimization step 25, loss: 0.012852\n",
"Optimization step 30, loss: 0.008185\n",
"Optimization step 35, loss: 0.005186\n",
"Optimization step 40, loss: 0.003263\n",
"Runtime 56.25s\n"
"Optimization step 5, loss: 0.183476\n",
"Optimization step 10, loss: 0.096224\n",
"Optimization step 15, loss: 0.054792\n",
"Optimization step 20, loss: 0.032819\n",
"Optimization step 25, loss: 0.020334\n",
"Optimization step 30, loss: 0.012852\n",
"Optimization step 35, loss: 0.008185\n",
"Optimization step 40, loss: 0.005186\n",
"Optimization step 45, loss: 0.003263\n",
"Runtime 130.33s\n"
]
}
],
@@ -306,21 +333,11 @@
"import time\n",
"start = time.time()\n",
"\n",
"for optim_step in range(45):\n",
" velocities = [velocity]\n",
" with math.record_gradients(velocity.values):\n",
" for time_step in range(STEPS):\n",
" v1 = diffuse.explicit(1.0*velocities[-1], NU, DT)\n",
" v2 = advect.semi_lagrangian(v1, v1, DT)\n",
" velocities.append(v2)\n",
"\n",
" loss = field.l2_loss(velocities[16] - SOLUTION_T16)*2./N # MSE\n",
" if optim_step%5==0: \n",
" print('Optimization step %d, loss: %f' % (optim_step,loss))\n",
"\n",
" grad = math.gradients(loss, velocity.values)\n",
"\n",
" velocity = velocity - LR * grad\n",
"for optim_step in range(5,50):\n",
" (loss,velocities), grad = gradient_function(velocity)\n",
" velocity = velocity - LR * grad[0]\n",
" if optim_step%5==0: \n",
" print('Optimization step %d, loss: %f' % (optim_step,loss))\n",
"\n",
"end = time.time()\n",
"print(\"Runtime {:.2f}s\".format(end-start))"
@@ -328,9 +345,11 @@
},
{
"cell_type": "markdown",
"metadata": {},
"metadata": {
"id": "JA07WBp8ZKna"
},
"source": [
"Thinking back to the PINN version from {doc}`diffphys-code-burgers`, we have a much lower error here after only 50 steps (by ca. an order of magnitude), and the runtime is also lower (roughly by a factor of 1.5 to 2). This behavior stems from DP providing gradients for the whole solutions with all its discretization points and time steps, rather than localized updates.\n",
"Thinking back to the PINN version from {doc}`diffphys-code-burgers`, the error decreases much more strongly (by ca. two orders of magnitude) with a comparable runtime. This behavior stems from DP providing gradients for the whole solutions with all its discretization points and time steps, rather than localized updates.\n",
"\n",
"Let's plot again how well our solution at $t=0.5$ (blue) matches the constraints (green) now:"
]
@@ -338,11 +357,14 @@
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"metadata": {
"id": "a3BFszmLZKnb",
"outputId": "d341b7dc-0794-43c3-fb1b-a6b9bc2615dd"
},
"outputs": [
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -362,7 +384,9 @@
},
{
"cell_type": "markdown",
"metadata": {},
"metadata": {
"id": "BX8hUE0XZKnd"
},
"source": [
"Not bad. But how well is the initial state recovered via backpropagation through the 16 simulation steps? This is what we're changing, and because it's only indirectly constrained via the observation later in time there is more room to deviate from a desired or expected solution.\n",
"\n",
@@ -372,11 +396,14 @@
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"metadata": {
"id": "3oBdj2EaZKnd",
"outputId": "1e7dbd37-8d14-4acc-f526-1bab26c6a3a4"
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAEWCAYAAABIVsEJAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAABnuklEQVR4nO3deVxU1fvA8c/DjoCA4I4KkvuGhlumuZZWLmla5l6mlVpWbllp2aKluaWZLaaZpWmbfX+amUuLpYnmvgsuiCiCIPs25/fHHXCQRUBgQM/79ZqXM/eee+8zl3GeOfece44opdA0TdO0grKxdgCapmla2aQTiKZpmlYoOoFomqZphaITiKZpmlYoOoFomqZphaITiKZpmlYoOoHcxkRko4gMy2P9xyLyej73tV1ERhZddNYjIvVEZJ+IxIrI89aOxxpEpL2IHC/ktjVFJE5EbEtLTJp16ARSxojIGRHpmp+ySqkeSqkV5u2Gi8hfN6x/Rin1VhHE5CEiy0Qk3PylfEJEplisVyJyVwH2VyTJSkSWi0iaiFS9YdUkYJtSyk0ptbAg57QAx94uIknmL9q4G78YReQJETkrIvEi8qOIVMhjXyIiE0XkpIgkisg5EZkpIo4FiCfL30Ap9adSql5h3ptS6pxSylUplV6Y7Ysjpnwc6ykROWb+fF4SkQ0i4mZet1xE3i6O497udALRisI8wBVoALgDvYBT1gxIRFyAfkAMMPiG1bWAw0V0HBGR3P4fjTV/0bpafjGKSCNgKTAEqAwkAB/lcZiFwChgKOAG9AC6AN8WwVu47YnIfcC7wECllBvG53SNdaO6TSil9KMMPYAzQFfz8+HAX8Ac4CoQAvSwKLsdGInxHyYJSAfigGjz+uXA2+bnnsD/gAjzvv4H+Ny4r1xiOgT0yWXdH4AC4s3HfiyvYwHvmONMMpdfZF5eH9gMRAHHgQE3OU9DgfPAC8Ahi+Vbb9j/N4AJSDS/nmQu1wb4G4gG9gMdbzgX7wA7zNvdlcPx8zpf7wJfW7z2B1IAtxzK1jHH2+qG5TWAZKCzxd/yY/M5igV+B2rl8TfoCITe8LmaCBwwl/scI7ltNO/vN8DTXNbXvD87oK15nxmPJOCMuVwr4B/zObwILAIcChBTA/N5jMZI+L0s1i0HFgP/Z45vF+Cfy/meAPyYy7pRQKr5/McBP5uXVwO+w/iMhgDPW2zzBrAOIwnFAnuBZhbrJwMXzOuOA12s/b1RXA+rB6AfBfyDZU8gqcDTgC3wLBAGiHn9dsxfYuayf92wr+VcTyBeGL/Yy2H8yl1r+Z+OvL8QPzP/Bx8B1MlhvcLiS7agxwJcMJLBCPOXVnPgCtAwj/O0BXgf40swDbg7j/1nnlPz6+pAJPAgRi29m/l1RYvtzwGNzPHY53D87eYvnysYiaajxbqfgMk3lI+zjNFi+TPA2Vze4+/ATIu/ZSzQAXAEFlj+vXP4G3QkewLZaT5f1YHLGF+MzQEnjMQ73VzW17w/uxvisb8hprsxErGdeZujwPj8xGTe1ylgKuAAdDa/v3oW7zcSI0nZAauA1bmcp/YYif5NoB3gmNv/A/NrG2APMM187NpAMPCAef0bGP/vHjXHOQEjydgD9TA+q9UszlWOie12eOhLWGXfWaXUp8q4Hr0CqIrxJVAgSqlIpdR3SqkEpVQsxi/s+/K5+TiM/8BjgSMickpEehThsR7G+FX7hVIqTSn1H8avw/45FRaRmkAnjF/5lzCSydB8vhcwLnltUEptUEqZlFKbgSCMhJJhuVLqsDme1Bz2MRnji6c68Anws4j4m9e5YlxasxSDkUxv5I3x6z0nF83rM/yfUuoPpVQy8CrQVkRq5P42s/lQKXVJKXUB+BPYpZT6TymVBPyAkUzyshDjS/5VAKXUHqXUTvM5OoNx2S6/n6k2GOdpllIqRSm1FaOmOtCizA9KqX+VUmkYn7+AnHaklPoT6Au0wKixRIrI3Dw6AbTE+LEww3zsYOBT4HGLMnuUUuvMf/u5GEm2DUZt0RFoKCL2SqkzSqnT+XzPZY5OIGVfeMYTpVSC+alrQXciIuVEZKm5YfcaxiUGj/z0tFFKJSql3lVK3Y1Ru/gWWJtbw3AhjlULaC0i0RkPYBBQJZfyQ4CjSql95tergCdExP5m78XieP1vON69GMk5w/m8dqCU2qWUilVKJSujI8MOriegOKD8DZuUx/jyvdGVG45rqap5fbaYlFJxGJf7quUV5w0uWTxPzOF1rp8rERmNUYN4QillMi+rKyL/M3euuIZx6c47t33coBpwPmNfZmcxEnKGcIvnCXnFp5TaqJTqCVQAemPUyHPrqFELqHbD338qWX+YWZ5rExCKUes4BYzHqKVcFpHVIlKQv0GZohPIneNmwy6/jFH9bq2UKo9xKQRACnQQpTK+KFwAv0Ie68ZYzwO/K6U8LB6uSqlnc9n/UKC2+YsrHOMXojdZaxBZws7heCtvOJ6LUmpWHtvcjOL6+zsMNMtYISK1MX61nshhu61ADRFpZbnQXLNog1G7ylDDYr0rxpdlWAHjLDARaQ+8BfQ2//0zLAGOYVzWLI/xJZzfz1MYxvu2/I6qidG2UGjmGuUWjPPaOGPxDcXOAyE3/P3dlFKWnx/Lc20D+JhjRin1tVLqXoxEpID3biXm0kwnkDvHJcBHRBxyWe+G8Ssz2lxzmJ7fHYvI6yLSUkQcRMQJo+E6GqMBMePYtQtwrBvL/w+oKyJDRMTe/GgpIg1yiKUtRqN0K4xLGgEYXxRfk/tlrBuP9xXQU0QeEBFbEXESkY4i4pPnibgeg4d5WycRsRORQRhJ8hdzkVXm/bc39xabAXxvvpyXhVLqBEbj+CoRaWOOpxHGJbzflFK/WRR/UETuNf+N3wJ2KqUyfinf+B6LhDmRfQsMNcdqyQ24BsSJSH2MNjpLecW0C6NWMcn89+4I9ARWFyLG3iLyuIh4mnvNtcK4lLYzlzj+BWJFZLKIOJvPeWMRaWlR5m4R6Ssidhg1jmRgpxj3GHU2d7FOwvicW9aibis6gdw5tmL88g0XkSs5rJ8POGNcEtnJ9S+7/FDAF+ZtwzAanR8yX0YBozq/wnw5YEA+jrUAeFRErorIQvMX6/0Y16DDMC5dvIfxq/1Gw4CflFIHlVLhGQ/zPh/O5bLaTOA1c3wTzF+6vTF+MUdg/CKdSP7/v9gDb3O9EX0cRi+1EwBKqcMYjeOrMBqr3YDn8tjfWIyOCl9hXP76BaORvt8N5b7GSMZRGA3Ylt2X3yDr36CodMG4tLNOrt/zktFFegLwBMaluU/J3nU215iUUikYCaMHxjn8CCNJHStEjFcxOpqcxEhoXwGzlVKrzOs/x2iziBaRH83tiQ9j/PgIMR//M4wu6hl+wug5dhXjkmlfc3uIIzDLvE04UAl4pRAxlwkZvXU0TSvDRGQ5Rg+m16wdy+1ORN7A6D124/1FdxxdA9E0TdMKRScQTdM0rVD0JSxN0zStUHQNRNM0TSsUO2sHUJK8vb2Vr6+vtcPQNE0rU/bs2XNFKVXxxuV3VALx9fUlKCjI2mFomqaVKSJyNqfl+hKWpmmaVig6gWiapmmFohOIpmmaVih3VBuIppUFqamphIaGkpSUZO1QtDuMk5MTPj4+2Nvnb+BqnUA0rZQJDQ3Fzc0NX19fRAo0GLKmFZpSisjISEJDQ/Hzy20g7ayseglLRJaJyGUROZTLehGRhWJMUHRARFpYrBsmIifNj2ElF7WmFa+kpCS8vLx08tBKlIjg5eVVoJqvtdtAlgPd81jfA2NO6DoYcxcvAbAYArw1xrDd00XEs1gj1bQSpJOHZg0F/dxZ9RKWUuoPEfHNo0hv4EtljLey0zzPQlWMmc82K6WiAERkM0Yi+qaYQ9ZyEJUQxfmY8/y6JYqfVtny1GsRuJY3Ud6pPJVdK+NT3gdvl/xORKdpWllR2ttAqpN16tBQ87LclmslIOxaGNuCt/HX2b84GH6Qi7HGlN3hX0wi4UhLTrgvxy3w9yzbVHatTOPKjbmn1j10rt2Zmh41rRG6lk+XLl3ixRdfZOfOnXh6euLg4MCkSZN45JFHSiyGM2fO8PDDD3Po0KFsy//++2+eeOKJAu9z/vz5jBo1inLlygHg6upKXFxcntusX7+eI0eOMGXKlFzLhIWF8fzzz7Nu3Tr27dtHWFgYDz74YL63X758OUFBQSxatOim7yG/7/9WzlN+WfsSVrETkVEiEiQiQREREdYOp8yKT4lnzYE19P2qL+0/ac+036ax6dgWLsZepJx9ORpVakS55FoA1LXvSN9Gfeni34W0n6cSNnceF6Oi2XJ6C29tfYtOn3Xi4RUPs/K/lVxLunaTI2slTSlFnz596NChA8HBwezZs4fVq1cTGhqarWxaWlqJx3fmzBm+/vrrHNfdLJ758+eTkJBQoOP16tUrzy9/gGrVqrFu3ToA9u3bx4YNGwq0fUHk9f4LU+6WKKWs+gB8gUO5rFsKDLR4fRyoCgwEluZWLrfH3XffrbSCiYyPVLP/mK2aLmiqas+urWrPrq0az2+sHpr+trKzD1IfLDmi0tLTlFJKVa9+QMEeNXx4iFJKKZPJpFxc/lOwR6366bhad3CdGrt+rGq2sFnmvhrOa6je3vq2uhR7yYrvsnQ5cuSIVY//22+/qQ4dOuS6/osvvlA9e/ZUnTp1Uh06dFCRkZGqd+/eqkmTJqp169Zq//79Simlpk+frmbPnp25XaNGjVRISIgKCQlR9evXVyNHjlQNGzZU3bp1UwkJCUoppYKCglTTpk1V06ZN1YQJE1SjRo2yHb9169aqfPnyqlmzZmru3LnZ4tm2bZt66KGHMsuPGTNGffHFF2rBggXK3t5eNW7cWHXs2FEppZSLi4uaOnWqatq0qWrdurUKDw/P8f2OGTNGKaXUsGHD1Lhx41Tbtm2Vn5+fWrt2rVJKqZCQENWoUSOVnJysatSooby9vVWzZs3Line truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -400,7 +427,9 @@
},
{
"cell_type": "markdown",
"metadata": {},
"metadata": {
"id": "Ug2pTemYZKne"
},
"source": [
"Naturally, this is a tougher task: the optimization receives direct feedback what the state at $t=0.5$ should look like, but due to the non-linear model equation, we typically have a large number of solutions that exactly or numerically very closely satisfy the constraints. Hence, our minimizer does not necessarily find the exact state we started from (we can observe some numerical oscillations from the diffusion operator here with the default settings). However, the solution is still quite close in this Burgers scenario.\n",
"\n",
@@ -410,11 +439,14 @@
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"metadata": {
"id": "HiaIZgUlZKnf",
"outputId": "6fb48869-39bb-422d-a9bd-4fd1e33d57ce"
},
"outputs": [
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 1152x360 with 2 Axes>"
]
@@ -451,7 +483,9 @@
},
{
"cell_type": "markdown",
"metadata": {},
"metadata": {
"id": "ozka-l1UZKng"
},
"source": [
"## Physics-informed vs. differentiable physics reconstruction\n",
"\n",
@@ -463,7 +497,10 @@
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"metadata": {
"id": "1b0CXDEDZKng",
"outputId": "ee4c501b-47a7-4673-9955-0a503f7001bd"
},
"outputs": [
{
"name": "stdout",
@@ -475,7 +512,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 1152x360 with 2 Axes>"
]
@@ -501,7 +538,9 @@
},
{
"cell_type": "markdown",
"metadata": {},
"metadata": {
"id": "D8qbYQpHZKni"
},
"source": [
"It's quite clearly visible here that the PINN solution (in the middle) recovers the overall shape of the solution, hence the temporal constraints are at least partially fulfilled. However, it doesn't manage to capture the amplitudes of the GT solution very well.\n",
"\n",
@@ -512,22 +551,24 @@
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"execution_count": 13,
"metadata": {
"id": "VoxYVPwjZKni"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"MAE PINN: 0.23281 \n",
"MAE PINN: 0.19298 \n",
"MAE DP: 0.06382\n",
"\n",
"Error GT to PINN (top) , DiffPhys (bottom):\n"
"Error GT to PINN (top) , GT to DiffPhys (bottom):\n"
]
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 1152x360 with 2 Axes>"
]
@@ -543,15 +584,17 @@
"err_dp = np.sum( np.abs(sol_dp-sol_gt)) / (STEPS*N)\n",
"print(\"MAE PINN: {:7.5f} \\nMAE DP: {:7.5f}\".format(err_pi,err_dp))\n",
"\n",
"print(\"\\nError GT to PINN (top) , DiffPhys (bottom):\")\n",
"print(\"\\nError GT to PINN (top) , GT to DiffPhys (bottom):\")\n",
"show_state(np.reshape( np.concatenate([sol_pi-sol_gt, divider, sol_dp-sol_gt],axis=0) ,[N*2+10,33,1]))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"metadata": {
"id": "4_zwf8mkZKnj"
},
"source": [
"That's a pretty clear result: the PINN error is almost 4 times higher than the one from the Differentiable Physics (DP) reconstruction.\n",
"That's a pretty clear result: the PINN error is more than 3 times larger than the one from the Differentiable Physics (DP) reconstruction.\n",
"\n",
"This difference also shows clearly in the jointly visualized image at the bottom: the magnitudes of the errors of the DP reconstruction are much closer to zero, as indicated by the purple color above.\n",
"\n",
@@ -590,5 +633,5 @@
}
},
"nbformat": 4,
"nbformat_minor": 4
"nbformat_minor": 1
}
+1 -1
View File
@@ -416,7 +416,7 @@
"id": "PI3xY-7m_trr"
},
"source": [
"The loss should have gone down significantly, from above 1100 to below 700, and now we can also visualize the initial velocities that were obtained in the optimization. \n",
"The loss should have gone down significantly, from almost 300 to below 170, and now we can also visualize the initial velocities that were obtained in the optimization. \n",
"\n",
"The following images show the resulting three initial velocities in terms of their x (first set), and y components (second set of images). We're skipping the fourth set with `inflow_loc[0]` because it only contains zeros.\n"
]
+1 -1
View File
@@ -45,7 +45,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
"Using phiflow version: 2.0.3\n"
"Using phiflow version: 2.2.0\n"
]
}
],
+33 -47
View File
@@ -61,7 +61,7 @@
},
{
"cell_type": "code",
"execution_count": 1,
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
@@ -69,13 +69,7 @@
"id": "L30jgXowoXat",
"outputId": "bcceefc0-fb33-44c7-959c-0b742e5a1606"
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": []
}
],
"outputs": [],
"source": [
"!pip install --quiet phiflow==1.5.1\n",
"\n",
@@ -180,7 +174,7 @@
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
@@ -188,15 +182,7 @@
"id": "xxLRbUQzoXay",
"outputId": "a2504aae-26dc-48a3-a5fa-12c6539f3f62"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"outputs": [],
"source": [
"N=128\n",
"grids_xt = np.meshgrid(np.linspace(-1, 1, N), np.linspace(0, 1, 33), indexing='ij')\n",
@@ -241,7 +227,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 1152x360 with 2 Axes>"
]
@@ -298,7 +284,7 @@
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
@@ -354,20 +340,20 @@
"name": "stdout",
"output_type": "stream",
"text": [
"Step 0, loss: 0.155002\n",
"Step 1, loss: 0.139890\n",
"Step 2, loss: 0.128770\n",
"Step 1000, loss: 0.058176\n",
"Step 2000, loss: 0.047925\n",
"Step 3000, loss: 0.043175\n",
"Step 4000, loss: 0.039472\n",
"Step 5000, loss: 0.038181\n",
"Step 6000, loss: 0.035628\n",
"Step 7000, loss: 0.026915\n",
"Step 8000, loss: 0.021984\n",
"Step 9000, loss: 0.018708\n",
"Step 10000, loss: 0.016682\n",
"Runtime 104.06s\n"
"Step 0, loss: 0.100037\n",
"Step 1, loss: 0.097836\n",
"Step 2, loss: 0.096151\n",
"Step 1000, loss: 0.054487\n",
"Step 2000, loss: 0.049147\n",
"Step 3000, loss: 0.045515\n",
"Step 4000, loss: 0.042890\n",
"Step 5000, loss: 0.039945\n",
"Step 6000, loss: 0.037641\n",
"Step 7000, loss: 0.035227\n",
"Step 8000, loss: 0.033604\n",
"Step 9000, loss: 0.031556\n",
"Step 10000, loss: 0.029434\n",
"Runtime 110.02s\n"
]
}
],
@@ -415,7 +401,7 @@
"outputs": [
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 1152x360 with 2 Axes>"
]
@@ -458,7 +444,7 @@
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f947c590e20>"
"<matplotlib.legend.Legend at 0x7f8eca2a7a00>"
]
},
"execution_count": 9,
@@ -467,7 +453,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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55xzLGmYqOXn57No0SIABg0axPjx47ntttvCHl9SUkJhYSETJ06M+D0qKyvJycmpbagJk+rrgRgTtZKSkoiSR25uriWPLBG8fsu4ceMoLS2N6/WPP/541qxxa9p9/fXX9OnTh86dO9OjRw+++OILFi1axLBhw3jllVfo2LEjW7Zs4Y033uD444+nU6dOnH/++WzevBmANm3acMstt9CpUydeeumlao8bOXIknTp1orCwkC+++AKAzZs3c/nll1NYWEiHDh345z//CRD2OrVhCcSkvaofDpGO57DBgNkhUCIN/F0ElhGOVxKprKykpKSEs846C4AhQ4bw0EMPsWDBAu655x5+97vf0bFjR0aPHk3//v1ZtGgRP/30E3feeSdvvfUWCxcupKioiPvuu2/XNZs0acLChQvp1atXtcc1bdqUhQsXcvXVV3PPPfcAcMcdd1BQUEBpaSmffPIJp5xyCt99912114mVVWGZtBVuDfLqWDtH9glVIg0sI1ybv4MtW7bQsWNH1qxZQ/v27enduzebN2/m/fff5/zzz9913LZt2/Y6d+7cuXz22WeceOKJAGzfvp3jjz9+1/7+/ftHdNxvfvMbADp37syUKVMAeOutt5g8efKuYxo1asSrr75a7XVi5WsCEZE+wANADjBRVcdU2X8/8CvvZQOguao29PZVAoGvEP9V1bOSErRJCbH0rrISR3YK96WititKBtpAfv75Z0477TTGjx/PZZddRsOGDXe1jYSjqvTu3Zvnn38+5P599tknouPq1asHuAb96mb7rek6sfKtCktEcoDxQF/gKOBCETkq+BhVvVFVO6pqR+AhYErQ7i2BfZY8sktgQGBNySOwTGxBQYEljywWbrngeC0j3KBBAx588EHuvfdeGjRoQNu2bXnppZcA98G9ePHivc7p3r077733HsuWLQPgp59+4quvvor5uGC9e/feY/2RTZs2xXSdSPjZBtIVWKaqy1V1OzAZ6FfN8RcC8U2fJu0ESh41jSYPDAYcOXIkQ4cOteSRxYqLi8nNzd1jW7zH+xx33HF06NCB559/nmeffZbHH3+cY489lqOPPppXXnllr+ObNWvGpEmTuPDCC+nQoQPHH3/8rkbwWI4LNmLECDZt2sQxxxzDsccey+zZs2O6TiR8m85dRM4D+qjqld7rS4BuqnptiGNbA3OBlqpa6W3bASwCdgBjVPVfYd5nCDAEoFWrVp1XrVoV/1/GJFw04zqsuirzRTuduy0jHLlMnM59APByIHl4WqvqGhE5FJglIqWq+nXVE1V1AjAB3HogyQnXxFM07R026aEJxZYRTgw/E8ga4JCg1y29baEMAK4J3qCqa7yfy0VkDnAcsFcCMekvknEdNiDLine truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -520,7 +506,7 @@
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f947cc9cca0>"
"<matplotlib.legend.Legend at 0x7f8eca1b48e0>"
]
},
"execution_count": 10,
@@ -529,7 +515,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -590,7 +576,7 @@
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f9474d7b130>"
"<matplotlib.legend.Legend at 0x7f8eca556820>"
]
},
"execution_count": 11,
@@ -599,7 +585,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -669,7 +655,7 @@
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f947cd89ee0>"
"<matplotlib.legend.Legend at 0x7f8ec93a4310>"
]
},
"execution_count": 12,
@@ -678,7 +664,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -727,13 +713,13 @@
"name": "stdout",
"output_type": "stream",
"text": [
"Mean absolute error for re-simulation across 16 steps: 0.01372\n"
"Mean absolute error for re-simulation across 16 steps: 0.01136\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f947c5d91f0>"
"<matplotlib.legend.Legend at 0x7f8eaa76ed90>"
]
},
"execution_count": 13,
@@ -742,7 +728,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
@@ -792,7 +778,7 @@
"outputs": [
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 1152x360 with 2 Axes>"
]