diff --git a/tutorials/tutorial13/tutorial.ipynb b/tutorials/tutorial13/tutorial.ipynb index f087003..80faf68 100644 --- a/tutorials/tutorial13/tutorial.ipynb +++ b/tutorials/tutorial13/tutorial.ipynb @@ -19,7 +19,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -130,27 +130,14 @@ "text": [ "GPU available: False, used: False\n", "TPU available: False, using: 0 TPU cores\n", - "HPU available: False, using: 0 HPUs\n" + "HPU available: False, using: 0 HPUs\n", + "/var/data/python/lib/python3.12/site-packages/lightning/pytorch/trainer/configuration_validator.py: PossibleUserWarning: You defined a `validation_step` but have no `val_dataloader`. Skipping val loop.\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c76b6408476946419a07fadff41994b1", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Sanity Checking: | | 0/? [00:00" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#define the function to plot the solution obtained using matplotlib\n", + "def plot_solution(pinn_to_use, title):\n", + " pts = pinn_to_use.problem.spatial_domain.sample(256, 'grid', variables='x')\n", + " predicted_output = pinn_to_use.forward(pts).extract('u').as_subclass(torch.Tensor).cpu().detach()\n", + " true_output = pinn_to_use.problem.truth_solution(pts).cpu().detach()\n", + " pts = pts.cpu()\n", + " fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(8, 8))\n", + " ax.plot(pts.extract(['x']), predicted_output, label='Neural Network solution')\n", + " ax.plot(pts.extract(['x']), true_output, label='True solution')\n", + " plt.title(title)\n", + " plt.legend()\n", "\n", - "#PLOT" + "#plot the solution of the two PINNs\n", + "plot_solution(pinn, 'PINN solution')\n", + "plot_solution(sapinn, 'Self Adaptive PINN solution')" ] }, { @@ -28244,15 +260,15 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Relative l2 error PINN 134.56%\n", - "Relative l2 error SAPINN 134.56%\n" + "Relative l2 error PINN 95.80%\n", + "Relative l2 error SAPINN 95.80%\n" ] } ], @@ -28299,31 +315,9 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "MultiscaleFourierNet(\n", - " (embedding1): FourierFeatureEmbedding()\n", - " (embedding2): FourierFeatureEmbedding()\n", - " (layers): FeedForward(\n", - " (model): Sequential(\n", - " (0): Linear(in_features=100, out_features=100, bias=True)\n", - " (1): Tanh()\n", - " (2): Linear(in_features=100, out_features=100, bias=True)\n", - " )\n", - " )\n", - " (final_layer): Linear(in_features=200, out_features=1, bias=True)\n", - ")" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "class MultiscaleFourierNet(torch.nn.Module):\n", " def __init__(self):\n", @@ -28340,9 +334,7 @@ " def forward(self, x):\n", " e1 = self.layers(self.embedding1(x))\n", " e2 = self.layers(self.embedding2(x))\n", - " return self.final_layer(torch.cat([e1, e2], dim=-1))\n", - "\n", - "MultiscaleFourierNet()" + " return self.final_layer(torch.cat([e1, e2], dim=-1))" ] }, { @@ -28354,7 +346,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -28363,27 +355,14 @@ "text": [ "GPU available: False, used: False\n", "TPU available: False, using: 0 TPU cores\n", - "HPU available: False, using: 0 HPUs\n" + "HPU available: False, using: 0 HPUs\n", + "/var/data/python/lib/python3.12/site-packages/lightning/pytorch/trainer/configuration_validator.py: PossibleUserWarning: You defined a `validation_step` but have no `val_dataloader`. Skipping val loop.\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "19f5ac24dbad4f2e9ae40fa1ed31bb73", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Sanity Checking: | | 0/? [00:00" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "# plot the solution\n", - "#pl.plot(multiscale_pinn, title='Solution PINN with MultiscaleFourierNet')\n", + "#plot solution obtained\n", + "plot_solution(multiscale_pinn, 'Multiscale PINN solution')\n", "\n", "# sample new test points\n", "pts = pts = problem.spatial_domain.sample(100, 'grid')\n", - "print(f'Relative l2 error PINN with MultiscaleFourierNet {l2_loss(multiscale_pinn(pts), problem.truth_solution(pts)).item():.2%}')" + "print(f'Relative l2 error PINN with MultiscaleFourierNet: {l2_loss(multiscale_pinn(pts), problem.truth_solution(pts)).item():.2%}')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "It is pretty clear that the network has learned the correct solution, with also a very law error. Obviously a longer training and a more expressive neural network could improve the results!\n", + "It is pretty clear that the network has learned the correct solution, with also a very low error. Obviously a longer training and a more expressive neural network could improve the results!\n", "\n", "## What's next?\n", "\n",