notebooks update

This commit is contained in:
NT committed 2021-01-07 19:28:50 +08:00
1 parent 73fc7056d8
commit d7ff9173eb
5 files changed
+1418 -101

No files matched your search

+312
View File
@@ -0,0 +1,312 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Burgers Optimizationwith a Gradient Differentiable Physics\n",
"\n",
"manual!\n",
"\n",
"like PINN... now only DOFs are initial state! rest is determined by simulation\n",
"\n",
"build graph from sim (ignore warning)"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Could not load resample cuda libraries: CUDA binaries not found at /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/cuda/build/resample.so. Run \"python setup.py cuda\" to compile them\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/util.py:119: The name tf.AUTO_REUSE is deprecated. Please use tf.compat.v1.AUTO_REUSE instead.\n",
"\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/profiling.py:12: The name tf.RunOptions is deprecated. Please use tf.compat.v1.RunOptions instead.\n",
"\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/profiling.py:13: The name tf.RunMetadata is deprecated. Please use tf.compat.v1.RunMetadata instead.\n",
"\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/util.py:30: The name tf.placeholder is deprecated. Please use tf.compat.v1.placeholder instead.\n",
"\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/tf_backend.py:287: to_complex64 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Use `tf.cast` instead.\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/tf_backend.py:375: The name tf.fft is deprecated. Please use tf.signal.fft instead.\n",
"\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/tf_backend.py:387: The name tf.ifft is deprecated. Please use tf.signal.ifft instead.\n",
"\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/tf_backend.py:399: The name tf.real is deprecated. Please use tf.math.real instead.\n",
"\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/flow.py:15: UserWarning: TensorFlow-CUDA solver is not available. To compile it, download phiflow sources and run\n",
"$ python setup.py tf_cuda\n",
"before reinstalling phiflow.\n",
" warnings.warn(\"TensorFlow-CUDA solver is not available. To compile it, download phiflow sources and run\\n$ python setup.py tf_cuda\\nbefore reinstalling phiflow.\")\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Each velocity is a phiflow grid like this one: Grid[128(1), size=[2.], <class 'numpy.float32'>]\n"
]
}
],
"source": [
"from phi.tf.flow import *\n",
"\n",
"# run with phiflow\n",
"n = 128\n",
"dt = 1./32.\n",
"initial = np.zeros([n,1]) # start from 0\n",
"\n",
"domain = Domain([n], boundaries=PERIODIC, box=box[-1:1])\n",
"state0 = BurgersVelocity(domain, velocity=initial, viscosity=0.01/np.pi)\n",
"\n",
"# start with a state0, to be modified\n",
"state_in = state0.copied_with(velocity=placeholder)\n",
"states = [state_in]\n",
"\n",
"for i in range(32):\n",
" states.append( Burgers().step(states[-1],dt=dt) )\n",
"\n",
"print(\"Each velocity is a phiflow grid like this one: \" + format(states[-1].velocity) )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note, this didnt run anything! let's set up the loss"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/session.py:17: 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/session.py:28: The name tf.global_variables_initializer is deprecated. Please use tf.compat.v1.global_variables_initializer instead.\n",
"\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/session.py:29: The name tf.train.Saver is deprecated. Please use tf.compat.v1.train.Saver instead.\n",
"\n",
"Initial loss 0.3829152584075928\n"
]
}
],
"source": [
"sess = Session(None) \n",
"\n",
"# enforce constraints at time t=0.5 (step 16)\n",
"solution_t16 = np.asarray( [0.008612174447657694, 0.02584669669548606, 0.043136357266407785, 0.060491074685516746, 0.07793926183951633, 0.0954779141740818, 0.11311894389663882, 0.1308497114054023, 0.14867023658641343, 0.1665634396808965, 0.18452263429574314, 0.20253084411376132, 0.22057828799835133, 0.23865132431365316, 0.25673879161339097, 0.27483167307082423, 0.2929182325574904, 0.3109944766354339, 0.3290477753208284, 0.34707880794585116, 0.36507311960102307, 0.38303584302507954, 0.40094962955534186, 0.4188235294008765, 0.4366357052408043, 0.45439856841363885, 0.4720845505219581, 0.4897081943759776, 0.5072391070000235, 0.5247011051514834, 0.542067187709797, 0.5593576751669057, 0.5765465453632126, 0.5936507311857876, 0.6106452944663003, 0.6275435911624945, 0.6443221318186165, 0.6609900633731869, 0.67752574922899, 0.6939334022562877, 0.7101938106059631, 0.7263049537163667, 0.7422506131457406, 0.7580207366534812, 0.7736033721649875, 0.7889776974379873, 0.8041371279965555, 0.8190465276590387, 0.8337064887158392, 0.8480617965162781, 0.8621229412131242, 0.8758057344502199, 0.8891341984763013, 0.9019806505391214, 0.9143881632159129, 0.9261597966464793, 0.9373647624856912, 0.9476871303793314, 0.9572273019669029, 0.9654367940878237, 0.9724097482283165, 0.9767381835635638, 0.9669484658390122, 0.659083299684951, -0.659083180712816, -0.9669485121167052, -0.9767382069792288, -0.9724097635533602, -0.9654367970450167, -0.9572273263645859, -0.9476871280825523, -0.9373647681120841, -0.9261598056102645, -0.9143881718456056, -0.9019807055316369, -0.8891341634240081, -0.8758057205293912, -0.8621229450911845, -0.8480618138204272, -0.833706571569058, -0.8190466131476127, -0.8041372124868691, -0.7889777195422356, -0.7736033858767385, -0.758020740007683, -0.7422507481169578, -0.7263049162371344, -0.7101938950789042, -0.6939334061553678, -0.677525822052029, -0.6609901538934517, -0.6443222327338847, -0.6275436932970322, -0.6106454472814152, -0.5936507836778451, -0.5765466491708988, -0.5593578078967361, -0.5420672759411125, -0.5247011730988912, -0.5072391580614087, -0.4897082914472909, -0.47208460952428394, -0.4543985995006753, -0.4366355580500639, -0.41882350871539187, -0.40094955631843376, -0.38303594105786365, -0.36507302109186685, -0.3470786936847069, -0.3290476440540586, -0.31099441589505206, -0.2929180880304103, -0.27483158663081614, -0.2567388003912687, -0.2386513127155433, -0.22057831776499126, -0.20253089403524566, -0.18452269630486776, -0.1665634500729787, -0.14867027528284874, -0.13084990929476334, -0.1131191325854089, -0.09547794429803691, -0.07793928430794522, -0.06049114408297565, -0.0431364527809777, -0.025846763281087953, -0.00861212501518312] )\n",
"target = state0.copied_with(velocity=np.reshape(solution_t16,[n,1]))\n",
"\n",
"loss = math.sum( (states[16].velocity.data - target.velocity.data)**2 ) / n\n",
"sess.initialize_variables()\n",
"\n",
"# compute initial loss\n",
"s,l = sess.run([states[-1],loss], feed_dict={state_in: state0})\n",
"print(\"Initial loss \"+format(l))\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note: because we're only constraining timestep 16, we could actually omit steps 17 to 31 here, but for fairness and comparison with the PINN case, let's include them."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING:tensorflow:From /usr/local/lib/python3.7/site-packages/tensorflow_core/python/ops/math_grad.py:1375: where (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Use tf.where in 2.0, which has the same broadcast rule as np.where\n",
"Step 0, loss = 0.3829152584075928\n",
"Step 1, loss = 0.3334265947341919\n",
"Step 2, loss = 0.2905231714248657\n",
"Step 3, loss = 0.25346457958221436\n",
"Step 4, loss = 0.2215319573879242\n"
]
}
],
"source": [
"LR = 5.\n",
"stateN = state0\n",
"grads = []\n",
"for i in range(5):\n",
" grads.append( tf.gradients(loss, [state_in.velocity.data] ) ) # use TF\n",
" grads.append( gradients(loss, state_in.velocity) ) # phiflow wrapper also works\n",
"\n",
" state_updated = state_in.copied_with( velocity=(state_in.velocity - LR*grads[-1]) )\n",
" stateN,l = sess.run([state_updated,loss], feed_dict={state_in: stateN})\n",
"\n",
" #s,l = sess.run([states[-1],loss], feed_dict={state_in: stateN})\n",
" print( \"Step {}, loss = {}\".format(i,l) )\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's visualize the reconstruction: first \n",
"\n",
"gradient, pointing in the \"wrong\" direction, we're taking a step along the negative direction"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x139d41c90>]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"fig = plt.figure().gca()\n",
"pltx = np.linspace(-1,1,n)\n",
"\n",
"# first gradient\n",
"[grad0,s0] = sess.run([grads[0],state0], feed_dict={state_in: stateN}) #.velocity.data\n",
"fig.plot(pltx, grad0[0].flatten() , lw=2, color='red') \n",
"\n",
"# # target constraint at t=0.5\n",
"# fig.plot(pltx, target.velocity.data.flatten(), lw=2, color='forestgreen') \n",
"\n",
"# # constrained state of simulation\n",
"# contrained_state = sess.run(states[16], feed_dict={state_in: stateN}).velocity.data\n",
"fig.plot(pltx, state0.velocity.data.flatten(), lw=2, color='mediumblue')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"... how well the last state of the simulation matches the target"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x139a7b890>]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure().gca()\n",
"pltx = np.linspace(-1,1,n)\n",
"\n",
"# initial guess for optimization, this is where we started out...\n",
"fig.plot(pltx, initial.flatten() , lw=2, color='linen') \n",
"\n",
"# target constraint at t=0.5\n",
"fig.plot(pltx, target.velocity.data.flatten(), lw=2, color='forestgreen') \n",
"\n",
"# constrained state of simulation\n",
"contrained_state = sess.run(states[16], feed_dict={state_in: stateN}).velocity.data\n",
"fig.plot(pltx, contrained_state.flatten(), lw=2, color='mediumblue')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Seems to be going in the right direction, but not there yet... It's a bit slow, and needs more iterations.\n",
"\n",
"Suboptimal so far: update via gradient manually computed with multiple TF session run() calls. TF optimizers do this internally, more flexibly and more efficiently... Let's start over, and switch to a `tf.train.Optimizer()` instead."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
+360
View File
@@ -0,0 +1,360 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Burgers backwards opt in phiflow-TF optim\n",
"\n",
"Use actual TF optimizer"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Could not load resample cuda libraries: CUDA binaries not found at /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/cuda/build/resample.so. Run \"python setup.py cuda\" to compile them\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/util.py:119: The name tf.AUTO_REUSE is deprecated. Please use tf.compat.v1.AUTO_REUSE instead.\n",
"\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/profiling.py:12: The name tf.RunOptions is deprecated. Please use tf.compat.v1.RunOptions instead.\n",
"\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/profiling.py:13: The name tf.RunMetadata is deprecated. Please use tf.compat.v1.RunMetadata instead.\n",
"\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/tf_backend.py:287: to_complex64 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Use `tf.cast` instead.\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/tf_backend.py:375: The name tf.fft is deprecated. Please use tf.signal.fft instead.\n",
"\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/tf_backend.py:387: The name tf.ifft is deprecated. Please use tf.signal.ifft instead.\n",
"\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/tf_backend.py:399: The name tf.real is deprecated. Please use tf.math.real instead.\n",
"\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/flow.py:15: UserWarning: TensorFlow-CUDA solver is not available. To compile it, download phiflow sources and run\n",
"$ python setup.py tf_cuda\n",
"before reinstalling phiflow.\n",
" warnings.warn(\"TensorFlow-CUDA solver is not available. To compile it, download phiflow sources and run\\n$ python setup.py tf_cuda\\nbefore reinstalling phiflow.\")\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Each velocity is a phiflow grid like this one: Grid[128(1), size=[2.], <class 'numpy.float32'>]\n"
]
}
],
"source": [
"from phi.tf.flow import *\n",
"\n",
"# run with phiflow\n",
"n = 128\n",
"dt = 1./32.\n",
"initial = np.zeros([n,1]) # start from 0\n",
"\n",
"domain = Domain([n], boundaries=PERIODIC, box=box[-1:1])\n",
"state0 = BurgersVelocity(domain, velocity=initial, viscosity=0.01/np.pi)\n",
"\n",
"# now use a real TF variable instead\n",
"state_in = state0.copied_with(velocity= variable(state0.velocity) ) # <-- main change!\n",
"states = [state_in]\n",
"\n",
"for i in range(32):\n",
" states.append( Burgers().step(states[-1],dt=dt) )\n",
"\n",
"print(\"Each velocity is a phiflow grid like this one: \" + format(states[-1].velocity) )\n",
"#print(\"\\nFinal vel: \" + format(state[-1].velocity.data[0][0:10]) )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note, this didnt run anything! let's set up the loss"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/session.py:17: 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"
]
}
],
"source": [
"sess = Session(None) \n",
"\n",
"solution_t16 = np.asarray( [0.008612174447657694, 0.02584669669548606, 0.043136357266407785, 0.060491074685516746, 0.07793926183951633, 0.0954779141740818, 0.11311894389663882, 0.1308497114054023, 0.14867023658641343, 0.1665634396808965, 0.18452263429574314, 0.20253084411376132, 0.22057828799835133, 0.23865132431365316, 0.25673879161339097, 0.27483167307082423, 0.2929182325574904, 0.3109944766354339, 0.3290477753208284, 0.34707880794585116, 0.36507311960102307, 0.38303584302507954, 0.40094962955534186, 0.4188235294008765, 0.4366357052408043, 0.45439856841363885, 0.4720845505219581, 0.4897081943759776, 0.5072391070000235, 0.5247011051514834, 0.542067187709797, 0.5593576751669057, 0.5765465453632126, 0.5936507311857876, 0.6106452944663003, 0.6275435911624945, 0.6443221318186165, 0.6609900633731869, 0.67752574922899, 0.6939334022562877, 0.7101938106059631, 0.7263049537163667, 0.7422506131457406, 0.7580207366534812, 0.7736033721649875, 0.7889776974379873, 0.8041371279965555, 0.8190465276590387, 0.8337064887158392, 0.8480617965162781, 0.8621229412131242, 0.8758057344502199, 0.8891341984763013, 0.9019806505391214, 0.9143881632159129, 0.9261597966464793, 0.9373647624856912, 0.9476871303793314, 0.9572273019669029, 0.9654367940878237, 0.9724097482283165, 0.9767381835635638, 0.9669484658390122, 0.659083299684951, -0.659083180712816, -0.9669485121167052, -0.9767382069792288, -0.9724097635533602, -0.9654367970450167, -0.9572273263645859, -0.9476871280825523, -0.9373647681120841, -0.9261598056102645, -0.9143881718456056, -0.9019807055316369, -0.8891341634240081, -0.8758057205293912, -0.8621229450911845, -0.8480618138204272, -0.833706571569058, -0.8190466131476127, -0.8041372124868691, -0.7889777195422356, -0.7736033858767385, -0.758020740007683, -0.7422507481169578, -0.7263049162371344, -0.7101938950789042, -0.6939334061553678, -0.677525822052029, -0.6609901538934517, -0.6443222327338847, -0.6275436932970322, -0.6106454472814152, -0.5936507836778451, -0.5765466491708988, -0.5593578078967361, -0.5420672759411125, -0.5247011730988912, -0.5072391580614087, -0.4897082914472909, -0.47208460952428394, -0.4543985995006753, -0.4366355580500639, -0.41882350871539187, -0.40094955631843376, -0.38303594105786365, -0.36507302109186685, -0.3470786936847069, -0.3290476440540586, -0.31099441589505206, -0.2929180880304103, -0.27483158663081614, -0.2567388003912687, -0.2386513127155433, -0.22057831776499126, -0.20253089403524566, -0.18452269630486776, -0.1665634500729787, -0.14867027528284874, -0.13084990929476334, -0.1131191325854089, -0.09547794429803691, -0.07793928430794522, -0.06049114408297565, -0.0431364527809777, -0.025846763281087953, -0.00861212501518312] )\n",
"target = state0.copied_with(velocity=np.reshape(solution_t16,[n,1]))\n",
"\n",
"loss = math.sum( (states[16].velocity.data - target.velocity.data)**2 ) / n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note: because we're only constraining timestep 16, we could actually omit steps 17 to 31 here, but for fairness and comparison with the PINN case, let's include them.\n",
"\n",
"Now we don't need to keep track and pass along `state_in`, TF knows about the initial state as a variable we'd like to optimize."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING:tensorflow:From /usr/local/lib/python3.7/site-packages/tensorflow_core/python/ops/math_grad.py:1375: where (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Use tf.where in 2.0, which has the same broadcast rule as np.where\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/session.py:28: The name tf.global_variables_initializer is deprecated. Please use tf.compat.v1.global_variables_initializer instead.\n",
"\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/session.py:29: The name tf.train.Saver is deprecated. Please use tf.compat.v1.train.Saver instead.\n",
"\n",
"Initial loss: 0.382915\n",
"Step 0, loss: 0.382915\n",
"Step 5, loss: 0.194040\n",
"Step 10, loss: 0.103610\n",
"Step 15, loss: 0.059475\n",
"Step 20, loss: 0.035991\n",
"Step 25, loss: 0.022581\n",
"Step 30, loss: 0.014490\n",
"Step 35, loss: 0.009447\n",
"Step 40, loss: 0.006238\n",
"Step 45, loss: 0.004161\n",
"Runtime 1.89s\n"
]
}
],
"source": [
"LR = 5.\n",
"\n",
"optim = tf.train.GradientDescentOptimizer(learning_rate=LR).minimize(loss)\n",
"#optim = tf.train.AdamOptimizer(learning_rate=0.05).minimize(loss) # overshoots?\n",
"sess.initialize_variables() # TODO dup\n",
"\n",
"print('Initial loss: %f' % sess.run(loss))\n",
"\n",
"import time\n",
"start = time.time()\n",
"\n",
"for optim_step in range(50):\n",
" _, loss_value = sess.run([optim, loss])\n",
" \n",
" if optim_step%5==0: \n",
" print('Step %d, loss: %f' % (optim_step,loss_value))\n",
"\n",
"end = time.time()\n",
"print(\"Runtime {:.2f}s\".format(end-start))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's visualize the reconstruction: first how well the last state of the simulation matches the target"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x136ef4bd0>]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"fig = plt.figure().gca()\n",
"pltx = np.linspace(-1,1,n)\n",
"\n",
"# initial guess for optimization, this is where we started out...\n",
"fig.plot(pltx, initial.flatten() , lw=2, color='linen') \n",
"\n",
"# target constraint at t=0.5\n",
"fig.plot(pltx, target.velocity.data.flatten(), lw=2, color='forestgreen') \n",
"\n",
"# constrained state of simulation\n",
"contrained_state = sess.run(states[16]).velocity.data\n",
"fig.plot(pltx, contrained_state.flatten(), lw=2, color='mediumblue')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Not bad. How well is the initial state recovered via backpropagation through the 16 simulation steps?\n",
"Also matches quite well:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x136f4b290>]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure().gca()\n",
"pltx = np.linspace(-1,1,n)\n",
"\n",
"# ground truth state at time=0 , move down\n",
"t0gt = np.asarray( [ [-math.sin(np.pi * x) * 1.] for x in np.linspace(-1,1,n)] )\n",
"fig.plot(pltx, t0gt.flatten() , lw=2, color='forestgreen') # ground truth initial state of sim\n",
"\n",
"#fig.plot(pltx, stateN.velocity.data.flatten(), lw=2, color='mediumblue') # manual\n",
"fig.plot(pltx, sess.run(states[0]).velocity.data.flatten(), lw=2, color='mediumblue') # manual\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And as image over time..."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(1, 128, 33, 1)\n"
]
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"def show_state(a):\n",
" # we only have 33 time steps, blow up by a factor of 2^4 to make it easier to see\n",
" for i in range(4):\n",
" a = np.concatenate( [a,a] , axis=3)\n",
"\n",
" a = np.reshape( a, [a.shape[1],a.shape[2]*a.shape[3]] )\n",
" plt.imshow(a, origin='lower', cmap='magma')\n",
" \n",
"# run all states through TF to get numpy arrays \n",
"vels = sess.run(states) # convert all states in 1 sess.run() call\n",
"vels = [ x.velocity.data for x in vels] \n",
"#vels = np.asarray( [ sess.run(x, feed_dict={state_in: stateN}).velocity.data for x in states] ) # also works, but slower\n",
"sn = np.concatenate(vels, axis=-1)\n",
"sn = np.reshape(sn, list(sn.shape)+[1] ) ; print(sn.shape)\n",
"\n",
"show_state(sn)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So far only 1D Burgers, but this works with more complex model equations and higher dimensions in just the same way."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
+186
View File
@@ -0,0 +1,186 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Simple forward simulation in phiflow\n",
"\n",
"how to run\n",
"simple model equation $f(x) = ...$ "
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Note, the velocity array has a batch dimension, and 1 channel component in this 1D case: (1, 128, 1)\n",
"\n",
"Initial velocity state: [[1.2246469e-16]\n",
" [4.9453720e-02]\n",
" [9.8786421e-02]\n",
" [1.4787737e-01]\n",
" [1.9660644e-01]] ...\n",
"\n",
"Last velocity: [[0.00552158]\n",
" [0.0165598 ]\n",
" [0.02760994]\n",
" [0.03866227]\n",
" [0.04973169]\n",
" [0.06080895]\n",
" [0.07190682]\n",
" [0.08301631]\n",
" [0.09414805]\n",
" [0.10529345]] ...\n"
]
}
],
"source": [
"from phi.flow import *\n",
"\n",
"# run with phiflow\n",
"n = 128\n",
"dt = 1./32.\n",
"viscosity = 0.01/np.pi\n",
"initial = np.asarray( [ [-math.sin(np.pi * x) * 1.] for x in np.linspace(-1,1,n)] )\n",
"\n",
"domain = Domain([n], boundaries=PERIODIC, box=box[-1:1])\n",
"state = [BurgersVelocity(domain, velocity=initial, viscosity=viscosity)]\n",
"\n",
"print(\"Note, the velocity array has a batch dimension, and 1 channel component in this 1D case: \"+ format(state[0].velocity.data.shape) ) # -> (1, 128, 1)\n",
"print(\"\\nInitial velocity state: \" + format(state[0].velocity.data[0][0:5]) +\" ...\" )\n",
"\n",
"for i in range(32):\n",
"\n",
" v = state[-1].velocity\n",
" v = diffuse(v, dt * viscosity, substeps=1)\n",
" v = advect.semi_lagrangian(v, v, dt)\n",
" state.append( state[-1].copied_with(velocity=v, age=v.age + dt) )\n",
"\n",
" # here, we manually execute the different components of the PDE for clarity, \n",
" # in phiflow we could simply use the step() method of the Burgers() class:\n",
" #state.append( Burgers().step(state[-1], dt=dt) )\n",
" \n",
"print(\"\\nLast velocity: \" + format(state[-1].velocity.data[0][0:10]) +\" ...\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So far so good, but not so easy to evaluate. Show in graph: blue is initial state, then times $10/32, 20/32, 1$ in green, cyan and purple:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x122bc1550>]"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# we only need \"velocity.data\" from each phiflow state\n",
"vels = [x.velocity.data for x in state]\n",
"sn = np.concatenate(vels, axis=-1)\n",
"sn = np.reshape(sn, list(sn.shape)+[1] ) # print(sn.shape)\n",
"\n",
"# print(vels[0][0,:,0].shape)\n",
"# print(vels[0].shape[1])\n",
"\n",
"import matplotlib.pyplot as plt\n",
"\n",
"fig = plt.figure().gca()\n",
"fig.plot(np.linspace(-1,1,len(vels[ 0].flatten())), vels[ 0].flatten(), lw=2, color='blue')\n",
"fig.plot(np.linspace(-1,1,len(vels[10].flatten())), vels[10].flatten(), lw=2, color='green')\n",
"fig.plot(np.linspace(-1,1,len(vels[20].flatten())), vels[20].flatten(), lw=2, color='cyan')\n",
"fig.plot(np.linspace(-1,1,len(vels[32].flatten())), vels[32].flatten(), lw=2, color='purple')\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And as image..."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"def show_state(a):\n",
" # we only have 33 time steps, blow up by a factor of 2^4 to make it easier to see\n",
" # (could also be done with more evaluations of network)\n",
" for i in range(4):\n",
" a = np.concatenate( [a,a] , axis=3)\n",
"\n",
" a = np.reshape( a, [a.shape[1],a.shape[2]*a.shape[3]] )\n",
" #print(\"resulting image size\" +format(a.shape))\n",
" plt.imshow(a, origin='lower', cmap='magma')\n",
" \n",
"show_state(sn)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
+559 -101
View File
@@ -4,12 +4,15 @@
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {},
"source": [ "source": [
"# PINN Example\n", "# PINN Example \n",
"\n",
"Burgers example $u=...$\n", "Burgers example $u=...$\n",
"\n", "\n",
"at $t=0$ , sine function (boundary_t0)\n", "at $t=0$ , sine function (boundary_t0)\n",
"\n", "\n",
"at sides $t \\in [0,1], u=0$ (open_boundary)" "at sides $t \\in [0,1], u=0$ (open_boundary)\n",
"\n",
"## Preliminaries"
] ]
}, },
{ {
@@ -42,16 +45,18 @@
} }
], ],
"source": [ "source": [
"# PINN in jupyter test, from \n",
"# https://github.com/tum-pbs/PhiFlow/blob/1.5/demos/PINN_burgers.py\n",
"# https://colab.research.google.com/drive/1S21OY8hzh1oZK2wQyL3BNXvSlrMTtRbV#offline=true&sandboxMode=true\n",
"\n",
"from phi.tf.flow import *\n", "from phi.tf.flow import *\n",
"\n", "\n",
"#rnd = TF_BACKEND # sample different points in the domain each iteration\n", "#rnd = TF_BACKEND # sample different points in the domain each iteration\n",
"rnd = math.choose_backend(1) # use same random points for all iterations\n", "rnd = math.choose_backend(1) # use same random points for all iterations"
"\n", ]
"\n", },
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def network(x, t):\n", "def network(x, t):\n",
" \"\"\" Dense neural network with 8 hidden layers and 3021 parameters in total.\n", " \"\"\" Dense neural network with 8 hidden layers and 3021 parameters in total.\n",
" Parameters will only be allocated once (auto reuse).\n", " Parameters will only be allocated once (auto reuse).\n",
@@ -61,7 +66,6 @@
" y = tf.layers.dense(y, 20, activation=tf.math.tanh, name='layer%d' % i, reuse=tf.AUTO_REUSE)\n", " y = tf.layers.dense(y, 20, activation=tf.math.tanh, name='layer%d' % i, reuse=tf.AUTO_REUSE)\n",
" return tf.layers.dense(y, 1, activation=None, name='layer_out', reuse=tf.AUTO_REUSE)\n", " return tf.layers.dense(y, 1, activation=None, name='layer_out', reuse=tf.AUTO_REUSE)\n",
"\n", "\n",
"\n",
"def f(u, x, t):\n", "def f(u, x, t):\n",
" \"\"\" Physics-based loss function with Burgers equation \"\"\"\n", " \"\"\" Physics-based loss function with Burgers equation \"\"\"\n",
" u_t = gradients(u, t)\n", " u_t = gradients(u, t)\n",
@@ -69,20 +73,34 @@
" u_xx = gradients(u_x, x)\n", " u_xx = gradients(u_x, x)\n",
" return u_t + u*u_x - (0.01 / np.pi) * u_xx\n", " return u_t + u*u_x - (0.01 / np.pi) * u_xx\n",
"\n", "\n",
"def boundary_tx(N):\n",
" x = np.linspace(-1,1,128)\n",
" # precomputed solution from forward simulation:\n",
" u = np.asarray( [0.008612174447657694, 0.02584669669548606, 0.043136357266407785, 0.060491074685516746, 0.07793926183951633, 0.0954779141740818, 0.11311894389663882, 0.1308497114054023, 0.14867023658641343, 0.1665634396808965, 0.18452263429574314, 0.20253084411376132, 0.22057828799835133, 0.23865132431365316, 0.25673879161339097, 0.27483167307082423, 0.2929182325574904, 0.3109944766354339, 0.3290477753208284, 0.34707880794585116, 0.36507311960102307, 0.38303584302507954, 0.40094962955534186, 0.4188235294008765, 0.4366357052408043, 0.45439856841363885, 0.4720845505219581, 0.4897081943759776, 0.5072391070000235, 0.5247011051514834, 0.542067187709797, 0.5593576751669057, 0.5765465453632126, 0.5936507311857876, 0.6106452944663003, 0.6275435911624945, 0.6443221318186165, 0.6609900633731869, 0.67752574922899, 0.6939334022562877, 0.7101938106059631, 0.7263049537163667, 0.7422506131457406, 0.7580207366534812, 0.7736033721649875, 0.7889776974379873, 0.8041371279965555, 0.8190465276590387, 0.8337064887158392, 0.8480617965162781, 0.8621229412131242, 0.8758057344502199, 0.8891341984763013, 0.9019806505391214, 0.9143881632159129, 0.9261597966464793, 0.9373647624856912, 0.9476871303793314, 0.9572273019669029, 0.9654367940878237, 0.9724097482283165, 0.9767381835635638, 0.9669484658390122, 0.659083299684951, -0.659083180712816, -0.9669485121167052, -0.9767382069792288, -0.9724097635533602, -0.9654367970450167, -0.9572273263645859, -0.9476871280825523, -0.9373647681120841, -0.9261598056102645, -0.9143881718456056, -0.9019807055316369, -0.8891341634240081, -0.8758057205293912, -0.8621229450911845, -0.8480618138204272, -0.833706571569058, -0.8190466131476127, -0.8041372124868691, -0.7889777195422356, -0.7736033858767385, -0.758020740007683, -0.7422507481169578, -0.7263049162371344, -0.7101938950789042, -0.6939334061553678, -0.677525822052029, -0.6609901538934517, -0.6443222327338847, -0.6275436932970322, -0.6106454472814152, -0.5936507836778451, -0.5765466491708988, -0.5593578078967361, -0.5420672759411125, -0.5247011730988912, -0.5072391580614087, -0.4897082914472909, -0.47208460952428394, -0.4543985995006753, -0.4366355580500639, -0.41882350871539187, -0.40094955631843376, -0.38303594105786365, -0.36507302109186685, -0.3470786936847069, -0.3290476440540586, -0.31099441589505206, -0.2929180880304103, -0.27483158663081614, -0.2567388003912687, -0.2386513127155433, -0.22057831776499126, -0.20253089403524566, -0.18452269630486776, -0.1665634500729787, -0.14867027528284874, -0.13084990929476334, -0.1131191325854089, -0.09547794429803691, -0.07793928430794522, -0.06049114408297565, -0.0431364527809777, -0.025846763281087953, -0.00861212501518312] );\n",
" t = np.asarray(rnd.ones_like(x)) * 0.5\n",
" perm = np.random.permutation(128) \n",
" return (x[perm])[0:N], (t[perm])[0:N], (u[perm])[0:N]\n",
"\n", "\n",
"def boundary_t0(N):\n", "def _ALT_t0(N): # alternative, impose original initial state at t=0\n",
" x = rnd.random_uniform([N], -1, 1)\n", " x = rnd.random_uniform([N], -1, 1)\n",
" t = rnd.zeros_like(x)\n", " t = rnd.zeros_like(x)\n",
" u = - math.sin(np.pi * x)\n", " u = - math.sin(np.pi * x)\n",
" return x, t, u\n", " return x, t, u\n",
"\n", "\n",
"\n",
"def open_boundary(N):\n", "def open_boundary(N):\n",
" t = rnd.random_uniform([N], 0, 1)\n", " t = rnd.random_uniform([N], 0, 1)\n",
" x = math.concat([math.zeros([N//2]) + 1, math.zeros([N//2]) - 1], axis=0)\n", " x = math.concat([math.zeros([N//2]) + 1, math.zeros([N//2]) - 1], axis=0)\n",
" u = math.zeros([N])\n", " u = math.zeros([N])\n",
" return x, t, u\n", " return x, t, u\n",
"\n" "\n",
"# out = boundary_tx(20)\n",
"# print(len(out[0]))\n",
"# print(out[0][0:10])\n",
"# print(out[2][0:10])\n",
"# a=np.asarray([1,2,3])\n",
"# perm=np.random.permutation(3)\n",
"# c=(a[b])[0:2]\n",
"# print(c)"
] ]
}, },
{ {
@@ -94,14 +112,14 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 2, "execution_count": 3,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"WARNING:tensorflow:From <ipython-input-1-832bb7c21ee0>:17: dense (from tensorflow.python.layers.core) is deprecated and will be removed in a future version.\n", "WARNING:tensorflow:From <ipython-input-2-a9e33b53329c>:7: dense (from tensorflow.python.layers.core) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n", "Instructions for updating:\n",
"Use keras.layers.Dense instead.\n", "Use keras.layers.Dense instead.\n",
"WARNING:tensorflow:From /usr/local/lib/python3.7/site-packages/tensorflow_core/python/layers/core.py:187: Layer.apply (from tensorflow.python.keras.engine.base_layer) is deprecated and will be removed in a future version.\n", "WARNING:tensorflow:From /usr/local/lib/python3.7/site-packages/tensorflow_core/python/layers/core.py:187: Layer.apply (from tensorflow.python.keras.engine.base_layer) is deprecated and will be removed in a future version.\n",
@@ -135,10 +153,8 @@
] ]
}, },
{ {
"cell_type": "code", "cell_type": "markdown",
"execution_count": null,
"metadata": {}, "metadata": {},
"outputs": [],
"source": [ "source": [
"Helper to show" "Helper to show"
] ]
@@ -146,19 +162,29 @@
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 4, "execution_count": 4,
"metadata": {}, "metadata": {
"scrolled": true
},
"outputs": [ "outputs": [
{ {
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"(1, 128, 33, 1)\n", "Size of grid_u: (1, 128, 33, 1)\n",
"(128, 528)\n" "WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/session.py:17: 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/session.py:28: The name tf.global_variables_initializer is deprecated. Please use tf.compat.v1.global_variables_initializer instead.\n",
"\n",
"WARNING:tensorflow:From /Users/thuerey/Dropbox/mbaDevelSelected/phiflow-v1.5/phi/tf/session.py:29: The name tf.train.Saver is deprecated. Please use tf.compat.v1.train.Saver instead.\n",
"\n",
"Randomly initialized network state:\n"
] ]
}, },
{ {
"data": { "data": {
"image/png": "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 truncated "image/png": "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 truncated
"text/plain": [ "text/plain": [
"<Figure size 432x288 with 1 Axes>" "<Figure size 432x288 with 1 Axes>"
] ]
@@ -171,64 +197,59 @@
], ],
"source": [ "source": [
"# test image output\n", "# test image output\n",
"import matplotlib.pyplot\n", "import matplotlib.pyplot as plt\n",
"print(grid_u.shape)\n", "print(\"Size of grid_u: \"+format(grid_u.shape))\n",
"\n", "\n",
"session = Session(None)\n", "session = Session(None)\n",
"session.initialize_variables()\n", "session.initialize_variables()\n",
"\n", "\n",
"def show_state(a):\n", "def show_state(a, run_session=True):\n",
" global session\n", " global session\n",
" a = session.run(a)\n", " if run_session: a = session.run(a) # special for showing NN results, run through TF \n",
"\n", "\n",
" # we only have 33 time steps, blow up by a factor of 2^4 to make it easier to see\n", " # we only have 33 time steps, blow up by a factor of 2^4 to make it easier to see\n",
" # (could also be done with more evaluations of network)\n", " # (could also be done with more evaluations of network)\n",
" for i in range(4):\n", " for i in range(4):\n",
" a = np.concatenate( [a,a] , axis=3)\n", " a = np.concatenate( [a,a] , axis=3)\n",
" a = np.reshape( a, [a.shape[1],a.shape[2]*a.shape[3]] )\n", " a = np.reshape( a, [a.shape[1],a.shape[2]*a.shape[3]] )\n",
"\n", " #print(a.shape)\n",
" print(a.shape)\n", " plt.imshow(a, origin='lower', cmap='magma')\n",
" matplotlib.pyplot.imshow(a, origin='lower', cmap='magma')\n",
" \n", " \n",
"print(\"Randomly initialized network state:\")\n",
"show_state(grid_u)" "show_state(grid_u)"
] ]
}, },
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## The loss functions & training\n",
"\n",
"set up losses...\n",
"\n",
"Note: very slow, needs _lots_ of iterations, only 10k for testing by default (`iters`), increase to get better results."
]
},
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 49, "execution_count": 5,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Step 0, loss: 0.218346\n", "WARNING:tensorflow:From /usr/local/lib/python3.7/site-packages/tensorflow_core/python/ops/math_grad.py:1375: where (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n",
"Step 500, loss: 0.055519\n", "Instructions for updating:\n",
"Step 1000, loss: 0.047574\n", "Use tf.where in 2.0, which has the same broadcast rule as np.where\n"
"Step 1500, loss: 0.042237\n",
"Step 2000, loss: 0.039294\n",
"Step 2500, loss: 0.037725\n",
"Step 3000, loss: 0.035842\n",
"Step 3500, loss: 0.033851\n",
"Step 4000, loss: 0.032361\n",
"Step 4500, loss: 0.031215\n",
"Step 5000, loss: 0.030114\n",
"Step 5500, loss: 0.029610\n",
"Step 6000, loss: 0.028632\n",
"Step 6500, loss: 0.028075\n",
"Step 7000, loss: 0.027415\n",
"Step 7500, loss: 0.028114\n",
"Step 8000, loss: 0.026602\n",
"Step 8500, loss: 0.026124\n",
"Step 9000, loss: 0.026635\n",
"Step 9500, loss: 0.025445\n"
] ]
} }
], ],
"source": [ "source": [
"# Boundary loss\n", "# Boundary loss\n",
"num_sample_points_bnd = 100\n", "num_sample_points_bnd = 100\n",
"x_bc, t_bc, u_bc = [math.concat([v_t0, v_x], axis=0) for v_t0, v_x in zip(boundary_t0(num_sample_points_bnd), open_boundary(num_sample_points_bnd))]\n", "x_bc, t_bc, u_bc = [math.concat([v_t0, v_x], axis=0) for v_t0, v_x in zip(boundary_tx(num_sample_points_bnd), open_boundary(num_sample_points_bnd))]\n",
"x_bc, t_bc, u_bc = np.asarray(x_bc,dtype=np.float32), np.asarray(t_bc,dtype=np.float32) ,np.asarray(u_bc,dtype=np.float32)\n",
"#with app.model_scope():\n", "#with app.model_scope():\n",
"loss_u = math.l2_loss(network(x_bc, t_bc)[:, 0] - u_bc) # normalizes by first dimension, N_bc\n", "loss_u = math.l2_loss(network(x_bc, t_bc)[:, 0] - u_bc) # normalizes by first dimension, N_bc\n",
"\n", "\n",
@@ -239,34 +260,258 @@
"\n", "\n",
"# Combine\n", "# Combine\n",
"ph_factor = 1.\n", "ph_factor = 1.\n",
"loss = loss_u + ph_factor * loss_ph # allows us to control the influence of loss_ph \n", "loss = loss_u + ph_factor * loss_ph # allows us to control the relative influence of loss_ph \n",
"\n", "\n",
"# TODO, try ADAM?\n",
"optim = tf.train.GradientDescentOptimizer(learning_rate=0.05).minimize(loss)\n", "optim = tf.train.GradientDescentOptimizer(learning_rate=0.05).minimize(loss)\n",
"session.initialize_variables()\n", "#optim = tf.train.AdamOptimizer(learning_rate=0.001).minimize(loss) # not much benefit here\n"
"\n",
"for optim_step in range(10000):\n",
" _, loss_value = session.run([optim, loss])\n",
" if optim_step%500==0: \n",
" print('Step %d, loss: %f' % (optim_step,loss_value))\n",
" #show_state(grid_u)"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 50, "execution_count": 6,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"(128, 528)\n" "Step 0, loss: 0.111230\n",
"Step 50, loss: 0.059567\n",
"Step 100, loss: 0.050345\n",
"Step 150, loss: 0.040759\n",
"Step 200, loss: 0.033108\n",
"Step 250, loss: 0.027403\n",
"Step 300, loss: 0.021609\n",
"Step 350, loss: 0.017801\n",
"Step 400, loss: 0.013434\n",
"Step 450, loss: 0.031098\n",
"Step 500, loss: 0.019279\n",
"Step 550, loss: 0.015963\n",
"Step 600, loss: 0.014481\n",
"Step 650, loss: 0.013526\n",
"Step 700, loss: 0.012771\n",
"Step 750, loss: 0.012119\n",
"Step 800, loss: 0.011504\n",
"Step 850, loss: 0.010888\n",
"Step 900, loss: 0.010266\n",
"Step 950, loss: 0.009654\n",
"Step 1000, loss: 0.009068\n",
"Step 1050, loss: 0.008521\n",
"Step 1100, loss: 0.008014\n",
"Step 1150, loss: 0.007544\n",
"Step 1200, loss: 0.007104\n",
"Step 1250, loss: 0.006684\n",
"Step 1300, loss: 0.006282\n",
"Step 1350, loss: 0.005901\n",
"Step 1400, loss: 0.005545\n",
"Step 1450, loss: 0.005212\n",
"Step 1500, loss: 0.004900\n",
"Step 1550, loss: 0.004604\n",
"Step 1600, loss: 0.004324\n",
"Step 1650, loss: 0.004058\n",
"Step 1700, loss: 0.003808\n",
"Step 1750, loss: 0.003562\n",
"Step 1800, loss: 0.003326\n",
"Step 1850, loss: 0.003089\n",
"Step 1900, loss: 0.002863\n",
"Step 1950, loss: 0.002722\n",
"Step 2000, loss: 0.002980\n",
"Step 2050, loss: 0.002280\n",
"Step 2100, loss: 0.071292\n",
"Step 2150, loss: 0.022765\n",
"Step 2200, loss: 0.017804\n",
"Step 2250, loss: 0.013744\n",
"Step 2300, loss: 0.011416\n",
"Step 2350, loss: 0.010243\n",
"Step 2400, loss: 0.009419\n",
"Step 2450, loss: 0.008764\n",
"Step 2500, loss: 0.008265\n",
"Step 2550, loss: 0.007883\n",
"Step 2600, loss: 0.007578\n",
"Step 2650, loss: 0.007323\n",
"Step 2700, loss: 0.007102\n",
"Step 2750, loss: 0.006902\n",
"Step 2800, loss: 0.006712\n",
"Step 2850, loss: 0.006524\n",
"Step 2900, loss: 0.006349\n",
"Step 2950, loss: 0.006186\n",
"Step 3000, loss: 0.006033\n",
"Step 3050, loss: 0.005888\n",
"Step 3100, loss: 0.005747\n",
"Step 3150, loss: 0.005610\n",
"Step 3200, loss: 0.005475\n",
"Step 3250, loss: 0.005339\n",
"Step 3300, loss: 0.005198\n",
"Step 3350, loss: 0.005044\n",
"Step 3400, loss: 0.004859\n",
"Step 3450, loss: 0.004585\n",
"Step 3500, loss: 0.017968\n",
"Step 3550, loss: 0.004040\n",
"Step 3600, loss: 0.002951\n",
"Step 3650, loss: 0.002693\n",
"Step 3700, loss: 0.002550\n",
"Step 3750, loss: 0.002443\n",
"Step 3800, loss: 0.002351\n",
"Step 3850, loss: 0.002269\n",
"Step 3900, loss: 0.002193\n",
"Step 3950, loss: 0.002122\n",
"Step 4000, loss: 0.002056\n",
"Step 4050, loss: 0.001994\n",
"Step 4100, loss: 0.001934\n",
"Step 4150, loss: 0.001877\n",
"Step 4200, loss: 0.001822\n",
"Step 4250, loss: 0.001768\n",
"Step 4300, loss: 0.001716\n",
"Step 4350, loss: 0.001665\n",
"Step 4400, loss: 0.001615\n",
"Step 4450, loss: 0.001566\n",
"Step 4500, loss: 0.001517\n",
"Step 4550, loss: 0.001470\n",
"Step 4600, loss: 0.001476\n",
"Step 4650, loss: 0.001383\n",
"Step 4700, loss: 0.001337\n",
"Step 4750, loss: 0.001381\n",
"Step 4800, loss: 0.001255\n",
"Step 4850, loss: 0.001212\n",
"Step 4900, loss: 0.001305\n",
"Step 4950, loss: 0.001134\n",
"Step 5000, loss: 0.001114\n",
"Step 5050, loss: 0.001072\n",
"Step 5100, loss: 0.001658\n",
"Step 5150, loss: 0.063174\n",
"Step 5200, loss: 0.047222\n",
"Step 5250, loss: 0.043665\n",
"Step 5300, loss: 0.042181\n",
"Step 5350, loss: 0.041065\n",
"Step 5400, loss: 0.040186\n",
"Step 5450, loss: 0.039448\n",
"Step 5500, loss: 0.038687\n",
"Step 5550, loss: 0.037640\n",
"Step 5600, loss: 0.036418\n",
"Step 5650, loss: 0.035370\n",
"Step 5700, loss: 0.034606\n",
"Step 5750, loss: 0.034045\n",
"Step 5800, loss: 0.167828\n",
"Step 5850, loss: 0.099039\n",
"Step 5900, loss: 0.095293\n",
"Step 5950, loss: 0.090091\n",
"Step 6000, loss: 0.083824\n",
"Step 6050, loss: 0.072519\n",
"Step 6100, loss: 0.056544\n",
"Step 6150, loss: 0.051577\n",
"Step 6200, loss: 0.048992\n",
"Step 6250, loss: 0.046800\n",
"Step 6300, loss: 0.044814\n",
"Step 6350, loss: 0.042973\n",
"Step 6400, loss: 0.041381\n",
"Step 6450, loss: 0.040075\n",
"Step 6500, loss: 0.038997\n",
"Step 6550, loss: 0.038067\n",
"Step 6600, loss: 0.037238\n",
"Step 6650, loss: 0.036487\n",
"Step 6700, loss: 0.035804\n",
"Step 6750, loss: 0.035185\n",
"Step 6800, loss: 0.034636\n",
"Step 6850, loss: 0.034157\n",
"Step 6900, loss: 0.033735\n",
"Step 6950, loss: 0.033001\n",
"Step 7000, loss: 0.031376\n",
"Step 7050, loss: 0.029146\n",
"Step 7100, loss: 0.026367\n",
"Step 7150, loss: 0.023316\n",
"Step 7200, loss: 0.020324\n",
"Step 7250, loss: 0.017877\n",
"Step 7300, loss: 0.015863\n",
"Step 7350, loss: 0.014097\n",
"Step 7400, loss: 0.012570\n",
"Step 7450, loss: 0.012832\n",
"Step 7500, loss: 0.010255\n",
"Step 7550, loss: 0.009250\n",
"Step 7600, loss: 0.027104\n",
"Step 7650, loss: 0.008814\n",
"Step 7700, loss: 0.007840\n",
"Step 7750, loss: 0.007265\n",
"Step 7800, loss: 0.006804\n",
"Step 7850, loss: 0.006415\n",
"Step 7900, loss: 0.006079\n",
"Step 7950, loss: 0.005783\n",
"Step 8000, loss: 0.005516\n",
"Step 8050, loss: 0.005274\n",
"Step 8100, loss: 0.005057\n",
"Step 8150, loss: 0.004895\n",
"Step 8200, loss: 0.004679\n",
"Step 8250, loss: 0.004554\n",
"Step 8300, loss: 0.007953\n",
"Step 8350, loss: 0.026119\n",
"Step 8400, loss: 0.018625\n",
"Step 8450, loss: 0.012710\n",
"Step 8500, loss: 0.007646\n",
"Step 8550, loss: 0.003899\n",
"Step 8600, loss: 0.005047\n",
"Step 8650, loss: 0.002152\n",
"Step 8700, loss: 0.002009\n",
"Step 8750, loss: 0.001450\n",
"Step 8800, loss: 0.001367\n",
"Step 8850, loss: 0.001321\n",
"Step 8900, loss: 0.001109\n",
"Step 8950, loss: 0.001148\n",
"Step 9000, loss: 0.000987\n",
"Step 9050, loss: 0.000899\n",
"Step 9100, loss: 0.000856\n",
"Step 9150, loss: 0.000848\n",
"Step 9200, loss: 0.000861\n",
"Step 9250, loss: 0.000908\n",
"Step 9300, loss: 0.000710\n",
"Step 9350, loss: 0.000693\n",
"Step 9400, loss: 0.000713\n",
"Step 9450, loss: 0.000753\n",
"Step 9500, loss: 0.000672\n",
"Step 9550, loss: 0.000668\n",
"Step 9600, loss: 0.000709\n",
"Step 9650, loss: 0.000541\n",
"Step 9700, loss: 0.000864\n",
"Step 9750, loss: 0.000872\n",
"Step 9800, loss: 0.000668\n",
"Step 9850, loss: 0.001222\n",
"Step 9900, loss: 0.000966\n",
"Step 9950, loss: 0.000658\n",
"Step 10000, loss: 0.000867\n",
"Runtime 106.27s\n"
] ]
}, }
],
"source": [
"session.initialize_variables()\n",
"\n",
"import time\n",
"start = time.time()\n",
"\n",
"iters = 10000\n",
"for optim_step in range(iters+1):\n",
" _, loss_value = session.run([optim, loss])\n",
" if optim_step%500==0: \n",
" print('Step %d, loss: %f' % (optim_step,loss_value))\n",
" #show_state(grid_u)\n",
" \n",
"end = time.time()\n",
"print(\"Runtime {:.2f}s\".format(end-start))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Looks pretty good on first sight!"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{ {
"data": { "data": {
"image/png": "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 truncated "image/png": "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 truncated
"text/plain": [ "text/plain": [
"<Figure size 432x288 with 1 Axes>" "<Figure size 432x288 with 1 Axes>"
] ]
@@ -288,28 +533,32 @@
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {},
"source": [ "source": [
"---\n",
"\n",
"## Evaluation\n",
"\n",
"Let's compare solution at $t=0$\n", "Let's compare solution at $t=0$\n",
"Actually not that great... max only at 0.5, even with 10k iters (shock gets better though), almost at 0.75 after 100k w more points" "Actually not that great, blue curve from PINN quite far away from constraits (in gray)... Solution get's better with larger number of iterations, but requires a surprisingly large number of them for a fairly simple case. The shock in the middle is not well recovered (the maximum is still much too low).\n"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 62, "execution_count": 8,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"[<matplotlib.lines.Line2D at 0x140fded50>]" "<matplotlib.collections.PathCollection at 0x13ab749d0>"
] ]
}, },
"execution_count": 62, "execution_count": 8,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
}, },
{ {
"data": { "data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAD4CAYAAADhNOGaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO3deXiU1fXA8e8hBEyxhtUNQbDgQh0FmeKu1VgEY1gCKCKCqLVaq6XWtdYqtiq2taatS+VHVawKUgxCjNRqAJe61KQuo1IIglYUBUHjQoAQzu+P+w4OycwkYfaZ83meeTLzLjOXN+E9c+89915RVYwxxuSudqkugDHGmNSyQGCMMTnOAoExxuQ4CwTGGJPjLBAYY0yOa5/qAuyK7t27a58+fVJdDGOMySg1NTWfqmqPptszMhD06dOH6urqVBfDGGMyioi8H267NQ0ZY0yOs0BgjDE5zgKBMcbkOAsExhiT4ywQGGNMjrNAYIwxOS4ugUBE7hORdSLyVoT9IiJ/EpGVIvKmiBwRsm+yiNR6j8nxKI8xxpjWi9c4ggeAO4EHI+wfDvT3HkcC9wBHikhX4AbADyhQIyILVfWzOJXLtCAQCFBVVUVdXR2FhYX079+f2traHa+Liorw+XxRzwl3jDEmc0i81iMQkT7AE6p6aJh99wJLVXW293o58P3gQ1V/FO64SPx+v9qAstgFAgEqKipoaGiIeEx+fj4lJSU7bvSRzhERBg8eTHFxcULLbIzZdSJSo6r+ptuTNbK4J/BByOs13rZI25sRkQuBCwF69+6dmFJmscrKSmpqamhr4G9oaKCqqmpHIKiqqgobOFR1x2hvCwbGZJaM6SxW1Rmq6ldVf48ezabKMFFUVlZSXV3d5iAQVFdXF/Z5ODU1Nbv0GcaY1ElWjeBDoFfI6/28bR/imodCty9NUpmy3q7WApoqLCzc6Xm0YGBLnxqTeZIVCBYCPxGRObjO4jpVXSsiTwG3iEgX77ihwLVJKlPWak3bf2vl5+dTVFS043VRUVHU9xaRHWWwDmVjMkNcAoGIzMZ9s+8uImtwmUD5AKr6F+BJ4DRgJbAJmOLt2ygivwZe9d7qJlXdGI8y5apYgkBrsoaCzyN9xuDBg5uVoa6ujvLychYtWsTw4cMtIBiTZuKWNZRMljUUWVlZWYvt+E35/f5d6uANbXoKzRqKVoamWUjGmOSJlDVkgSALhDbDtEWiUj6nTZvW4jHWXGRM8qU6fdQkSFubgnb1239btNShDK65qKKiAsCCgTEpljHpoya8SHn9TYlIUoIAuA7l/Pz8Fo8LjlEwxqSW1QgyXEvfvFPRBBP8rEWLFlFfXx/12LY2Zxlj4s8CQYaL1AxTWFjI1KlTU1Aix+fz4fP5Wuy/CB2jYIxJDWsaynDhmmGa5v6nks/nY+rUqZSWlqZ1OY3JZVYjyHChcwCl8+CtTCmnMbnI0kdNWrCRyMYknqWPZrhsvlFGGon8v//9z2YyNSYJLBBkgHA3ymzKwY+UAmvTWhuTHNZZnOYCgQDz589vdqPMphz8aCmk1dXVBAKBJJbGmNxjgSCNBWsCkfpxsiUHv6UU0mwJeMakKwsEaaylUcPZkoPfUgppXV2d1QqMSSALBGks2jf+bMrB9/l8+P3NEhl2UlFRYcHAmASxQJDGIn3jF5Gsm8q5uLg4ajDIpj4RY9KNBYI0FmnU8OjRo7MqCAQVFxdTWloacX+29IkYk27iEghEZJiILBeRlSJyTZj9d4jI695jhYh8HrKvMWTfwniUJ1v4fD5KSkp21AwKCwuzribQlM/ni1gTypY+EWPSTcwji0UkD1gB/ABYg1t28ixVfSfC8ZcCg1T1PO/1V6q6e1s+00YWZ7dwayzk5eXRoUMH6uvrs25AnTHJEmlkcTxqBEOAlaq6SlW3AnOAkVGOPwuYHYfPNVmqaU2ooKAAVd0xpXVwQJ11HhsTH/EYWdwT+CDk9RrgyHAHisj+QF9gccjm3USkGtgGTFfVxyOceyFwIUDv3r3jUOz0EWnt31wWnMYa3DrMTdc1CHYeW63AmNgle4qJ8cA8VW0M2ba/qn4oIgcAi0UkoKrvNj1RVWcAM8A1DSWnuIlXWVlJaDOXqu7S1Aqq8OmnUFsL778PItCxI+y7Lxx2GBQUxL3oSROpk9g6j42Jj3gEgg+BXiGv9/O2hTMeuCR0g6p+6P1cJSJLgUFAs0CQrWpqaiJub00gePVV+PvfYf58WLky/DF5eS4YjB0LEyZAnz4xFDgFoi2+Y4yJXTz6CF4F+otIXxHpgLvZN8v+EZGDgS7ASyHbuohIR+95d+BYIGwnc7aK1FkfrRNfFZ5+Gk44AYYMgd/9zgWB3XeHI45wN/wzzoARI+C733XHv/YaXHcd9O0LxcXwyiuJ+hfFX7g02nbt2rF161amTZtGWVmZ9RcYE4OYawSquk1EfgI8BeQB96nq2yJyE1CtqsGgMB6Yozvf4Q4B7hWR7bigND1StlG2EpGwN30RCXv8qlVw0UUuEAB07gyTJ0NpKRx7rPv239SmTbBkCTz8MDz+ODz5pHucdhqUlUH//vH8F8Vf00VtCgoK2Lp1a7PO49BjjTGtZwvTpFjTPoIgv9+/U9OQKvzxj/CLX0B9PXTtClddBRdfDHvs0frP+/RTuP12+POf4euvoUMHuOYauPZa2G23ePyLEq+srCwt12k2Jt0lMn3UtFEgEKCsrIxp06ZRW1tL3759d9QARKRZEPjiCxgzBn72MxcEJkyAZcvg6qvbFgQAuneHW291NYtzz4WtW+Gmm1wTU6a0rljnsTHxZQvTJFm4RWY2bdoUcdqIFSugpMT9LCyEWbNgZLRRGq20555w//1w3nlw/vkuCHzve3DbbXDppdAujb8iWOexMfGVxv/ds09bF5mprnbt/itWgM/nXscjCIQ6/njXkfzDH8KWLTB1KgwfDmvXxvdz4inSHEzZMhurMclmgSBJgkGgtYvMLF4MJ53k2vRPPRVefBH69UtM2Tp1ghkzXApqt27wz3+6wLMwTWd+ysU5mIxJJGsaSpJoK43Bzs0aS5a4FM/Nm+Gss+CBB1ynbqKNGuX6CqZMccFg5Ej48Y/h979PvwFpoSOPjTGxsRpBkkRbaSy0WeOFF+D0010QuOACeOih5ASBoH33hUWLXGZRfj7cfbcLDm+9lbwyGGOSywJBErQ02CnYrPGf/7jc/k2bYNIkuPfe1HTatmsHl1/uBp0ddJALAn4/3HknbN+e/PIYYxLLAkGCBbOEIhERfD4f773ngsCXX7pRwffdl/rMnUGDoKbGZRVt2eKyiYqKIk9lYYzJTBYIEqylBegHDx7Mhg0wbBh88gmcfDI8+GD4EcKp0KkTzJzp5jPq0QOWLnXzFt1+OzQ2tni6MSYDWCBIsGiDnPx+P0OHFjN2LCxf7m6w5eVu1tB0M3YsvPMOTJzoBrVdcQUcc4z1HRiTDSwQJFAgEIg4Z1BhYSHFxcX8/OfuW/Y++7j5f9J5TFT37vC3v8ETT0DPnvDvf8PAgW7sweeft3y+MSY9WSBIkGDfQLiU0WCW0P33uzl/OnRwNYGePVNQ0F1QXAxvv+1SS4NzIPXv75qQrLnImMxjgSBBFi1aFLZvQEQoKSnh6699XHSR23b33XDUUUkuYIwKC+Guu1xn8vHHu4FvP/whHHmkG/xmjMkcFggSoLKystnSikGqSvfuPkpL3YRvl1zisnIy1cCB8OyzMHu2q9HU1LhpMSZMgA8+aPl8Y0zqWSCIs0AgEHZa6aBOnboyZoyby+eEE+COO5JYuAQRgfHjXYf3L3/pOrtnz3ZjEG66yY2LMMakr7gEAhEZJiLLRWSliFwTZv+5IrJeRF73HheE7JssIrXeY3I8ypNK4SaPC1VTM4GXXoJevVxKZpO50zJap07w61/Df/8L48a57KIbboCDD4ZHH3X9CcaY9BNzIBCRPOAuYDgwADhLRAaEOfRRVR3oPWZ653YFbgCOBIYAN4hIl1jLlErR0kVraw9nzpxu5OfDY4+5qaCzUZ8+MHeuy4YaONA1EY0f72pAEZZoNsakUDxqBEOAlaq6SlW3AnOA1k6WfCrwtKpuVNXPgKeBYXEoU9IFF5uJZOPGzixYUAK4Sdy+971klSx1TjzRTZ09Y4YbjPbCC+7fff758PHHqS6dMSYoHoGgJxDaLbjG29bUGBF5U0TmiUivNp6LiFwoItUiUr1+/fo4FDt+gqmikWoD27blsWjRZL76Ko/Ro91UDbkiL89lE9XWws9/Du3bu+kzDjzQpc5auqkxqZeszuIKoI+qHob71j+rrW+gqjNU1a+q/h49esS9gLGIlCoKbuDY6tUXUVvbmT594K9/dZ2ruaaw0NWE3nrLjUP48ku47DI3Ovn111NdOmNyWzwCwYdAr5DX+3nbdlDVDaq6xXs5Exjc2nPTXSAQiJgqCtCnz1Qefrg77dvDnDnQJaN7QGJ34IFuZPL8+d+MTvb74cor4euvU106Y3JTPALBq0B/EekrIh2A8cBOa1uJyD4hL0cAy7znTwFDRaSL10k81NuWMaJlCTU29mLKFPf8ttvcYCvjjBrl5i667DI3tfXvfw+HHuoW5THGJFfMgUBVtwE/wd3AlwFzVfVtEblJREZ4h10mIm+LyBvAZcC53rkbgV/jgsmrwE3etoxQWVkZpV+gHY8/Pp7PP3eLz//sZ0kuXAbYYw83PcUrr8Dhh8N777nZVy+91GoHxiSTRFs+MV35/X6NNmgrGSorK6MOHKuqGs7zzw+hVy/XBt61axILl4EaGuDWW904hG3b4IAD3BKdxx+f6pIZkz1EpEZV/U2328jiXVQTJSH+3XcP4fnnh5CX5/oFLAi0LD8ffvUrePVVNx33qlUu/fTyy92yncaYxLFAsIsi1aTq6vZg4cJSAG65xWXFmNYbONAFg+uvdyu03XGH61t5551Ul8yY7GWLine truncated "image/png": "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 truncated
"text/plain": [ "text/plain": [
"<Figure size 432x288 with 1 Axes>" "<Figure size 432x288 with 1 Axes>"
] ]
@@ -322,57 +571,266 @@
], ],
"source": [ "source": [
"u = session.run(grid_u)\n", "u = session.run(grid_u)\n",
"u0 = u[0,:,0,0]\n", "#[u,gx,gt] = session.run([grid_u,grid_x,grid_t]) # print(gt[0:5,17]) # check time...\n",
"# solution is imposed at t=1/2 , which is 16 in the array\n",
"bc_tx = 16 \n",
"uT = u[0,:,bc_tx,0]\n",
"\n", "\n",
"import matplotlib.pyplot as plt\n",
"fig = plt.figure().gca()\n", "fig = plt.figure().gca()\n",
"fig.scatter(x_bc[0:100], u_bc[0:100], color='gray')\n", "fig.plot(np.linspace(-1,1,len(uT)), uT, lw=2, color='blue')\n",
"fig.plot(np.linspace(-1,1,len(u0)), u0, lw=2, color='blue')\n", "fig.scatter(x_bc[0:100], u_bc[0:100], color='gray')\n"
"#fig.plot(ini[:,0], ini[:,1], lw=2, color='green')\n" ]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's check how well the initial state was reconstructed, compared ot the (known) ground truth solution."
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 59, "execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x13ac00110>]"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"n = 128\n",
"\n",
"# ground truth solution at t0\n",
"t0gt = np.asarray( [ [-math.sin(np.pi * x) * 1.] for x in np.linspace(-1,1,n)] )\n",
"\n",
"velP0 = u[0,:,0,0]\n",
"\n",
"fig = plt.figure().gca()\n",
"fig.plot(np.linspace(-1,1,len(velP0)), velP0, lw=2, color='blue')\n",
"fig.plot(np.linspace(-1,1,len(t0gt)), t0gt, lw=2, color='gray') # optionally show GT, compare to blue\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"That's not very close...\n",
"\n",
"But we have the forward simulator, so we can use the $t=0$ solution of the network to \n",
"evaluate how well the temporal evoluation was reconstructed by the PINN."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"[[-1.00000000e+00 1.22464680e-16]\n", "(1, 128, 1)\n"
" [-8.66666667e-01 4.06736643e-01]\n",
" [-7.33333333e-01 7.43144825e-01]\n",
" [-6.00000000e-01 9.51056516e-01]\n",
" [-4.66666667e-01 9.94521895e-01]\n",
" [-3.33333333e-01 8.66025404e-01]\n",
" [-2.00000000e-01 5.87785252e-01]\n",
" [-6.66666667e-02 2.07911691e-01]\n",
" [ 6.66666667e-02 -2.07911691e-01]\n",
" [ 2.00000000e-01 -5.87785252e-01]\n",
" [ 3.33333333e-01 -8.66025404e-01]\n",
" [ 4.66666667e-01 -9.94521895e-01]\n",
" [ 6.00000000e-01 -9.51056516e-01]\n",
" [ 7.33333333e-01 -7.43144825e-01]\n",
" [ 8.66666667e-01 -4.06736643e-01]\n",
" [ 1.00000000e+00 -1.22464680e-16]]\n"
] ]
},
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x13ac91710>]"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAD6CAYAAACs/ECRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nOydd3hU1daH352eUENHkOZFKYqUiNQE7PdeP7ELlosVexcFpWMBbNd2VazYQK8VvdghCR1CB5FeQ+9I6szs7491AkNIn5MyYb3Pk2dmn7PPPmtOZs7v7L32XstYa1EURVFOXkLK2wBFURSlfFEhUBRFOclRIVAURTnJUSFQFEU5yVEhUBRFOclRIVAURTnJcUUIjDHvG2N2GWOW57PfGGNeNcasNcYsNcZ09NvX3xizxvnr74Y9iqIoStExbqwjMMbEA38BH1lrz8xj/z+A+4F/AOcCr1hrzzXG1AJSgDjAAguATtba/QWdr06dOrZZs2YB260oinIysWDBgj3W2rq5t4e50bi1NtkY06yAKn0QkbDAHGNMTWNMQ6AX8Ku1dh+AMeZX4BJgYkHna9asGSkpKW6YriiKctJgjNmU1/ay8hE0Arb4lbc62/LbriiKopQRQeMsNsYMMMakGGNSdu/eXd7mKIqiVBrKSghSgVP9yo2dbfltPwFr7XhrbZy1Nq5u3ROGuBRFUZQSUlZCMBn4lzN7qAtw0Fq7HfgZuMgYE2uMiQUucrYpiqIoZYQrzmJjzETE8VvHGLMVGA6EA1hr3wKmIDOG1gJpwC3Ovn3GmNHAfKepUTmOY0VRFKVscGvWUL9C9lvg3nz2vQ+874YdiqIoSvEJGmexoiiKUjq40iNQlGDmwAGYMweWLIE//oD9+yEtDaKioEULOOMMuPxyaKQTm5VKigqBclKycyd88glMngwzZ4LXW3D9Bx6ASy6Bxx+HhISysVFRygoVAuWkwVpIToZXXoHvvwePR7aHhkL37tCxI5x1FtStC1WqwF9/wbp10luYPBmmTIEffxQxGD0awsPL9/MoiluoECiVHmvhp5/g6adh1izZFhoKl10GN9wAF10ENWsW3MaePSIgzz4LY8dCYqK0WdhxihIMqLNYqdQsWADnnw//+IeIQK1aMGIEbNkC330H115btJt5nTrSC0hOhiZNYO5cuPVWERlFCXZUCJRKycGDcM89EBcH06ZBbCyMGwebNsHw4dCwYcna7d5d2qtRA775Bl591V27FaU8UCFQKh3ffQdt28Kbb0JYGDz6qIz1DxwIVasG3n6LFvC+s/Jl4ECYP7/g+opS0VEhUCoNO3bANdfIVM/UVDj3XFi4EF54QXoEbnLllXDvvZCdrb0CJfhRIVAqBV9/DW3awJdfyoyfV16RaaFnnVV657zqKnndsKH0zqEoZYHOGlKCmrQ0ePhhGD9eyhdfDG+/DU2blv65c86xeXPpn0tRShMVAiVoWbIE+vWDlSshIkKGgO67D4wpm/M3aiTnSk2VNQlh+mtSghQdGlKCDmvhtdfEB7ByJbRqBfPmwf33l50IHAZeioTQJeC7FLZtK5vzKkppoEKgBBW7d8tCsAcegMxMGDBA1gqcfXbZnD8TeB5oBjwJeM4C7pdpqYoSrKgQKEHD77/LDf+HH2QR2H//K/6AmJjSP7cFvgRaA48D+4BzcnbGwSb1EyhBjAqBUuHJzoZBg+DCC2H7dujZU/wDV19dNudPARKAa4ANQFvgJ2AuUOUQUBMWHy4bWxSlNFAhUCo0q1dDt24S38cYCQ8xdaqEeShttgL9kSf/6UAd4E1gMXAxYIBme6XuEg1ApwQxOs9BqZBYC++8I1ND09Lkxv/pp9CjR+mf+wjiBxgHpAMRwIPAU0CNXHXbZcAKYJ0Gn1OCGFd6BMaYS4wxq4wxa40xg/LY/7IxZrHzt9oYc8Bvn9dv32Q37FGCm127oE8fuPNOEYEbbpChoNIWAR8wATgdGImIwFXAH4go5BYBgK4R8rqzDHooilJaBNwjMMaEAm8AFyK96fnGmMnW2j9y6lhrH/arfz/Qwa+JdGtt+0DtUCoHU6bALbeIGNSoIfGC+hWYEdsdEoFHgYVOOQ54EYgv5LgLa8lrWivwWAgro+mriuImbvQIOgNrrbXrrbVZwCSgTwH1+wETXTivUolIS5PYPf/8p4hAQgIsXVr6IrAGuALojYhAY+BjxBFcmAgAnFETzBagGixQh7ESpLghBI2ALX7lrc62EzDGNAWaA1P9NkcZY1KMMXOMMZe7YI8SZCxcCJ06wX/+I1m/xo6VqaKl6RDeBzwMtAG+BWKAUcAq4EaK/sMwBqr+Ke9/O1BwXUWpqJS1s7gv8KW11j9DbFNrbaoxpgUw1RizzFq7LveBxpgBwACAJmUxZUQpdbxeCQsxdKhMEW3dWhzCHToUfmxJyQb+g/gA9iMzf24FRgOnlLDNBqmy0niuxxUTFaXMcaNHkAqc6ldu7GzLi77kGhay1qY6r+uRodo8bwPW2vHW2jhrbVzdunUDtVkpZzZvlsxhgwaJCNx3H6SklJ4IWGAycCbwECICOcNB71FyEQBo6fQElkcHZKKilBtuCMF8oKUxprkxJgK52Z8w+8cY0wqIBWb7bYs1xkQ67+sA3ZFJGkol5rPPoF07SEqC+vXFQfzaa6W3QngRcD7iuFqNzAqaDPwOuDFLob1PXrfUAW/BVRWlQhKwEFhrPcB9wM/ASuALa+0KY8woY8xlflX7ApOsPS7La2sgxRizBJgGjPGfbaRULg4ckKmgN9wgqST79IFly+Dvfy+d821Dhn06IV+uWsCrwHLg/5BhITdoXQ9IB0+4xCJSlGDDFR+BtXYKMCXXtmG5yiPyOG4WUIqpQ5SKQlIS3HSTJI2PiYF//xtuv710ooWmAS8AY5334cD9wBCkSxpw+3vTWDNlDVtmbmHPn3uo2ScesltAtPggFCXY0JXFSqmSlQXDhknieGvhnHPEIdyypfvn8gGfAoM55qS6AhEEN053ePthZr0wiwVvLSA77dgt3xc5H/7VAlAhUIITFQKl1FizRtYBLFgAISEwZIjMEAovhbg8ycAjwAKn3BF4CQkWFygHNh5g5riZLHp/Ed5M8QI0P785dVrVYf4b88ncsf+oAqR70F+VEnToV1ZxHWthwgSZCXTkCDRrBp98At27u3+u9cBA4GunfArwHMVbC5Afe1fvZcZzM1j6yVJ8HvEIt76qNT2f7EnDjg1J35fO/Dfmc2DDfky2xWI4koX+qpSgQ7+yiqscPAh33QWTJkm5b1946y0JF+EmfwHPImEgspAFYU8gYSKqBNj2rhW7mP70dJZ/vhwsmBBDuxvb0WNwD+q2OTZ1OSo2isgakWQezCRmZxpHTq0iPQJFCTJUCBTXmD0brr8eNm6EKlXgjTfgX/9y1yFsgc+Q5DA52SFvQnoBeS5nLwY7l+0keVQyf3wpE9dCwkNof3N7uj/RnVqn1TqhvjGG2Bax7Fi0g1ob93MkToVACU5UCJSA8XrhueckV4DXK+EiPvsMTj/d3fMsBB4AZjrlOOA1oEuA7e5YvIPk0cms/HolAKERoXS8oyPdn+hOjVML7srkCEHspv1soTEZupBACUJUCJSA2LFDegHTpkl54EB4+mmIiHDvHLuQXADvIT2CesAYJGlMIH6AbQu2kTw6mVXfrQIgLCqMjgM60v3x7lRvVL1IbcS2kAmptTbtB9AegRKUqBAoJSYxUWYF7dghK4Q/+gguusi99rOR+OYjgIPIl/VBYCh55wYoKqnzU0kelczqH1YDEBYdRtxdcXQb2I1qDasVq60cIai5RYRAewRKMKJCoBQbnw/GjJGpoD6fhIyeOBEaNnTvHL8gMYFWOuVLgH8DZwTQ5ta5W0kamcTaH9cCEB4TTtzdcXR7rBtVG1QtUZs5QhC7RQIOqRAowYgKgVIs9u6VFcI//ijlJ5+EkSMhzKVv0gYkPPR3TvlvwMvAPyl5SIgts7aQNDKJdb9IUNvwKuGcc+85dHu0G1XqBTbH6GiPIFV7BErwokKgFJk5c+DaayVMRK1asjbArThBWchU0NFIisiqSEiIh4DIEra5afomkkYmseH3DQBEVI2g8/2d6fpIV2LquBPhrkbTGpgQQ/WdBwnN8pLhDXWlXUUpS1QIlEKxVqKDPvooeDzQpQt8/rl7iWOSgLs5NgzUD4kVVNLQ0JuSN5E4PJGNiRsBiKweSecHOtP14a5E13I3VnRoeCg1mtTgwMYD1Nx4gExb29X2FaUsUCFQCiQ9HQYMkKd/gIcekgxibswK2o2sCp7glFsiSWMuKGF7W+dsZdrQaaz/bT0AkTUi6fJQF8598FyiY0svWUBsi1gObDxA7Pr9ZDZVIVCCDxUCJV82b4YrrpBUkjEx8OGHcM01gbfrA95HFoXtByKAJ5GVwVElaG/7ou0kDks8OgsosnokXR7pQpcHuxBVsyQtFo+aLWrCVEQITi28vqJUNFQIlDxJTJSb/p490KIFfPstnOVCwPClwF0cy050ITJFtCTRQXet2EXi8ERWfiWDSuFVwjn3wXPp9mg314eACuLozKH1+8nsWWanVRTXUCFQjsNaePVV8Qd4vbIuYOJEcQ4Hwl9InuCXkSxeDZz311H82UB71+wlaUQSyyYuAysLweLuiaPHEz0CngVUEo4TAl+Zn15RAkaFQDlKejrceSd8/LGUn3gCnnkGQgOcCPMdkhhmC3LTvw94muIvCjuw8QBJo5NYMmEJ1msJCQ+h04BO9HyyJ9VOKd5CMDfxF4IsFQIlCFEhUADxB1x5peQOiImBDz6QqaKBsAkRgO+dckfgbSRGUHE4lHqI6c9MZ+G7C/Fl+zChhg63dyB+SDw1m9YMzEgX8BeC3T6Le0kwFaVscEUIjDGXAK8AocC71toxufbfDDzPscRRr1tr33X29UemjAM8ba2dgFKmJCbKTX/Line truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
} }
], ],
"source": [ "source": [
"#print(x_bc[0:100])\n", "# re-run with phiflow from solution at t=0\n",
"#print(u_bc[0:100])\n", "dt = 1./32.\n",
"steps = 32-bc_tx # depends on where BCs were imposed\n",
"initial = u[...,bc_tx:(bc_tx+1),0] # np.reshape(u0, [1,len(u0),1]) \n",
"print(initial.shape)\n",
"\n", "\n",
"# fig = plt.figure().gca()\n", "domain = Domain([n], boundaries=PERIODIC, box=box[-1:1])\n",
"# #fig.plot(range(len(u0)), u0, lw=0.5, color='blue')\n", "state = [BurgersVelocity(domain, velocity=initial, viscosity=0.01/np.pi)]\n",
"# fig.scatter(x_bc[0:100], u_bc[0:100], lw=0.1, color='green')\n", "physics = Burgers()\n",
"\n", "\n",
"# forward test w Burgers\n", "for i in range(steps):\n",
"#domain = Domain([64, 64], boundaries=PERIODIC, box=box[0:100, 0:100])\n", " state.append( physics.step(state[-1],dt=dt) )\n",
"#world.add(BurgersVelocity(domain, velocity=Noise(channels=domain.rank) * 2), physics=Burgers())\n",
"\n", "\n",
"ini = np.asarray( [[x, - math.sin(np.pi * x)] for x in np.linspace(-1,1,16)] )\n", "# we only need \"velocity.data\" from each phiflow state\n",
"print(ini)" "vels = [x.velocity.data for x in state]\n",
"\n",
"fig = plt.figure().gca()\n",
"pltx = np.linspace(-1,1,len(vels[0].flatten()))\n",
"fig.plot(pltx, vels[ 0].flatten(), lw=2, color='blue')\n",
"#fig.plot(pltx, vels[steps//4].flatten(), lw=2, color='green')\n",
"fig.plot(pltx, vels[steps//2].flatten(), lw=2, color='cyan')\n",
"fig.plot(pltx, vels[steps-1].flatten(), lw=2, color='purple')\n",
"#fig.plot(pltx, t0gt, lw=2, color='gray') # optionally show GT, compare to blue\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Versus the PINN output:\n"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(128,)\n"
]
},
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x13ad0b910>]"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"velP = [u[0,:,x,0] for x in range(33)]\n",
"print(velP[0].shape)\n",
"\n",
"fig = plt.figure().gca()\n",
"fig.plot(pltx, velP[bc_tx+ 0].flatten(), lw=2, color='blue')\n",
"#fig.plot(pltx, velP[bc_tx+steps//4].flatten(), lw=2, color='green')\n",
"fig.plot(pltx, velP[bc_tx+steps//2].flatten(), lw=2, color='cyan')\n",
"fig.plot(pltx, velP[bc_tx+steps-1].flatten(), lw=2, color='purple')\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And the error in the PINN reconstruction. Not surprisingly grows over time. \n",
"\n",
"The shock is not \"undone\" well towards $t=0$.\n",
"\n",
"(Old: BC at 0, the last state at $t=1$ in purple doesnt capture the sharp shock very well.)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x13ad82d10>]"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure().gca()\n",
"fig.plot(pltx, (vels[0 ].flatten()-velP[bc_tx ].flatten()), lw=2, color='blue')\n",
"#fig.plot(pltx, (vels[steps//4].flatten()-velP[bc_tx+steps//4].flatten()), lw=2, color='green')\n",
"fig.plot(pltx, (vels[steps//2].flatten()-velP[bc_tx+steps//2].flatten()), lw=2, color='cyan')\n",
"fig.plot(pltx, (vels[steps-1 ].flatten()-velP[bc_tx+steps-1 ].flatten()), lw=2, color='purple')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"All steps over time, with a color map... (note x axis does not show actual simulation time)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# show solution again as full image over time\n",
"sn = np.concatenate(vels, axis=-1)\n",
"sn = np.reshape(sn, list(sn.shape)+[1] ) # print(sn.shape)\n",
"\n",
"show_state(sn, run_session=False)"
] ]
} }
], ],
+1
View File
@@ -0,0 +1 @@
Some notebooks store intermediate data here...