Files
PINA/tutorials/tutorial21/tutorial.ipynb
Dario Coscia 7bf7d34d0f Dev Update (#582)
* Fix adaptive refinement (#571)


---------

Co-authored-by: Dario Coscia <93731561+dario-coscia@users.noreply.github.com>

* Remove collector

* Fixes

* Fixes

* rm unnecessary comment

* fix advection (#581)

* Fix tutorial .html link (#580)

* fix problem data collection for v0.1 (#584)

* Message Passing Module (#516)

* add deep tensor network block

* add interaction network block

* add radial field network block

* add schnet block

* add equivariant network block

* fix + tests + doc files

* fix egnn + equivariance/invariance tests

Co-authored-by: Dario Coscia <dariocos99@gmail.com>

---------

Co-authored-by: giovanni <giovanni.canali98@yahoo.it>
Co-authored-by: AleDinve <giuseppealessio.d@student.unisi.it>

* add type checker (#527)

---------

Co-authored-by: Filippo Olivo <filippo@filippoolivo.com>
Co-authored-by: Giovanni Canali <115086358+GiovanniCanali@users.noreply.github.com>
Co-authored-by: giovanni <giovanni.canali98@yahoo.it>
Co-authored-by: AleDinve <giuseppealessio.d@student.unisi.it>
2025-06-13 17:34:37 +02:00

460 lines
134 KiB
Plaintext
Vendored

{
"cells": [
{
"attachments": {},
"cell_type": "markdown",
"id": "6f71ca5c",
"metadata": {},
"source": [
"# Tutorial: Introductory Tutorial: Supervised Learning with PINA\n",
"\n",
"[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/mathLab/PINA/blob/master/tutorials/tutorial21/tutorial.ipynb)\n",
"\n",
"\n",
"> ##### ⚠️ ***Before starting:***\n",
"> We assume you are already familiar with the concepts covered in the [Getting started with PINA](https://mathlab.github.io/PINA/_tutorial.html#getting-started-with-pina) tutorials. If not, we strongly recommend reviewing them before exploring this advanced topic.\n",
"\n",
"In this tutorial, we will demonstrate a typical use case of **PINA** for Neural Operator learning. We will cover the basics of training a Neural Operator with PINA, if you want to go further into the topic look at our dedicated [tutorials](https://mathlab.github.io/PINA/_tutorial.html#neural-operator-learning) on the topic.\n",
"\n",
"Let's start by importing the useful modules:"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "0981f1e9",
"metadata": {},
"outputs": [],
"source": [
"## routine needed to run the notebook on Google Colab\n",
"try:\n",
" import google.colab\n",
"\n",
" IN_COLAB = True\n",
"except:\n",
" IN_COLAB = False\n",
"if IN_COLAB:\n",
" !pip install \"pina-mathlab[tutorial]\"\n",
"\n",
"import torch\n",
"import matplotlib.pyplot as plt\n",
"import warnings\n",
"\n",
"warnings.filterwarnings(\"ignore\")\n",
"\n",
"from pina import Trainer\n",
"from pina.solver import SupervisedSolver\n",
"from pina.model import KernelNeuralOperator\n",
"from pina.model.block import FourierBlock1D\n",
"from pina.problem.zoo import SupervisedProblem"
]
},
{
"cell_type": "markdown",
"id": "f0c937e6",
"metadata": {},
"source": [
"## Learning Differential Operators via Neural Operator\n",
"\n",
"In this tutorial, we explore how **Neural Operators** can be used to learn and approximate **differential operators**, which are fundamental in modeling physical and engineering systems governed by differential equations.\n",
"\n",
"### What Are Neural Operators?\n",
"\n",
"**Neural Operators (NOs)** are a class of machine learning models designed to learn mappings *between function spaces*, unlike traditional neural networks which learn mappings between finite-dimensional vectors. In the context of differential equations, this means a Neural Operator can learn the **solution operator**:\n",
"$$\n",
"\\mathcal{G}(a) = u,\n",
"$$\n",
"where $a$ is an input function (e.g., a PDE coefficient) and $u$ is the solution function.\n",
"\n",
"### Why Are Neural Operators Useful?\n",
"\n",
"- **Mesh-free learning**: Neural Operators work directly with functions, allowing them to generalize across different spatial resolutions or grids.\n",
"- **Fast inference**: Once trained, they can predict the solution of a PDE for new input data almost instantaneously.\n",
"- **Physics-aware extensions**: Some variants can incorporate physical laws and constraints into the training process, improving accuracy and generalization.\n",
"\n",
"## Learning the 1D Advection Equation with a Neural Operator\n",
"\n",
"To make things concrete, we'll a Neural Operator to learn the 1D advection equation. We generate synthetic data based on the analytical solution:\n",
"\n",
"$$\n",
"\\frac{\\partial u}{\\partial t} + c \\frac{\\partial u}{\\partial x} = 0\n",
"$$\n",
"\n",
"For a given initial condition $u(x, 0)$, the exact solution at time $t$ is:\n",
"\n",
"$$\n",
"u(x, t) = u(x - ct)\n",
"$$\n",
"\n",
"We use this property to generate training data without solving the PDE numerically.\n",
"\n",
"### Problem Setup\n",
"\n",
"1. **Define the spatial domain**: We work on a 1D grid $x \\in [0, 1]$ with periodic boundary conditions.\n",
"\n",
"2. **Generate initial conditions**: Each initial condition $u(x, 0)$ is created as a sum of sine waves with random amplitudes and phases:\n",
" $$\n",
" u(x, 0) = \\sum_{k=1}^K A_k \\sin(2\\pi k x + \\phi_k)\n",
" $$\n",
" where $A_k \\in [0, 0.5]$ and $\\phi_k \\in [0, 2\\pi]$ are sampled randomly for each sample.\n",
"\n",
"3. **Compute the solution at time $t$**: \n",
" Using the analytical solution, we shift each initial condition by $t=0.5$ ($c=1$), applying periodic wrap-around:\n",
" $$\n",
" u(x, t=0.5) = u(x - 0.5)\n",
" $$\n",
"\n",
"4. **Create input-output pairs**: The input to the model is the function $u(x, 0)$, and the target output is $u(x, 0.5)$. These pairs can be used to train a Neural Operator to learn the underlying differential operator."
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "d331c971",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def generate_data(n_samples, x, c=1, t=0.5):\n",
" x = x.T.repeat(n_samples, 1)\n",
" u0 = torch.zeros_like(x)\n",
" ut = torch.zeros_like(x)\n",
" for k in range(1, 4):\n",
" amplitude = torch.rand(n_samples, 1) * 0.5\n",
" phase = torch.rand(n_samples, 1) * 2 * torch.pi\n",
" u0 += amplitude * torch.sin(2 * torch.pi * k * x + phase)\n",
" shifted_x = (x - c * t) % 1.0 # periodic shift\n",
" ut += amplitude * torch.sin(2 * torch.pi * k * shifted_x + phase)\n",
" return u0, ut\n",
"\n",
"\n",
"# define discretization train\n",
"x_train = torch.linspace(0, 1, 100).reshape(-1, 1)\n",
"\n",
"# define input and target\n",
"input, target = generate_data(10000, x_train)\n",
"\n",
"# visualize the data\n",
"plt.plot(x_train, input[0], label=f\"Input u(x, t=0)\")\n",
"plt.plot(x_train, target[0], label=f\"Target u(x, t=0.5)\")\n",
"plt.title(\"Generated 1D Advection Data\")\n",
"plt.xlabel(\"x\")\n",
"plt.legend()\n",
"plt.grid(True)"
]
},
{
"cell_type": "markdown",
"id": "1dda7888",
"metadata": {},
"source": [
"## Solving the Neural Operator Problem\n",
"\n",
"At their core, **Neural Operators** transform an input function $a$ into an output function $u$. The general structure of a Neural Operator consists of three key components:\n",
"\n",
"<p align=\"center\">\n",
" <img src=\"http://raw.githubusercontent.com/mathLab/PINA/master/tutorials/static/neural_operator.png\" alt=\"Neural Operators\" width=\"800\"/>\n",
"</p>\n",
"\n",
"1. **Encoder**: The encoder maps the input into a specific embedding space.\n",
"\n",
"2. **Processor**: The processor consists of multiple layers performing **function convolutions**, which is the core computational unit in a Neural Operator. \n",
"3. **Decoder**: The decoder maps the processor's output back into the desired output space.\n",
"\n",
"By varying the design and implementation of these three components — encoder, processor, and decoder — different Neural Operators are created, each tailored for specific applications or types of data.\n",
"\n",
"### Types of Neural Operators\n",
"\n",
"Different variants of Neural Operators are designed to solve specific tasks. Some prominent examples include:\n",
"\n",
"- **Fourier Neural Operator (FNO)**: \n",
" The **Fourier Neural Operator** utilizes the **Fourier transform** in the processor to perform global convolutions. This enables the operator to capture long-range dependencies efficiently. FNOs are particularly useful for problems with periodic data or problems where global patterns and interactions are important. \n",
" ➤ [Learn more about FNO](https://mathlab.github.io/PINA/_rst/model/fourier_neural_operator.html).\n",
"\n",
"- **Graph Neural Operator (GNO)**: \n",
" The **Graph Neural Operator** leverages **Graph Neural Networks (GNNs)** to exchange information between nodes, enabling the operator to perform convolutions on unstructured domains, such as graphs or meshes. GNOs are especially useful for problems that naturally involve irregular data, such as graph-based datasets or data on non-Euclidean spaces. \n",
" ➤ [Learn more about GNO](https://mathlab.github.io/PINA/_rst/model/graph_neural_operator.html).\n",
"\n",
"- **Deep Operator Network (DeepONet)**: \n",
" **DeepONet** is a variant of Neural Operators designed to solve operator equations by learning mappings between input and output functions. Unlike other Neural Operators, **DeepONet** does not use the typical encoder-processor-decoder structure. Instead, it uses two distinct neural networks:\n",
" \n",
" 1. **Branch Network**: Takes the **function inputs** (e.g., $u(x)$) and learns a feature map of the input function.\n",
" 2. **Trunk Network**: Takes the **spatial locations** (e.g., $x$) and maps them to the output space.\n",
" \n",
" The output of **DeepONet** is the combination of these two networks' outputs, which together provide the mapping from the input function to the output function. \n",
" ➤ [Learn more about DeepONet](https://mathlab.github.io/PINA/_rst/model/deeponet.html).\n",
"\n",
"In this tutorial we will focus on Neural Operator which follow the Encoder - Processor - Decoder structure, which we call *Kernel* Neural Operator. Implementing kernel neural Operators in PINA is very simple, you just need to use the `KernelNeuralOperator` API.\n",
"\n",
"### KernelNeuralOperator API\n",
"The `KernelNeuralOperator` API requires three parameters: \n",
"\n",
"1. `lifting_operator`: a `torch.nn.Module` apping the input to its hidden dimension (Encoder).\n",
"\n",
"2. `integral_kernels`: a `torch.nn.Module` representing the integral kernels mapping each hidden representation to the next one.\n",
"\n",
"3. `projection_operator`: a `torch.nn.Module` representing the hidden representation to the output function.\n",
"\n",
"To construct the kernel, you can use the Neural Operator Blocks available in PINA (see [here](https://mathlab.github.io/PINA/_rst/_code.html#blocks)) or implement you own one! Let's build a simple FNO using the `FourierBlock1D`. In particular we will:\n",
"\n",
"1. Define the encoder, a simple linear layer mapping the input dimension to the hidden dimension\n",
"2. Define the decoder, two linear layers mapping the hidden dimension to 128 and back to the input dimension\n",
"3. Define the processor, a two layer Fourier block with a specific hidden dimension.\n",
"4. Combine the encoder-processor-decoder using the `KernelNeuralOperator` API to create the `model`.\n"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "ee9b1b1a",
"metadata": {},
"outputs": [],
"source": [
"# 1. Define the encoder (simple linear layer 1->64)\n",
"class Encoder(torch.nn.Module):\n",
" def __init__(self, hidden_dim=64):\n",
" super().__init__()\n",
" self.enc = torch.nn.Linear(1, hidden_dim)\n",
"\n",
" def forward(self, x):\n",
" # [B, Nx] -> [B, Nx, 1]\n",
" x = x.unsqueeze(-1)\n",
" # [B, Nx, 1] -> [B, Nx, 64]\n",
" x = self.enc(x)\n",
" # [B, Nx, 1] -> [B, 64, Nx]\n",
" return x.permute(0, 2, 1)\n",
"\n",
"\n",
"# 2. Define the decoder (two linear layer 64->128->1)\n",
"class Decoder(torch.nn.Module):\n",
" def __init__(self, hidden_dim=64):\n",
" super().__init__()\n",
" self.dec = torch.nn.Sequential(\n",
" torch.nn.Linear(hidden_dim, 128),\n",
" torch.nn.ReLU(),\n",
" torch.nn.Linear(128, 1),\n",
" )\n",
"\n",
" def forward(self, x):\n",
" # [B, 64, Nx] -> [B, Nx, 64]\n",
" x = x.permute(0, 2, 1)\n",
" # [B, Nx, 64] -> [B, Nx, 1]\n",
" x = self.dec(x)\n",
" # [B, Nx, 1] -> [B, Nx]\n",
" return x.squeeze(-1)\n",
"\n",
"\n",
"# 3. Define the processor (two FNO blocks of size 64)\n",
"class Processor(torch.nn.Module):\n",
" def __init__(self, hidden_dim=64):\n",
" super().__init__()\n",
" self.proc = torch.nn.Sequential(\n",
" FourierBlock1D(64, 64, 8, torch.nn.ReLU),\n",
" FourierBlock1D(64, 64, 8, torch.nn.ReLU),\n",
" )\n",
"\n",
" def forward(self, x):\n",
" return self.proc(x)\n",
"\n",
"\n",
"# 4. Define the model with KernelNeuralOperator\n",
"model = KernelNeuralOperator(\n",
" lifting_operator=Encoder(),\n",
" integral_kernels=Processor(),\n",
" projection_operator=Decoder(),\n",
")"
]
},
{
"cell_type": "markdown",
"id": "4aa44dd1",
"metadata": {},
"source": [
"Done! Let's now solve the Neural Operator problem. The problem we will define is a basic `SupervisedProblem`, and we will use the `SupervisedSolver` to train the Neural Operator.\n",
"\n",
"> **👉 We have a dedicated [tutorial](https://mathlab.github.io/PINA/tutorial16/tutorial.html) to teach how to build a Problem from scratch — have a look if you're interested!**\n",
"\n",
"> **👉 We have a dedicated [tutorial](http://mathlab.github.io/PINA/_rst/tutorials/tutorial18/tutorial.html) for an overview of Solvers in PINA — have a look if you're interested!**"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "304094a0",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"GPU available: True (mps), used: False\n",
"TPU available: False, using: 0 TPU cores\n",
"HPU available: False, using: 0 HPUs\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "2fceec83f20c49d48c5b22540d5a5f1b",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Training: | | 0/? [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"`Trainer.fit` stopped: `max_epochs=3` reached.\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "2b4965b96f9b4fcd9c22d8a002d0fc24",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Testing: | | 0/? [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
" Test metric DataLoader 0\n",
"────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
" test_loss_epoch 0.0004166161816101521\n",
"────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n"
]
}
],
"source": [
"# making the problem\n",
"problem = SupervisedProblem(input, target)\n",
"\n",
"# making the solver\n",
"solver = SupervisedSolver(problem, model, use_lt=False)\n",
"\n",
"# simple training\n",
"trainer = Trainer(\n",
" solver,\n",
" max_epochs=3,\n",
" train_size=0.8,\n",
" test_size=0.2,\n",
" batch_size=256,\n",
" accelerator=\"cpu\",\n",
" enable_model_summary=False,\n",
")\n",
"trainer.train()\n",
"_ = trainer.test()"
]
},
{
"cell_type": "markdown",
"id": "8c2d2fcf",
"metadata": {},
"source": [
"## Visualizing the Predictions\n",
"\n",
"As we can see, we have achieved a very low MSE, even after training for only one epoch. Now, we will visualize the results in the same way as we did previously:"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "1a725f92",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAi8AAAHHCAYAAAB3K7g2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAADDmUlEQVR4nOydBXgU19rH/ytxD3EhwYJDcKelaCmUClCn3l7q7b3tbW/db2/lq7srlBqUAoUixd2CJUiIK3HPyve858yEJCQhsjIzOb/n2cxkd3b27NndmXde+b86q9VqhUAgEAgEAoFK0Dt7AAKBQCAQCARtQRgvAoFAIBAIVIUwXgQCgUAgEKgKYbwIBAKBQCBQFcJ4EQgEAoFAoCqE8SIQCAQCgUBVCONFIBAIBAKBqhDGi0AgEAgEAlUhjBeBQCAQCASqQhgvAoGgAbGxsbjpppugRTZs2ACdTseWSkXL8y8Q2AphvAg0Q3JyMu655x7ExcXB09OT3fr164e7774bBw8ehJZYsWIFnnnmGaeOYfHixbj++uvRq1cvZhBceOGFTW735Zdfssflm7u7OyIiIjB9+nS8/fbbKC0tbdf7p33RfiwWC9TG1q1b2edXVFQEpWCPz0nJ71egboTxItAEy5cvx4ABA/DNN99gypQp+L//+z+89dZbuPjii9mJLj4+HikpKdAK9J6effZZp47hgw8+wNKlSxEdHY2AgIDzbv/cc8+xz4eed++997L7HnjgAQwcOLDNxuV3333HPBRZWVlYt24d1AadzOnza+pknpiYiE8++QTOwpafU2ver0DQHoztepZAoCBOnjyJq6++GjExMVi7di3Cw8MbPP7KK6/g/fffh16vXFu9vLwcXl5eUBN0gouMjGTzSobj+SBDcvjw4XX/P/bYY8zwmDVrFi699FIcPXoUHh4erZorMppefvllfPHFF8yQIYNVK7i5uTn19W31OQkE9kS5R3OBoJX873//Yyc0OpE1NlwIo9GI++67j3kI6nPs2DHMnTsXgYGBzEVOB+xly5Y16UrfsmULHnroIQQHBzMj4/LLL0deXt45r7Vy5UpMmDCBbePj44NLLrkEhw8fbrAN5TN4e3szo2vmzJlsu+uuu449tmnTJsybNw9du3ZlJzEa84MPPojKysoGz3/vvffYen03vwyFUd58803079+fva/Q0FDceeedKCwsbDAOaij/wgsvICoqioXYJk2adM5YW4LG1lGD8KKLLsKTTz7JvGLffvttq57z66+/svmgeSKj9ZdffkFVVdU526Wnp+Oyyy5jn0VISAibx+rq6gbbUJiRPouKiopznn/NNdcgLCwMZrO5TZ+v/N2aP38++77Qib537954/PHH2WMUPnn44YfZerdu3eo+v9OnTzeb83Lq1Cn2fum7Sp/V6NGj8ccffzSZz/Pjjz/ixRdfZJ8rff6TJ0/GiRMnYI/PiTwxNNbu3buz16L5uuWWW3DmzJm6bc73ful3S/unz4i+8xTqJa+PQNAiVoFA5URERFh79uzZpuccOnTI6ufnZ+3Xr5/1lVdesb777rvWiRMnWnU6nfWXX36p2+6LL76w0s9kyJAh1osuusj6zjvvWP/5z39aDQaDdf78+Q32+fXXX7Pnz5gxg21H+42NjbX6+/tbk5OT67a78cYbrW5ubtYePXqw9Q8//JA9l7j33nutM2fOtL700kvWjz76yHrrrbey15o7d27d87du3WqdOnUqG9c333xTd5O57bbbrEaj0Xr77bezff/73/+2enl5WUeMGGGtqamp2+6JJ55g+6DXo/d/yy23sLkMCgpi42oL/fv3t15wwQVNPibP4a5du5p8PC0tjT1e/z22BM3v5MmT2XpKSgqb8x9//LHBNhUVFda4uDiru7u79ZFHHrG++eab1mHDhlkHDRrEXmv9+vVsu40bN7L/Gz+/vLyczdndd9/d5s/3wIEDVl9fX2uXLl2sjz32GPscaQwDBw6se/yaa65hr/t///d/dZ9fWVkZezwmJqbB/GdnZ1tDQ0OtPj4+1scff9z6xhtvWAcPHmzV6/UNvqv0nuTvKr1X2vczzzxj9fT0tI4cOfK889qez+m1116zTpgwwfrcc89ZP/74Y+v9999v9fDwYK9nsVha9X7pe3nTTTexx2hep02bxral76RA0BzCeBGomuLiYnagu+yyy855rLCw0JqXl1d3oxOaDJ386GRSVVVVdx8dbMeOHWvt1avXOQf0KVOm1B2MiQcffJAZFUVFRez/0tJSdhIjg6E+dOIhI6n+/XRion0++uij54y5/hhlXn75ZXbSpBO1DJ1Um7r22LRpE7v/u+++a3D/qlWrGtyfm5trdXV1tV5yySUN3td//vMftp0jjReC5ohOuucjJyeHGWaf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5vHHHw9424OJlStXmmeeecYsWrSImchm8eLFRa5/4MABExMTY5544gk7Dr722mt2XFy1apVf2ynx4kK7du3M0KFD819nZ2ebunXrmhdffLHA9fv06WNuueUWt2Xt27c3DzzwgN/bGkr97ElWVpapVq2aeeedd/zYytDsZ/bttddea95++20zYMAAiRc/9PPkyZNNw4YNTUZGRgBbGXr9zHWvv/56t2UcYDt06OD3tlYU4IV4GT58uGnZsqXbsr59+5pu3br5tW1yG+WRkZGBbdu2WZeEa50kvt66dWuB23C56/qkW7duha4vStfPnrAUO0uy16xZ048tDc1+/utf/4rExETcf//9AWpp6PXz0qVLcc0111i3Ua1atdCqVSuMHj0a2dnZAWx5xe/na6+91m7juJYOHDhgXXPdu3cPWLtDga3lNA5WuMKMpeXnn3+2Fw9eTFzh66+//rrAbY4ePVrg+lwufNfPnowYMcL6Yz1/MKJs/bxlyxZMnToVO3bsCFArQ7OfOYiuW7cO/fv3t4Ppvn37MGTIECvIOWup8E0/9+vXz27XsWNHW604KysLDz74IJ5++ukAtTo0OFrIOMjK0+np6TbeyB/I8iKCijFjxthg0sWLF9ugPeEbWIb+7rvvtsHRCQkJ5d2cCk1OTo61bk2ZMgVXX301+vbti2eeeQZvvPFGeTetQsEgUlq0Jk2ahO3bt2PRokVYsWIF/va3v5V304QPkOUlD16ww8PDcezYMbflfF27du0Ct+HykqwvStfPDuPHj7fiZe3atWjTpo2fWxpa/bx//358++23NsvAdZAlERER2LNnDxo1ahSAllf87zMzjCIjI+12Ds2bN7d3sHSPREVF+b3dodDPzz77rBXkAwcOtK+ZDZqWlobBgwdbsUi3kyg7hY2DcXFxfrO6EH16efCCwbugDz/80O3izdf0TxcEl7uuT9asWVPo+qJ0/UzGjh1r75hWrVqFtm3bBqi1odPPTPffuXOndRk5jx49eqBLly72OdNMhW++zx06dLCuIkcckm+++caKGgkX3/UzY+M8BYojGFXSz3eU2zjo13DgIEzFY2rdjBkzbMrX4MGDbSre0aNH7ft33323efLJJ91SpSMiIsz48eNtCu/IkSOVKu2Hfh4zZoxNkVywYIH58ccf8x+nTp0qx7OoeP3sibKN/NPPhw4dstlyDz/8sNmzZ49Zvny5SUxMNKNGjSrHs6h4/czrMft5zpw5Np139erVplGjRjZLVBQOr6ucloIPSoSXXnrJPv/uu+/s++xj9rVnqvSwYcPsOMhpLZQqXQ4wR/3yyy+3gyVT8z755JP89zp37mwv6K7MmzfPJCcn2/WZLrZixYpyaHXF7uf69evbH5Hngxcn4dvvsysSL/7r548//thOq8DBmGnTL7zwgk1TF77r58zMTPP8889bwVK5cmWTlJRkhgwZYk6cOFFOrQ8O1q9fX+D11ulb/mdfe26TkpJiPxd+n6dPn+73dlbiH//adoQQQgghfIdiXoQQQggRVEi8CCGEECKokHgRQgghRFAh8SKEEEKIoELiRQghhBBBhcSLEEIIIYIKiRchhBBCBBUSL0IIIYQIKiRehBBCCBFUSLwIIYQQIqiQeBFCXPQcP34ctWvXxujRo/OXffzxx7basGdFWyFExUe1jYQQQcHKlSvRq1cvK1qaNm2KlJQU9OzZEy+99FJ5N00IEWAkXoQQQcPQoUOxdu1atG3bFjt37sSnn36K6Ojo8m6WECLASLwIIYKG9PR0tGrVCocPH8a2bdvQunXr8m6SEKIcUMyLECJo2L9/P44cOYKcnBx8++235d0cIUQ5IcuLECIoyMjIQLt27WysC2NeJkyYYF1HiYmJ5d00IUSAkXgRQgQFw4YNw4IFC/D5558jNjYWnTt3Rnx8PJYvX17eTRNCBBi5jYQQFz0bNmywlpaZM2ciLi4OYWFh9vnmzZsxefLk8m6eECLAyPIihBBCiKBClhchhBBCBBUSL0IIIYQIKiRehBBCCBFUSLwIIYQQIqiQeBFCCCFEUCHxIoQQQoigQuJFCCGEEEGFxIsQQgghggqJFyGEEEIEFRIvQgghhAgqJF6EEEIIEVRIvAghhBACwcT/AzJy8GbJBp1cAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# generate new data\n",
"input, target = generate_data(100, x_train)\n",
"\n",
"# compute the predicted solution\n",
"prediction = solver(input).detach()\n",
"\n",
"# plot\n",
"plt.plot(x_train, input[0], label=f\"Input u(x, t=0)\")\n",
"plt.plot(x_train, target[0], label=f\"Target u(x, t=0.5)\")\n",
"plt.plot(x_train, prediction[0], \"--r\", label=f\"NO prediction u(x, t=0.5)\")\n",
"plt.title(\"Generated 1D Advection Data\")\n",
"plt.xlabel(\"x\")\n",
"plt.legend()\n",
"plt.grid(True)"
]
},
{
"cell_type": "markdown",
"id": "c152bfd1",
"metadata": {},
"source": [
"Nice! We can see that the network is correctly learning the solution operator and it was very simple!\n",
"\n",
"## What's Next?\n",
"\n",
"Congratulations on completing the introductory tutorial on Neural Operators! Now that you have a solid foundation, here are a few directions you can explore:\n",
"\n",
"1. **Experiment with Training Duration & Network Architecture** — Try different training durations and tweak the network architecture to optimize performance. Choose different integral kernels and see how the results vary.\n",
"\n",
"2. **Explore Other Models in `pina.model`** — Check out other models available in `pina.model` or design your own custom PyTorch module to suit your needs. What about trying a `DeepONet`?\n",
"\n",
"3. **...and many more!** — The possibilities are vast! Continue experimenting with advanced configurations, solvers, and features in PINA. For example, consider incorporating physics-informed terms during training to enhance model generalization.\n",
"\n",
"For more resources and tutorials, check out the [PINA Documentation](https://mathlab.github.io/PINA/)."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "pina",
"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.9.21"
}
},
"nbformat": 4,
"nbformat_minor": 5
}