From 38da9fb388e669180f519edb7795be0813f68a83 Mon Sep 17 00:00:00 2001 From: NT Date: Fri, 9 Apr 2021 14:07:57 +0800 Subject: [PATCH] smaller updates of DP part --- diffphys-code-ns.ipynb | 32 +++--- diffphys-code-sol.ipynb | 18 +-- diffphys-control.ipynb | 242 ++++++++++++++++++---------------------- intro.md | 2 +- 4 files changed, 133 insertions(+), 161 deletions(-) diff --git a/diffphys-code-ns.ipynb b/diffphys-code-ns.ipynb index dc23a4d..0ac48a4 100644 --- a/diffphys-code-ns.ipynb +++ b/diffphys-code-ns.ipynb @@ -41,7 +41,7 @@ "source": [ "## Formulation\n", "\n", - "As optimization objective we'll consider a more difficult variant of the previous example: the state of the observed density $d$ should match a given target after $n=20$ steps of simulation. In contrast to before, the marker $d$ cannot be modified in any way, but only the initial state of the velocity $\\mathbf{u}_0$ at $t=0$. This gives us a split between observable quantities for the loss formulation, and quantities that we can interact with during the optimization (or later on via NNs).\n", + "As optimization objective we'll consider a more difficult variant of the previous example: the state of the observed density $d$ should match a given target after $n=20$ steps of simulation. In contrast to before, the marker $d$ cannot be modified in any way, but only the initial state of the velocity $\\mathbf{u}_0$ at $t=0$. This gives us a split between observable quantities for the loss formulation and quantities that we can interact with during the optimization (or later on via NNs).\n", "\n", "With the notation from {doc}`overview-equations` this gives the minimization problem \n", "\n", @@ -70,7 +70,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": { "id": "da1uZcDXdVcF" }, @@ -80,7 +80,7 @@ "#!pip install --upgrade --quiet git+https://github.com/tum-pbs/PhiFlow@develop\n", "\n", "from phi.torch.flow import * # The Dash GUI is not supported on Google Colab, ignore the warning\n", - "import pylab" + "import pylab\n" ] }, { @@ -240,7 +240,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -256,7 +256,7 @@ "(x=33, y=40) float32 -0.9229158759117126 < ... < 2.964700937271118" ] }, - "execution_count": 5, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -266,7 +266,7 @@ "[velocity_grad] = sim_grad(initial_smoke, initial_velocity)\n", "\n", "print(\"Gradient info \" + format(velocity_grad))\n", - "velocity_grad.inflow_loc[0].vector[0].values # one example, location 0, x component\n" + "velocity_grad.inflow_loc[0].values.vector[0] # one example, location 0, x component\n" ] }, { @@ -280,14 +280,14 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "CenteredGrid[(x=33, y=40), size=(33.0, 40.0) along vector, extrapolation=0]\n" + "x components: (x=33, y=40) float32 0.0 < ... < 0.0\n" ] }, { @@ -304,11 +304,11 @@ } ], "source": [ - "print(format( velocity_grad.inflow_loc[i].vector[0] ))\n", + "print(\"x components: \"+format( velocity_grad.inflow_loc[i].values.vector[0] ))\n", "\n", "fig, axes = pylab.subplots(1, 4, figsize=(16, 5))\n", "for i in range(INFLOW.shape.inflow_loc):\n", - " im = axes[i].imshow(velocity_grad.inflow_loc[i].vector[0].values.numpy('y,x'), origin='lower', cmap='bwr')\n", + " im = axes[i].imshow(velocity_grad.inflow_loc[i].values.vector[0].numpy('y,x'), origin='lower', cmap='bwr')\n", " pylab.colorbar(im, ax=axes[i])\n", " axes[i].set_title(f\"Gradient for x vel - In {math.to_int(INFLOW_LOCATION).inflow_loc[i].vector.unstack_spatial('x,y')}\")\n", "pylab.tight_layout()\n", @@ -336,7 +336,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 30, "metadata": {}, "outputs": [ { @@ -395,7 +395,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 32, "metadata": {}, "outputs": [ { @@ -414,7 +414,7 @@ "source": [ "fig, axes = pylab.subplots(1, 3, figsize=(12, 5))\n", "for i in range(INFLOW.shape.inflow_loc-1):\n", - " im = axes[i].imshow(initial_velocity.inflow_loc[i].vector[0].values.numpy('y,x'), origin='lower', cmap='bwr')\n", + " im = axes[i].imshow(initial_velocity.inflow_loc[i].values.vector[0].numpy('y,x'), origin='lower', cmap='bwr')\n", " pylab.colorbar(im, ax=axes[i])\n", " axes[i].set_title(f\"Initial velocity x for {math.to_int(INFLOW_LOCATION).inflow_loc[i].vector.unstack_spatial('x,y')}\")\n", "pylab.tight_layout()" @@ -422,7 +422,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 33, "metadata": {}, "outputs": [ { @@ -441,7 +441,7 @@ "source": [ "fig, axes = pylab.subplots(1, 3, figsize=(12, 5))\n", "for i in range(INFLOW.shape.inflow_loc-1):\n", - " im = axes[i].imshow(initial_velocity.inflow_loc[i].vector[1].values.numpy('y,x'), origin='lower', cmap='bwr')\n", + " im = axes[i].imshow(initial_velocity.inflow_loc[i].values.vector[1].numpy('y,x'), origin='lower', cmap='bwr')\n", " pylab.colorbar(im, ax=axes[i])\n", " axes[i].set_title(f\"Initial velocity y for {math.to_int(INFLOW_LOCATION).inflow_loc[i].vector.unstack_spatial('x,y')}\")\n", "pylab.tight_layout()" @@ -460,7 +460,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 34, "metadata": {}, "outputs": [ { diff --git a/diffphys-code-sol.ipynb b/diffphys-code-sol.ipynb index deb9582..6ee0a7b 100644 --- a/diffphys-code-sol.ipynb +++ b/diffphys-code-sol.ipynb @@ -239,11 +239,11 @@ "\n", "In all cases we'll use fully convolutional networks, i.e. networks without any fully-connected layers. The\n", "inputs are: \n", - "- 2 fields with x,y velociy\n", + "- 2 fields with x,y velocity\n", "- plus the Reynolds number as constant channel.\n", "\n", "The output is : \n", - "- a 2 component field containing the x,y velocty\n", + "- a 2 component field containing the x,y velocity\n", "\n", "First, let's define a minimal network consisting only of three convolutional layers with ReLU activations (we're also using keras here for simplicity). The input channel dimension is defined via the `tensor_in`, then we'll go to 32 and 64 features, before reducing to 2 channels in the output. " ] @@ -639,9 +639,9 @@ "source": [ "## Interleaving Simulation and Network\n", "\n", - "Now comes the **most crucial** step in the whole setup: we define the chain of simulation steps and network evaluations to be used at training time. After all the work defining helper functions, it's acutally pretty simple: we loop over `msteps`, call the simulator via `KarmanFlow.step` for an input state, and afterwards evaluate the correction via `network(to_keras())`. The correction is then added to the last simultation state in the `prediction` list (we're actually simply overwriting the last simulated step `prediction[-1]` with `velocity + correction[-1]`.\n", + "Now comes the **most crucial** step in the whole setup: we define the chain of simulation steps and network evaluations to be used at training time. After all the work defining helper functions, it's acutally pretty simple: we loop over `msteps`, call the simulator via `KarmanFlow.step` for an input state, and afterwards evaluate the correction via `network(to_keras())`. The correction is then added to the last simulation state in the `prediction` list (we're actually simply overwriting the last simulated step `prediction[-1]` with `velocity + correction[-1]`.\n", "\n", - "One other important things that's happening here is normalization: the inputs to the network are divided by the standard deviations in `dataset.dataStats`. This is slightly complicated as we have to append the scaling for the Reynolds numbers to the normalization for the velocity. After evaluating the `network`, we only have a velocity left, so we can simply multiply by the standard deviation again (`* dataset.dataStats['std'][1]`)." + "One other important thing that's happening here is normalization: the inputs to the network are divided by the standard deviations in `dataset.dataStats`. This is slightly complicated as we have to append the scaling for the Reynolds numbers to the normalization for the velocity. After evaluating the `network`, we only have a velocity left, so we can simply multiply by the standard deviation again (`* dataset.dataStats['std'][1]`)." ] }, { @@ -882,7 +882,7 @@ "\n", "Let's see how well this works by applying it to a set of test data inputs with new Reynolds numbers that were not part of the training data.\n", "\n", - "To keep things somewhat simple, we won't aim for a high performance version of our hybrid solver. For performance, please checck out the external code base: the network trained here should be directly useable in [this apply script](https://github.com/tum-pbs/Solver-in-the-Loop/blob/master/karman-2d/karman_apply.py).\n", + "To keep things somewhat simple, we won't aim for a high-performance version of our hybrid solver. For performance, please check out the external code base: the network trained here should be directly useable in [this apply script](https://github.com/tum-pbs/Solver-in-the-Loop/blob/master/karman-2d/karman_apply.py).\n", "\n", "---" ] @@ -1112,9 +1112,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "They both start out with the same initial state at $t=0$ (a downsampled solution from the reference solution manifold), and at $t=20$ the solutions still share similarities. Over time, the source version strongly diffuses the strucutres in the flow and looses momentum. The flow behind the obstacles becomes straight, and lacks clear vortices. \n", + "They both start out with the same initial state at $t=0$ (a downsampled solution from the reference solution manifold), and at $t=20$ the solutions still share similarities. Over time, the source version strongly diffuses the structures in the flow and looses momentum. The flow behind the obstacles becomes straight, and lacks clear vortices. \n", "\n", - "The version produced by the hybrid solver does much better. It preserves the vortex shedding even after more than one hundred updates. Note that both outputs were produced by the same underlying solver. The second version just profits from the learned corrector which has learned to revert the overly strong dissipation of the solver. However, it also produces some visible axis aligned structures, especially near the sides of the domain. These could be alleviated with improved training setups, e.g., more look-ahead, and a larger model.\n", + "The version produced by the hybrid solver does much better. It preserves the vortex shedding even after more than one hundred updates. Note that both outputs were produced by the same underlying solver. The second version just profits from the learned corrector which has learned to revert the overly strong dissipation of the solver. However, it also produces some visible axis-aligned structures, especially near the sides of the domain. These could be alleviated with improved training setups, e.g., more look-ahead, and a larger model.\n", "\n", "We can also compare and quantify how the models do w.r.t. reference data. The next cell plots one time step of the three versions: the reference data after 50 steps, and the re-simulated version of the source and our hybrid solver, together with a per-cell error of the two:" ] @@ -1172,7 +1172,7 @@ "source": [ "This shows very clearly how the pure source simulation in the middle deviates from the reference on the left. Apart from the slight vertical streaks, the learned version stays much closer to the reference solution. \n", "\n", - "The two per-cell error images on the right also illustrate this: the source version has much larger errors that show how it systematically underestimates the vortices that should form. The error for the learned version is much more evenly distributed, and significantly smaller.\n", + "The two per-cell error images on the right also illustrate this: the source version has much larger errors that show how it systematically underestimates the vortices that should form. The error for the learned version is much more evenly distributed and significantly smaller.\n", "\n", "Next, we can quantify these observations:" ] @@ -1226,7 +1226,7 @@ "source": [ "The overall mean absolute error (MAE) is almost 50% larger for the regular simulation. The graph below shows this behavior over time: the error of the source version is clearly above the errors of the hybrid simulator.\n", "\n", - "This concludes our evaluation. Note that the improved behavior of the hybrid solver is difficult to reliably measure with simple vector norms such as an MAE or $L^2$ norm. To achieve this, we'd need to employ other, domain specific metrics. In this case, metrics for fluids based on vorticity and turbulence properties of the flow would be applicable. However, in this text we instead want to focus on DL-related topics, and target another inverse problem with differentiable physics solvers in the next chapter." + "This concludes our evaluation. Note that the improved behavior of the hybrid solver is difficult to reliably measure with simple vector norms such as an MAE or $L^2$ norm. To achieve this, we'd need to employ other, domain-specific metrics. In this case, metrics for fluids based on vorticity and turbulence properties of the flow would be applicable. However, in this text, we instead want to focus on DL-related topics and target another inverse problem with differentiable physics solvers in the next chapter." ] }, { diff --git a/diffphys-control.ipynb b/diffphys-control.ipynb index b8ae85e..cea3da5 100644 --- a/diffphys-control.ipynb +++ b/diffphys-control.ipynb @@ -85,7 +85,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -95,22 +95,28 @@ }, "outputs": [], "source": [ - "!pip install --upgrade --quiet git+https://github.com/tum-pbs/PhiFlow@1.4.1\n", + "#!pip install --upgrade --quiet git+https://github.com/tum-pbs/PhiFlow@1.4.1\n", "\n", "import matplotlib.pyplot as plt\n", "from phi.flow import *\n", "\n", - "# this essentially copies over the data and code from https://github.com/holl-/PDE-Control\n", - "if not os.path.isfile('shapes/Shape_000000.npz'):\n", - " import urllib.request\n", - " url=\"https://ge.in.tum.de/download/2020-iclr-holl/control.zip\"\n", - " print(\"Downloading, this can take a few minutes the first time...\")\n", - " urllib.request.urlretrieve(url, 'control.zip')\n", - " import os\n", - " os.system(\"unzip control.zip\")\n", + "# # this essentially copies over the data and code from https://github.com/holl-/PDE-Control\n", + "# if not os.path.isfile('shapes/Shape_000000.npz'):\n", + "# import urllib.request\n", + "# url=\"https://ge.in.tum.de/download/2020-iclr-holl/control.zip\"\n", + "# print(\"Downloading, this can take a few minutes the first time...\")\n", + "# urllib.request.urlretrieve(url, 'control.zip')\n", + "# import os\n", + "# os.system(\"unzip control.zip\")\n", "\n", + "if not os.path.isdir('PDE-Control'):\n", + " print(\"Cloning, PDE-Control repo, this can take a moment\")\n", + " os.system(\"git clone --recursive https://github.com/holl-/PDE-Control.git\")\n", + " \n", "# now we can load the necessary phiflow libraries and helper functions\n", - "import sys; sys.path.append('./src')\n", + "import sys; \n", + "#sys.path.append('./src')\n", + "sys.path.append('PDE-Control/src')\n", "from shape_utils import load_shapes, distribute_random_shape\n", "from control.pde.incompressible_flow import IncompressibleFluidPDE\n", "from control.control_training import ControlTraining\n", @@ -132,7 +138,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": { "id": "EthZeAV030df" }, @@ -145,7 +151,7 @@ "batch_size = 100\n", "data_path = 'shape-transitions'\n", "pretrain_data_path = 'moving-squares'\n", - "shape_library = load_shapes('shapes')" + "shape_library = load_shapes('PDE-Control/notebooks/shapes')" ] }, { @@ -160,7 +166,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -211,7 +217,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -264,7 +270,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": { "id": "ZcbTw9cF30dk" }, @@ -296,11 +302,83 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": { "id": "b5ksGZwO30dl" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:From PDE-Control/src/control/control_training.py:31: The name tf.reset_default_graph is deprecated. Please use tf.compat.v1.reset_default_graph instead.\n", + "\n", + "App created. Scene directory is /Users/thuerey/phi/model/control-training/sim_000000 (INFO), 2021-04-07 15:04:48,590n\n", + "\n", + "WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/app.py:23: The name tf.ConfigProto is deprecated. Please use tf.compat.v1.ConfigProto instead.\n", + "\n", + "WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/app.py:25: The name tf.Session is deprecated. Please use tf.compat.v1.Session instead.\n", + "\n", + "WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/session.py:18: The name tf.get_default_graph is deprecated. Please use tf.compat.v1.get_default_graph instead.\n", + "\n", + "WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/app.py:51: The name tf.placeholder is deprecated. Please use tf.compat.v1.placeholder instead.\n", + "\n", + "Sequence class: (INFO), 2021-04-07 15:04:48,733n\n", + "\n", + "Partition length 2 sequence (from 0 to 2) at frame 1\n", + "WARNING:tensorflow:From PDE-Control/src/control/pde/incompressible_flow.py:19: The name tf.variable_scope is deprecated. Please use tf.compat.v1.variable_scope instead.\n", + "\n", + "WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/grid_layers.py:9: conv2d (from tensorflow.python.layers.convolutional) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Use `tf.keras.layers.Conv2D` instead.\n", + "WARNING:tensorflow:From /usr/local/lib/python3.7/site-packages/tensorflow_core/python/layers/convolutional.py:424: Layer.apply (from tensorflow.python.keras.engine.base_layer) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Please use `layer.__call__` method instead.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/struct/context.py:18: UserWarning: struct.unsafe() is deprecated. Use map() with new_type argument to avoid validation.\n", + " warnings.warn(\"struct.unsafe() is deprecated. Use map() with new_type argument to avoid validation.\")\n" + ] + }, + { + "ename": "ValueError", + "evalue": "Dimensions must be equal, but are 35 and 37 for 'OP2/add_1' (op: 'AddV2') with input shapes: [?,35,35,16], [?,37,37,16].", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mInvalidArgumentError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/usr/local/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py\u001b[0m in \u001b[0;36m_create_c_op\u001b[0;34m(graph, node_def, inputs, control_inputs)\u001b[0m\n\u001b[1;32m 1606\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1607\u001b[0;31m \u001b[0mc_op\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mc_api\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTF_FinishOperation\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mop_desc\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1608\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0merrors\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mInvalidArgumentError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mInvalidArgumentError\u001b[0m: Dimensions must be equal, but are 35 and 37 for 'OP2/add_1' (op: 'AddV2') with input shapes: [?,35,35,16], [?,37,37,16].", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mdatapath\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mpretrain_data_path\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mval_range\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mval_range\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtrain_range\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtrain_range\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtrace_to_channel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mlambda\u001b[0m \u001b[0m_\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'density'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mobs_loss_frames\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m//\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtrainable_networks\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'OP%d'\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 7\u001b[0;31m sequence_class=None).prepare()\n\u001b[0m\u001b[1;32m 8\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1000\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0mapp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprogress\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# Run Optimization for one batch\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/Dropbox/mbaDevelSelected/pbdl-book/PDE-Control/src/control/control_training.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, n, pde, datapath, val_range, train_range, trace_to_channel, obs_loss_frames, trainable_networks, sequence_class, batch_size, view_size, learning_rate, learning_rate_half_life, dt, new_graph)\u001b[0m\n\u001b[1;32m 61\u001b[0m \u001b[0mexecutor\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexecutor\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mPDEExecutor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mworld\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpde\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtarget_state\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtrainable_networks\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdt\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 62\u001b[0m \u001b[0msequence\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msequence\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msequence_class\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mexecutor\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 63\u001b[0;31m \u001b[0msequence\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexecute\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 64\u001b[0m \u001b[0mall_states\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mall_states\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mframe\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mworldstate\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mframe\u001b[0m \u001b[0;32min\u001b[0m \u001b[0msequence\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mframe\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 65\u001b[0m \u001b[0;31m# --- Loss ---\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/Dropbox/mbaDevelSelected/pbdl-book/PDE-Control/src/control/sequences.py\u001b[0m in \u001b[0;36mexecute\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 47\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 48\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mexecute\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 49\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpartition_execute\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstep_count\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 50\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 51\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mpartition_execute\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstart_frame_index\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/Dropbox/mbaDevelSelected/pbdl-book/PDE-Control/src/control/sequences.py\u001b[0m in \u001b[0;36mpartition_execute\u001b[0;34m(self, n, start_frame_index, **kwargs)\u001b[0m\n\u001b[1;32m 53\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mleaf_execute\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_frames\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mstart_frame_index\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_frames\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mstart_frame_index\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 54\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 55\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbranch_execute\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstart_frame_index\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 56\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 57\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mleaf_execute\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstart_frame\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mend_frame\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/Dropbox/mbaDevelSelected/pbdl-book/PDE-Control/src/control/sequences.py\u001b[0m in \u001b[0;36mbranch_execute\u001b[0;34m(self, n, start_frame_index, **kwargs)\u001b[0m\n\u001b[1;32m 109\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 110\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mbranch_execute\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstart_frame_index\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 111\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpartition\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstart_frame_index\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 112\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 113\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/Dropbox/mbaDevelSelected/pbdl-book/PDE-Control/src/control/sequences.py\u001b[0m in \u001b[0;36mpartition\u001b[0;34m(self, n, start_frame_index)\u001b[0m\n\u001b[1;32m 63\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mpartition\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstart_frame_index\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 64\u001b[0m self.executor.partition(n, self._frames[start_frame_index], self._frames[start_frame_index + n],\n\u001b[0;32m---> 65\u001b[0;31m self._frames[start_frame_index + n // 2])\n\u001b[0m\u001b[1;32m 66\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 67\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__getitem__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/Dropbox/mbaDevelSelected/pbdl-book/PDE-Control/src/control/hierarchy.py\u001b[0m in \u001b[0;36mpartition\u001b[0;34m(self, n, initial_frame, target_frame, center_frame)\u001b[0m\n\u001b[1;32m 56\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mpartition\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minitial_frame\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtarget_frame\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcenter_frame\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 57\u001b[0m \u001b[0mPartitioningExecutor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpartition\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minitial_frame\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtarget_frame\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcenter_frame\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 58\u001b[0;31m \u001b[0mcenter_frame\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mworldstate\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpde\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minitial_frame\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mworldstate\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtarget_frame\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mworldstate\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtrainable\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'OP%d'\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0mn\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtrainable_networks\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 59\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 60\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mcenter_frame\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mworldsteps\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/Dropbox/mbaDevelSelected/pbdl-book/PDE-Control/src/control/pde/incompressible_flow.py\u001b[0m in \u001b[0;36mpredict\u001b[0;34m(self, n, initial_worldstate, target_worldstate, trainable)\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0md1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0md2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0minitial_worldstate\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdensity\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtarget_worldstate\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdensity\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvariable_scope\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'OP%d'\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 20\u001b[0;31m \u001b[0mdensity_pred\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mu_net\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdomain\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0md1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0md2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0md1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlevels\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtrainable\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtrainable\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreuse\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mAUTO_REUSE\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcopied_with\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mage\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0md1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mage\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0md2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mage\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0;36m2.\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcopied_with\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0md1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 21\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0minitial_worldstate\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstate_replaced\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdensity_pred\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/standard_networks.py\u001b[0m in \u001b[0;36mu_net\u001b[0;34m(domain, input_fields, output_field, levels, filters, blocks_per_level, skip_combine, training, trainable, reuse)\u001b[0m\n\u001b[1;32m 43\u001b[0m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mconv_layer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresolutions\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlevel_filters\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstrides\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mactivation\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrelu\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpadding\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'valid'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'down_convolution_%d'\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0mlevel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtrainable\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtrainable\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreuse\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mreuse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 44\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mblocks_per_level\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 45\u001b[0;31m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mresidual_block\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlevel_filters\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'down_res_block_%d_%d'\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mlevel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtraining\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtraining\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtrainable\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtrainable\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreuse\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mreuse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 46\u001b[0m \u001b[0mresolutions\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minsert\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 47\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/grid_layers.py\u001b[0m in \u001b[0;36mresidual_block\u001b[0;34m(grid, nb_channels, kernel_size, stride, activation, _project_shortcut, padding, name, training, trainable, reuse)\u001b[0m\n\u001b[1;32m 23\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mresidual_block\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgrid\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnb_channels\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkernel_size\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstride\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mactivation\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mleaky_relu\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_project_shortcut\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpadding\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"SYMMETRIC\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtraining\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtrainable\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreuse\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mAUTO_REUSE\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 24\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mgrid\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrank\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 25\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0m_residual_block_2d\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgrid\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnb_channels\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkernel_size\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstride\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mactivation\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_project_shortcut\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpadding\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtraining\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtrainable\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreuse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 26\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mgrid\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrank\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 27\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0m_residual_block_1d\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgrid\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnb_channels\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkernel_size\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstride\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mactivation\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_project_shortcut\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpadding\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtraining\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtrainable\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreuse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/grid_layers.py\u001b[0m in \u001b[0;36m_residual_block_2d\u001b[0;34m(grid, nb_channels, kernel_size, stride, activation, _project_shortcut, padding, name, training, trainable, reuse)\u001b[0m\n\u001b[1;32m 86\u001b[0m \u001b[0;31m# shortcut = tf.layers.batch_normalization(shortcut, name=None if name is None else name+\"/normid\", training=training, trainable=trainable, reuse=reuse)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 87\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 88\u001b[0;31m \u001b[0my\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0mshortcut\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 89\u001b[0m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mactivation\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 90\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mCenteredGrid\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbox\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mgrid\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbox\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mextrapolation\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mgrid\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mextrapolation\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.7/site-packages/tensorflow_core/python/ops/math_ops.py\u001b[0m in \u001b[0;36mbinary_op_wrapper\u001b[0;34m(x, y)\u001b[0m\n\u001b[1;32m 897\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname_scope\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mop_name\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 898\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTensor\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTensor\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 899\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 900\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msparse_tensor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mSparseTensor\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 901\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.7/site-packages/tensorflow_core/python/ops/math_ops.py\u001b[0m in \u001b[0;36m_add_dispatch\u001b[0;34m(x, y, name)\u001b[0m\n\u001b[1;32m 1195\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mgen_math_ops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1196\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1197\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mgen_math_ops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd_v2\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1198\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1199\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mgen_math_ops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.7/site-packages/tensorflow_core/python/ops/gen_math_ops.py\u001b[0m in \u001b[0;36madd_v2\u001b[0;34m(x, y, name)\u001b[0m\n\u001b[1;32m 547\u001b[0m \u001b[0;31m# Add nodes to the TensorFlow graph.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 548\u001b[0m _, _, _op = _op_def_lib._apply_op_helper(\n\u001b[0;32m--> 549\u001b[0;31m \"AddV2\", x=x, y=y, name=name)\n\u001b[0m\u001b[1;32m 550\u001b[0m \u001b[0m_result\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_op\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0moutputs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 551\u001b[0m \u001b[0m_inputs_flat\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_op\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minputs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.7/site-packages/tensorflow_core/python/framework/op_def_library.py\u001b[0m in \u001b[0;36m_apply_op_helper\u001b[0;34m(self, op_type_name, name, **keywords)\u001b[0m\n\u001b[1;32m 792\u001b[0m op = g.create_op(op_type_name, inputs, dtypes=None, name=scope,\n\u001b[1;32m 793\u001b[0m \u001b[0minput_types\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minput_types\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mattrs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mattr_protos\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 794\u001b[0;31m op_def=op_def)\n\u001b[0m\u001b[1;32m 795\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 796\u001b[0m \u001b[0;31m# Conditionally invoke tfdbg v2's op callback(s).\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.7/site-packages/tensorflow_core/python/util/deprecation.py\u001b[0m in \u001b[0;36mnew_func\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 505\u001b[0m \u001b[0;34m'in a future version'\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mdate\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m'after %s'\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0mdate\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 506\u001b[0m instructions)\n\u001b[0;32m--> 507\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 508\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 509\u001b[0m doc = _add_deprecated_arg_notice_to_docstring(\n", + "\u001b[0;32m/usr/local/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py\u001b[0m in \u001b[0;36mcreate_op\u001b[0;34m(***failed resolving arguments***)\u001b[0m\n\u001b[1;32m 3355\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Input #%d is not a tensor: %s\"\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0midx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3356\u001b[0m return self._create_op_internal(op_type, inputs, dtypes, input_types, name,\n\u001b[0;32m-> 3357\u001b[0;31m attrs, op_def, compute_device)\n\u001b[0m\u001b[1;32m 3358\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3359\u001b[0m def _create_op_internal(\n", + "\u001b[0;32m/usr/local/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py\u001b[0m in \u001b[0;36m_create_op_internal\u001b[0;34m(self, op_type, inputs, dtypes, input_types, name, attrs, op_def, compute_device)\u001b[0m\n\u001b[1;32m 3424\u001b[0m \u001b[0minput_types\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minput_types\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3425\u001b[0m \u001b[0moriginal_op\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_default_original_op\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3426\u001b[0;31m op_def=op_def)\n\u001b[0m\u001b[1;32m 3427\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_create_op_helper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mret\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcompute_device\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcompute_device\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3428\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mret\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, node_def, g, inputs, output_types, control_inputs, input_types, original_op, op_def)\u001b[0m\n\u001b[1;32m 1768\u001b[0m op_def, inputs, node_def.attr)\n\u001b[1;32m 1769\u001b[0m self._c_op = _create_c_op(self._graph, node_def, grouped_inputs,\n\u001b[0;32m-> 1770\u001b[0;31m control_input_ops)\n\u001b[0m\u001b[1;32m 1771\u001b[0m \u001b[0;31m# pylint: enable=protected-access\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1772\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py\u001b[0m in \u001b[0;36m_create_c_op\u001b[0;34m(graph, node_def, inputs, control_inputs)\u001b[0m\n\u001b[1;32m 1608\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0merrors\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mInvalidArgumentError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1609\u001b[0m \u001b[0;31m# Convert to ValueError for backwards compatibility.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1610\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1611\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1612\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mc_op\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mValueError\u001b[0m: Dimensions must be equal, but are 35 and 37 for 'OP2/add_1' (op: 'AddV2') with input shapes: [?,35,35,16], [?,37,37,16]." + ] + } + ], "source": [ "supervised_checkpoints = {}\n", "\n", @@ -316,7 +394,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -324,30 +402,14 @@ "id": "_A9-V1Vg30dl", "outputId": "cf4ff331-e175-4350-928b-7172043c22f1" }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'OP16': '/root/phi/model/control-training/sim_000003/checkpoint_00001000',\n", - " 'OP2': '/root/phi/model/control-training/sim_000000/checkpoint_00001000',\n", - " 'OP4': '/root/phi/model/control-training/sim_000001/checkpoint_00001000',\n", - " 'OP8': '/root/phi/model/control-training/sim_000002/checkpoint_00001000'}" - ] - }, - "execution_count": 14, - "metadata": { - "tags": [] - }, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "supervised_checkpoints" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": { "id": "jD7nKXCv30dl" }, @@ -394,7 +456,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "metadata": { "id": "-KOcgr5M30dn" }, @@ -436,7 +498,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -444,83 +506,7 @@ "id": "iJjrTrl530dp", "outputId": "75fc502c-b769-4fe8-9332-a1401d6476df" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "App created. Scene directory is /root/phi/model/control-training/sim_000005 (INFO), 2021-03-03 09:56:12,572n\n", - "\n", - "Sequence class: (INFO), 2021-03-03 09:56:12,575n\n", - "\n", - "Partition length 16 sequence (from 0 to 16) at frame 8\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.7/dist-packages/phi/struct/context.py:18: UserWarning: struct.unsafe() is deprecated. Use map() with new_type argument to avoid validation.\n", - " warnings.warn(\"struct.unsafe() is deprecated. Use map() with new_type argument to avoid validation.\")\n", - "/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/legacy_tf_layers/convolutional.py:414: UserWarning: `tf.layers.conv2d` is deprecated and will be removed in a future version. Please Use `tf.keras.layers.Conv2D` instead.\n", - " warnings.warn('`tf.layers.conv2d` is deprecated and '\n", - "/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/base_layer_v1.py:1719: UserWarning: `layer.apply` is deprecated and will be removed in a future version. Please use `layer.__call__` method instead.\n", - " warnings.warn('`layer.apply` is deprecated and '\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Partition length 8 sequence (from 0 to 8) at frame 4\n", - "Partition length 4 sequence (from 0 to 4) at frame 2\n", - "Partition length 2 sequence (from 0 to 2) at frame 1\n", - "Execute -> 1\n", - "Execute -> 2\n", - "Partition length 2 sequence (from 2 to 4) at frame 3\n", - "Execute -> 3\n", - "Execute -> 4\n", - "Partition length 4 sequence (from 4 to 8) at frame 6\n", - "Partition length 2 sequence (from 4 to 6) at frame 5\n", - "Execute -> 5\n", - "Execute -> 6\n", - "Partition length 2 sequence (from 6 to 8) at frame 7\n", - "Execute -> 7\n", - "Execute -> 8\n", - "Partition length 8 sequence (from 8 to 16) at frame 12\n", - "Partition length 4 sequence (from 8 to 12) at frame 10\n", - "Partition length 2 sequence (from 8 to 10) at frame 9\n", - "Execute -> 9\n", - "Execute -> 10\n", - "Partition length 2 sequence (from 10 to 12) at frame 11\n", - "Execute -> 11\n", - "Execute -> 12\n", - "Partition length 4 sequence (from 12 to 16) at frame 14\n", - "Partition length 2 sequence (from 12 to 14) at frame 13\n", - "Execute -> 13\n", - "Execute -> 14\n", - "Partition length 2 sequence (from 14 to 16) at frame 15\n", - "Execute -> 15\n", - "Execute -> 16\n", - "Target loss: Tensor(\"truediv_16:0\", shape=(), dtype=float32) (INFO), 2021-03-03 09:56:35,565n\n", - "\n", - "Force loss: Tensor(\"truediv_107:0\", shape=(), dtype=float32) (INFO), 2021-03-03 09:56:41,314n\n", - "\n", - "Supervised loss at frame 16: Tensor(\"truediv_108:0\", shape=(), dtype=float32) (INFO), 2021-03-03 09:56:41,329n\n", - "\n", - "Setting up loss (INFO), 2021-03-03 09:56:41,331n\n", - "\n", - "Preparing data (INFO), 2021-03-03 09:57:11,975n\n", - "\n", - "Initializing variables (INFO), 2021-03-03 09:57:11,994n\n", - "\n", - "Model variables contain 0 total parameters. (INFO), 2021-03-03 09:57:14,868n\n", - "\n", - "Validation (000000): Learning_Rate: 0.0005, GT_obs_16: 392040.8, Loss_reg_unscaled: 0.9713974, Loss_reg_scale: 1.0, Loss: 784081.6 (INFO), 2021-03-03 09:57:33,122n\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "staggered_app = ControlTraining(step_count, IncompressibleFluidPDE(domain, dt),\n", " datapath=data_path, val_range=val_range, train_range=train_range, trace_to_channel=lambda _: 'density',\n", @@ -555,7 +541,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": { "id": "xpLvDj5-30dq" }, @@ -577,7 +563,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": { "id": "8AgfnvE830dr" }, @@ -588,7 +574,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -597,21 +583,7 @@ "id": "dJvecqOY30dr", "outputId": "d20b09e3-a7bb-4298-ffba-97a966779650" }, - "outputs": [ - { - "data": { - "image/png": "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NImIiIiIiHShoklERERERKQLFU0iIiIiIiJdqGgSERERERHpQkWTiIiIiIhIFyqaREREREREulDRJCIiIiIi0oWKJhERERERkS5UNImIiIiIiHShoklERERERKQLFU0iIiIiIiJdqGgSERERERHpQkWTiIiIiIhIFyqaREREREREulDRJCIiIiIi0oWKJhERERERkS5UNImIiIiIiHShoklERERERKQLFU0iIiIiIiJdqGgSERERERHpQkWTiIiIiIhIFyqaREREREREulDRJCIiIiIi0oWKJhERERERkS5UNImIiIiIiHShoklERERERKQLFU0iIiIiIiJdqGgSERERERHpQkWTiIiIiIhIFyqaREREREREulDRJCIiIiIi0oWKJhERERERkS5UNImIiIiIiHShoklERERERKQLFU0iIiIiIiJdqGgSERERERHpQkWTiIiIiIhIFyqaREREREREulDRJCIiIiIi0oWKJhERERERkS5UNImIiIiIiHShoklERERERKQLFU0iIiIiIiJdqGgSERERERHpQkWTiIiIiIhIFyqaREREREREulDRJCIiIiIi0oWKJhERERERkS5UNImIiIiIiHShoklERERERKQLFU0iIiIiIiJdqGgSERERERHpYtsVTWZ23MzesobX3W5m95lZrfP19lWP/b6ZfWCNyzNsZh81s6qZPWdm37OWdnrVOvL+oJkdM7PYzH7gvMd+1sz+cI3L824z+7vO3/GutbTRy9aSt5kdMbOPmdm0mc2Z2afN7Oiqx9eT96+Y2ZNmtmxmj5vZe9fSTq9aY96jZvYlM5s1swUz+7KZvW7V4+vJ+5fN7KSZLXW2Jz+9lnZ61Vq3J6te/14zc2b2Q6vuW/P2e1Ubh82ssda/W69ax/bbdT7TKp3bf1n12Ho+L+/q5LzS7rG1tNOr1pG3b2YfMLPTnW3t/WY22HlszduTzuvfYmZf6/w9T5nZu9faVi9Z47b79avWvZWbM7Pv6jy+nm33o+e1G5rZJ9bSVi9ax7r99zrr35KZPWNm71v12A+Y2RfXuDw5M/stMzvX2e/5hJntXktbV2LbFU1rYWZZ4GPAHwJDwIeAj3XuX6/fAFrABPAPgd80s5s3oN3t7kHgnwJf2+B254D/APziBre7nQ0CHweOkqyH95Cs7xuhCvx9YAD4fuDXzey1G9T2dlUB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L+UdL+Udr0XJO66iqQc4POPnI7XnzjcO+KaZPWpmH6o9t8o5d7z2fR+wKob5uBDyXi5Zg/IG5b3QlHe8lHe8lHe8lHe8lHe8Yst7Xvdpkh9wm3PuqJl1AfeY2e6ZLzrnnJlpjPeFoazjpbzjpbzjpbzjpbzjpbzjpbzjFVvecZ1pOgqsnfFzb+2584pz7mjt6wngi0SnRfvNbDVA7euJGGblvM97GWUNylt5LzDlHS/lHS/lHS/lHS/lHa84846raHoE2GJmG80sBfwEcFdMnx0LM2sws6aT3wOvA54m+j3fV3vb+4AvxzA753XeyyxrUN6gvBeM8o6X8o6X8o6X8o6X8o5X3HnH0j3POVc1sw8D3yAayeOTzrln4vjsGK0CvmhmEOX6Gefc183sEeBzZvYB4CDwzsWekQsg72WTNShv5b3glHe8lHe8lHe8lHe8lHe8Ys3basPxiYiIiIiIyGnEdnNbERERERGRlUhFk4iIiIiISB0qmkREREREROpQ0SQiIiIiIlKHiiYREREREZE6VDSJiIiIiIjUoaJJRERERESkDhVNIiIiIiIidahoEhERERERqUNFk4iIiIiISB0qmkREREREROpQ0SQiIiIiIlKHiiYREREREZE6VDSJiIiIiIjUoaJJRERERESkDhVNIiIiIiIidahoEhERERERqUNFk4iIiIiISB0qmkREREREROpQ0SQiIiIiIlKHiiYREREREZE6VDSJiIiIiIjUoaJJRERERESkDhVNIiIiIiIidahoEhERERERqUNFk4iIiIiISB0qmkREREREROpQ0SQiIiIiIlKHiiYREREREZE6VDSJiIiIiIjUoaJJRERERESkDhVNIiIiIiIidahoEhERERERqUNFk4iIiIiISB0qmkREREREROpQ0SQiIiIiIlKHiiYREREREZE6VDSJiIiIiIjUoaJJRERERESkDhVNIiIiIiIidahoEhERERERqUNFk4iIiIiISB0qmkREREREROpQ0SQiIiIiIlKHiiYREREREZE6VDSJiIiIiIjUoaJJRERERESkDhVNIiIiIiIidahoEhERERERqUNFk4iIiIiISB0qmkREREREROpQ0SQiIiIiIlKHiiYREREREZE6VDSJiIiIiIjUseKKJjM7YGZ3zGG67Wb2qJkVal+3z3jtb8zso3OcnzYz+6KZTZnZ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r/v8wblOq7zP3ZnyVvc8ERERERGROlQ0iYiIiIiI1KGiSUREREREpA4VTSIiIiIiInWoaBIREREREalDRZOIiIiIiEgdKppERERERETqUNEkIiIiIiJSh4omERERERGROlQ0iYiIiIiI1KGiSUREREREpI7EbN5kZgeACSAAqs6568ysDfhHYANwAHinc25kcWbzwvIddzc+CYpMYWY7lPfiUt7xUt7xUt7xUt7xUt7xUt7xOpk3sE15L71zOdP0Q8657c6562o/3wnc55zbAtxX+1kWyLW8igbyKO94KO94Ke94Ke94Ke94Ke94Ke94XcurAHYp76U3n+55bwU+Vfv+U8Db5j87UofyjpfyjpfyjpfyjpfyjpfyjpfyjpfyXiKzLZoc8E0ze9TMPlR7bpVz7njt+z5g1ekmNLMPmdkOM9tRoTzP2b1wPM4DTDGO8o6H8o6X8o6X8o6X8o6X8o7XXPJW1nP3OA8AXKq8l545587+JrMe59xRM+sC7gF+AbjLOdcy4z0jzrnWeu3krc3daK+Z7zyf90quSMayPOjuYYqxnSjvRaW846W846W846W846W847UQeSvr2TuZ973u808ChvKOxb3u84/O6A75olmdaXLOHa19PQF8EbgB6Dez1QC1rycWbnYvbBnLAuBFfx7lvciUd7yUd7yUd7yUd7yUd7yUd7xO5g1UUd5L7qxFk5k1mFnTye+B1wFPA3cB76u97X3AlxdrJi8kgatSdRUAHA6U96JS3vFS3vFS3vFS3vFS3vFS3vGamTfR/rryXmKzGXJ8FfBFMzv5/s84575uZo8AnzOzDwAHgXcu3mxeOMqU2MmD4KDABMDXlPfiUd7xUt7xUt7xUt7xUt7xUt7xmpk3cCnwUeW9tGZ1TdNCUb/Kc/Owu49xN2xznV55nxvlHS/lHS/lHS/lHS/lHa/55K2sz92ZrrGZDeV97uZ1TZOIiIiIiMiFSkWTiIiIiIhIHSqaRERERERE6lDRJCIiIiIiUoeKJhERERERkTpUNImIiIiIiNShoklERERERKQOFU0iIiIiIiJ1qGgSERERERGpQ0WTiIiIiIhIHSqaRERERERE6lDRJCIiIiIiUoeKJhERERERkTpUNImIiIiIiNShoklERERERKQOFU0iIiIiInJmZuD50dcLVGKpZ0BERERERJYpz8dLJcH3IQhw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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light", - "tags": [] - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "import pylab\n", "batches = [0, 1, 2]\n", @@ -672,7 +644,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.5" + "version": "3.7.6" } }, "nbformat": 4, diff --git a/intro.md b/intro.md index c20e5e9..6584034 100644 --- a/intro.md +++ b/intro.md @@ -82,10 +82,10 @@ See also... Test link: {doc}`supervised` ## TODOs , include -- DP SoL, generate result - DP control, show targets at bottom? - update teaser image - DP intro, check transpose of Jacobians in equations +- fix phiflow2 , diffphys-code-ns.ipynb - outlook: include latent space physics & LSTMs, also ContConv benjamin (see below)