703 lines
131 KiB
Plaintext
Vendored
703 lines
131 KiB
Plaintext
Vendored
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "de19422d",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Tutorial: Two dimensional Poisson problem using Extra Features Learning\n",
|
|
"\n",
|
|
"[](https://colab.research.google.com/github/mathLab/PINA/blob/master/tutorials/tutorial2/tutorial.ipynb)\n",
|
|
"\n",
|
|
"This tutorial presents how to solve with Physics-Informed Neural Networks (PINNs) a 2D Poisson problem with Dirichlet boundary conditions. We will train with standard PINN's training, and with extrafeatures. For more insights on extrafeature learning please read [*An extended physics informed neural network for preliminary analysis of parametric optimal control problems*](https://www.sciencedirect.com/science/article/abs/pii/S0898122123002018).\n",
|
|
"\n",
|
|
"First of all, some useful imports."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "ad0b8dd7",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"## routine needed to run the notebook on Google Colab\n",
|
|
"try:\n",
|
|
" import google.colab\n",
|
|
" IN_COLAB = True\n",
|
|
"except:\n",
|
|
" IN_COLAB = False\n",
|
|
"if IN_COLAB:\n",
|
|
" !pip install \"pina-mathlab\"\n",
|
|
"\n",
|
|
"import torch\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"import warnings\n",
|
|
"\n",
|
|
"from pina import LabelTensor, Trainer\n",
|
|
"from pina.model import FeedForward\n",
|
|
"from pina.solver import PINN\n",
|
|
"from torch.nn import Softplus\n",
|
|
"\n",
|
|
"warnings.filterwarnings('ignore')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "492a37b4",
|
|
"metadata": {},
|
|
"source": [
|
|
"## The problem definition"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "2c0b1777",
|
|
"metadata": {},
|
|
"source": [
|
|
"The two-dimensional Poisson problem is mathematically written as:\n",
|
|
"\\begin{equation}\n",
|
|
"\\begin{cases}\n",
|
|
"\\Delta u = 2\\pi^2\\sin{(\\pi x)} \\sin{(\\pi y)} \\text{ in } D, \\\\\n",
|
|
"u = 0 \\text{ on } \\Gamma_1 \\cup \\Gamma_2 \\cup \\Gamma_3 \\cup \\Gamma_4,\n",
|
|
"\\end{cases}\n",
|
|
"\\end{equation}\n",
|
|
"where $D$ is a square domain $[0,1]^2$, and $\\Gamma_i$, with $i=1,...,4$, are the boundaries of the square.\n",
|
|
"\n",
|
|
"The Poisson problem is written in **PINA** code as a class. The equations are written as *conditions* that should be satisfied in the corresponding domains. The *solution*\n",
|
|
"is the exact solution which will be compared with the predicted one. If interested in how to write problems see [this tutorial](https://mathlab.github.io/PINA/_rst/tutorials/tutorial1/tutorial.html).\n",
|
|
"\n",
|
|
"We will directly import the problem from `pina.problem.zoo`, which contains a vast list of PINN problems and more."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"id": "82c24040",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"The problem is made of 5 conditions: \n",
|
|
"They are: ['g1', 'g2', 'g3', 'g4', 'D']\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"from pina.problem.zoo import Poisson2DSquareProblem as Poisson\n",
|
|
"\n",
|
|
"# initialize the problem\n",
|
|
"problem = Poisson()\n",
|
|
"\n",
|
|
"# print the conditions\n",
|
|
"print(\n",
|
|
" f\"The problem is made of {len(problem.conditions.keys())} conditions: \\n\"\n",
|
|
" f\"They are: {list(problem.conditions.keys())}\"\n",
|
|
")\n",
|
|
"\n",
|
|
"# let's discretise the domain\n",
|
|
"problem.discretise_domain(30, \"grid\", domains=[\"D\"])\n",
|
|
"problem.discretise_domain(\n",
|
|
" 100,\n",
|
|
" \"grid\",\n",
|
|
" domains=[\"g1\", \"g2\", \"g3\", \"g4\"],\n",
|
|
")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "7086c64d",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Solving the problem with standard PINNs"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "72ba4501",
|
|
"metadata": {},
|
|
"source": [
|
|
"After the problem, the feed-forward neural network is defined, through the class `FeedForward`. This neural network takes as input the coordinates (in this case $x$ and $y$) and provides the unkwown field of the Poisson problem. The residual of the equations are evaluated at several sampling points and the loss minimized by the neural network is the sum of the residuals.\n",
|
|
"\n",
|
|
"In this tutorial, the neural network is composed by two hidden layers of 10 neurons each, and it is trained for 1000 epochs with a learning rate of 0.006 and $l_2$ weight regularization set to $10^{-8}$. These parameters can be modified as desired. We set the `train_size` to 0.8 and `test_size` to 0.2, this mean that the discretised points will be divided in a 80%-20% fashion, where 80% will be used for training and the remaining 20% for testing."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"id": "e7d20d6d",
|
|
"metadata": {
|
|
"scrolled": true
|
|
},
|
|
"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"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Epoch 999: 100%|██████████| 1/1 [00:00<00:00, 143.27it/s, v_num=41, g1_loss=0.0148, g2_loss=0.0118, g3_loss=0.0346, g4_loss=0.00393, D_loss=0.206, train_loss=0.271] "
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"`Trainer.fit` stopped: `max_epochs=1000` reached.\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Epoch 999: 100%|██████████| 1/1 [00:00<00:00, 99.69it/s, v_num=41, g1_loss=0.0148, g2_loss=0.0118, g3_loss=0.0346, g4_loss=0.00393, D_loss=0.206, train_loss=0.271] \n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# make model + solver + trainer\n",
|
|
"from pina.optim import TorchOptimizer\n",
|
|
"\n",
|
|
"model = FeedForward(\n",
|
|
" layers=[10, 10],\n",
|
|
" func=Softplus,\n",
|
|
" output_dimensions=len(problem.output_variables),\n",
|
|
" input_dimensions=len(problem.input_variables),\n",
|
|
")\n",
|
|
"pinn = PINN(\n",
|
|
" problem,\n",
|
|
" model,\n",
|
|
" optimizer=TorchOptimizer(torch.optim.Adam, lr=0.006, weight_decay=1e-8),\n",
|
|
")\n",
|
|
"trainer_base = Trainer(\n",
|
|
" solver=pinn, # setting the solver, i.e. PINN\n",
|
|
" max_epochs=1000, # setting max epochs in training\n",
|
|
" accelerator=\"cpu\", # we train on cpu, also other are available\n",
|
|
" enable_model_summary=False, # model summary statistics not printed\n",
|
|
" train_size=0.8, # set train size\n",
|
|
" val_size=0.0, # set validation size\n",
|
|
" test_size=0.2, # set testing size\n",
|
|
" shuffle=True, # shuffle the data\n",
|
|
" \n",
|
|
")\n",
|
|
"\n",
|
|
"# train\n",
|
|
"trainer_base.train()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "eb83cc7a",
|
|
"metadata": {},
|
|
"source": [
|
|
"Now we plot the results using `matplotlib`.\n",
|
|
"The solution predicted by the neural network is plotted on the left, the exact one is represented at the center and on the right the error between the exact and the predicted solutions is showed. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"id": "1ab83c03",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"@torch.no_grad()\n",
|
|
"def plot_solution(solver):\n",
|
|
" # get the problem\n",
|
|
" problem = solver.problem\n",
|
|
" # get spatial points\n",
|
|
" spatial_samples = problem.spatial_domain.sample(30, \"grid\")\n",
|
|
" # compute pinn solution, true solution and absolute difference\n",
|
|
" data = {\n",
|
|
" \"PINN solution\": solver(spatial_samples),\n",
|
|
" \"True solution\": problem.solution(spatial_samples),\n",
|
|
" \"Absolute Difference\": torch.abs(\n",
|
|
" solver(spatial_samples) - problem.solution(spatial_samples)\n",
|
|
" ),\n",
|
|
" }\n",
|
|
" # plot the solution\n",
|
|
" for idx, (title, field) in enumerate(data.items()):\n",
|
|
" plt.subplot(1, 3, idx + 1)\n",
|
|
" plt.title(title)\n",
|
|
" plt.tricontourf( # convert to torch tensor + flatten\n",
|
|
" spatial_samples.extract(\"x\").tensor.flatten(),\n",
|
|
" spatial_samples.extract(\"y\").tensor.flatten(),\n",
|
|
" field.tensor.flatten(),\n",
|
|
" )\n",
|
|
" plt.colorbar(), plt.tight_layout()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "dfec566d",
|
|
"metadata": {},
|
|
"source": [
|
|
"Here the solution:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"id": "7db10610",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAABKcAAAJNCAYAAADkjxajAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAACeSklEQVR4nO3dB5jU1b3/8QMsS5GiSJO6iAVRBAVBsCuK0avitaASQS4RGzaMCipgBw0SohK5FixRL0QjxKiXiAixgBJBEzWAFUGRdpUuLGX+z/f4n83sMrM75VdOeb+eZ2J2mJn9Tdlz5nx+33NOtUQikVAAAAAAAABADKrH8UsBAAAAAAAAQTgFAAAAAACA2BBOAQAAAAAAIDaEUwAAAAAAAIgN4RQAAAAAAABiQzgFAAAAAACA2BBOAQAAAAAAIDaEUwAAAAAAAIgN4RQAAAAAAABiQzgF58yZM0dVq1ZN/zdIl1xyiSopKQn0MQEA8ZJ2Xdp3G/ohAAja0qVLdXs1bty4SH+vK9+r0z2PTZs2qV/96leqefPm+rW97rrr9PWrVq1S5557rtp777319RMmTIjpqAEzEU456KmnntINXvJSu3ZtdcABB6ihQ4fqRrHil+cXX3xxt/vKfb777rvdHvv4449XhxxySLnrpEGW+1x99dW73T7d7zDZihUr1O23364++uijuA8FACKX2ndUdiF0+dnvf/973W8CgMntlLTbPXr0UK547bXX9Pf1oMljpvZ1devWVW3atFFnnHGGevLJJ9W2bduyepx7771X9w1XXHGF+sMf/qAuvvhiff3111+v/vrXv6oRI0bo60899dTAnwNgs6K4DwDhufPOO1W7du3U1q1b1TvvvKMeeeQR3Zh/8sknurGtjDS+Y8eOVQ899FDWv++xxx7TjW2LFi2UrSScuuOOO3Tg1qVLl92e365du2I7NgAIm3xZTvXMM8+omTNn7nb9QQcdFPGRmTvoa9y48W6VV8cee6z66aefVHFxcWzHBgDiueee099r58+fr7744gu13377KdvJeGbixImhBFRCxkz16tXT4yE5WS+B0n/913/pSqdXXnlFtW7dutLxwZtvvqmOPPJINXr06N2uP+uss9Svf/3rUI4bsB3hlMN+8YtfqG7duun/L6WlUkI6fvx49ec//1ldeOGFld5XgplcwqaDDz5YLVmyRAdaDz74oHJRzZo14z4EAAjVL3/5y3I/v/feezqcqnh9RVu2bKnypIdPqlevriuQASBOX3/9tZo7d6566aWX1GWXXaaDqoqBCXYnU+/kxEPSqFGj9Gs3YMAAdd555+m+sbLxwerVq1XHjh3TXr/nnnsGdpw7duzQwRgnQuAKpvV55MQTTyzrqKpyyy23qJ07d+qwKRtyRkYabAm0pPooH1KlJSGXDHD22msvHaw9//zz5W7z4Ycf6tCtQYMG+ozGSSedVK6DyHVNEZmmKBch01SOOOII/f8HDRpUVtKbnLKRbk755s2b1Q033KDPoNSqVUsdeOCBes5+IpEodzt5HJlWOX36dD0tUm4rz3XGjBl5vFIAEJ/k9O4FCxboCiFps6XPSLZ16c5kp2uD161bp9fhSLafcjb/vvvuy6pC9YMPPlB9+vTRg4c6deroKmE5q51P+5xpWkdFyWnvsj5L8jl9+umn6m9/+1tZf5Han6Sb/vjCCy+orl276mOWY5fQr+IUenmdpH+T6/v27av/f5MmTfSZdumXASBbEqjId+rTTz9dBy7yc2V++9vfqrZt2+o26rjjjtOzLVKtXLlSf0du1aqVblf32WcfXQmUbBdTq0rle67cRk5yX3XVVbrNr0ymdjO5Jlbq93GpmhKpU/CSpA+RCif5/XKSoFmzZjqY+/HHH1Uh+vfvr0/2v//++/qkTVLq+CD5HGSs9eqrr5YbS8h/pf+RY694zNn0h6lrg8nza9++vb7tv/71L/3vixcv1u9xo0aN9POWcdTLL79c7jkkj+Pdd99Vw4YN033LHnvsoc4++2y1Zs2a3Z7z//7v/+rPQf369fXYS8ZJFcdm8nrI9MSGDRvq7wNye3l8IB9UTnnkyy+/1P+VCqqqyBf9ZNg0fPjwrKqnbr31Vj0FJJ/qKfk911xzjW5Ur732Wj0V8Z///Kdu8C666CJ9GxkEHHPMMbpxvOmmm/SZiv/+7//WgwEZHBQ6l16mqchUSDk7MmTIEP27RK9evdLeXjqYM888U82ePVsNHjxYV5tJ2e+NN96oBxXSwaeSqZVy5urKK6/Ujby8Ruecc45atmxZVu8JAJji//7v//SJggsuuEAHLPLlPxdSaSVfYKWtlEGDrOkhZ/elWvf777+vdJFYOfN8yimn6C/V0j/JWWj50i7ta77tcz7kGGWtRQmPpP8Tlb0OMiiQQZ18uR8zZoxeA/J3v/ud/hIvJ15Sz6ZLCCXhm/RrMhB544031AMPPKAHI7KGCQBkQ8Ko//zP/9SVNTJrQqar/f3vfy87GZtKvsNv3LhRB0nyPVzaJzmx/fHHH5e1bfK9Vb6PS9sngYy0xxLUyHfZZEAjAb8skdG7d2/dXsnMiuTvlfau0JkI0mfIifB0U86T/55sb2VsIUHRww8/rNvZQn+/rB316KOPqtdff12dfPLJaccSckyytpQEeHKCRBx22GFla0/J/WSMlW9/KGtfyfsjYxUJpySMkvfkqKOOUi1bttT9ogROf/zjH/UJjj/96U86fEol75+EllJFJ/2n/A45iT516tSy28hrKCd9JOSTY5E+Sl5DObGeHJvJNEX5LiAnXeSxpGpYjk8+N2+//bbq3r173q81PJWAc5588kk5LZx44403EmvWrEksX748MWXKlMTee++dqFOnTuLbb7/Vt5s9e7a+3QsvvLDbff/+978nvvzyy0RRUVHimmuuKfv34447LnHwwQeX+31t27ZNnH766fr/Dxo0KFG7du3EihUrMv6OdM4666zdHreivn37JoqLi/VxJcnvqV+/fuLYY48tuy75O+W/qcc4cODA3R5Tno9ckuR5y33ldahI7i+PkzR9+nR927vvvrvc7c4999xEtWrVEl988UXZdXI7OfbU6/7xj3/o6x966KFKnzcAxOWqq67S7VQqaTPlukmTJu12e7l+9OjRu11fsQ2+6667EnvssUfis88+K3e74cOHJ2rUqJFYtmxZxmOaNm1aWT+VSS7tc8Vjk+NP9/Uo2T9+/fXXZddJv5Xah2Tqh0pLSxNNmzZNHHLIIYmffvqp7HavvPKKvt2oUaPKrpNjkevuvPPOco952GGHJbp27ZrxOQNAqg8++EC3JTNnztQ/79q1K9GqVavEtddeW+520qbJ7VLHCOL999/X119//fX65x9//FH//Jvf/Cbj71y9erX+vnvKKackdu7cWXb9ww8/rO87efLkjN+r031/Tz2+1O/m6fom8fbbb+vrn3vuuXLXz5gxI+31FSXbfxk/pZN8Dc4+++yMz6Pi2CiV3FeOPVW2/WHydWjQoIF+nVOddNJJiU6dOiW2bt1adp2837169Ursv//+u/VjvXv31v+eJO+x/K5169bpn+W/Mr7q0aNHuT4r+bjJ/8pj9+nT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vqNjx45q0qRJOR0T4ZRHbK4AMoWtr2HcgxtbB+VRmjp1qho2bJgaPXq0WrhwoercubPq06ePWr16ddrbz5kzR1144YVq9uzZat68eap169bqlFNOUd99913kxw43EYyYw8b3gnbfzL5j7ty5uu8YPHiw+vDDD1Xfvn315ZNPPim7zf33368efPBBPah4//331R577KEfc+vWrRE+M8BtVKqFN70vqCqq+svdDammhjDukMebMWOGevbZZ9WiRYvUddddp8Oql19+2c1wavaqA+I+BGvZGKiYjNcTQRs/fry69NJL1aBBg8rONNStW1dNnjw57e2fe+45deWVV6ouXbroM+CPP/642rVrl5o1a1bkxw63Buo2BiG+4L1BoX3H7373O3XqqaeqG2+8UR100EHqrrvuUocffrh6+OGHy6qmJkyYoG677TZ11llnqUMPPVQ988wzasWKFWr69OkRPztEjcAEcTMpoHLZ+BDGHXLyY+DAger444/XFVlDhgzRoVcuMzusCqdMYdsXQ4KUcNhWRRX359amwXmQNmzYUO6ybdvunWVpaalasGCBLpFNql69uv5Zzk5kY8uWLWr79u2qUaNGgR4//Prsx91OwK33yabPvm39Rr59h1yfenshZ8uTt//666/VypUry92mYcOGespHtv0RAJjAt4BqQ4h9Rzbjjl69eukqKammkhMdUmX12Wef6QqrbBVlfUtYx6bgxPbXeVubUmXLgKak1Rrlu+kbO6vaiZqh/o6tm7YrpV7XZa+ppHz29ttvL3fd2rVr1c6dO1WzZs3KXS8/L168OKvfd/PNN6sWLVrsNugAXAo78G+05+71Hbn0G/n2HRI8pbu9XJ/89+R1mW4DoDC+hSb5VE+VdmgV2Gu9vn0tFScX+o5sxh0PPfSQrpaSNaeKiop04CVrVR177LEqW4RTjn6BJ5iK5/W2JaSK8yz6yc2za/RcsXz5ctWgQYOyn2vVCr6DHDt2rJoyZYqeDy6LGsIcNlSO2NKvIfN7Z3JI5WO7b0O/AZg8mAdcC6hc6jvGZhh3SDj13nvv6eqptm3bqrfeektdddVVOZ08J5xyEMFUfGyoouJse7Skk0jtKNJp3LixqlGjhlq1alW56+Xn5s2bV3rfcePG6U7ijTfe0GuDANkilHIH7bp//Ua+fYdcX9ntk/+V62S3vtTbyFojAOwl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5o5hUZ0QoWrK7YCK6ll73XDDDeqSSy6p9Db77ruv7hsqLnS7Y8cOvYNf0P2GrGklj7106VJ14IEHBvrYNqNqCrDLhna1lHpHOadxHuOOpHHjxulw6o033tAnI5Lefvtt3cfI1O4kqc6SPkp27JP+IBssiA4YKI7gkaq/+MhZ5q5du5ZbVDC5yGDPnj3T3keur7gIoezAlOn2iJ+t6x0STMWL1x+VadKkiV6ctrKL9DHSN6xbt06f3U568803dV8jYVKQPvroI71+ScVphABgi/Xt3a36LM5j3CHuv/9+vbagbK6Run6hkLWm/vnPf+r2P3mRaX+y/tRf//rXrI+NyilLuVo11fDL3HakcbnhcJWPU/uynRYxcOBA3dh3795dn2XYvHmz3kVDDBgwQLVs2VJPkxDXXnutOu6449QDDzygTj/9dF1e+8EHH6hHH3005mcClwJlghHADbKrq+zwKrszya5MspDt0KFD1QUXXFC23bfssnTSSSepZ555RvdDQtajkssXX3yhf/7444/1znxydlzWmJLFc2VB9RNOOEFfLz/LYui//OUv1V577RXrcwaAXPkythyW47hDpo+PGjVKPf/886qkpKRsrcJ69erpy957760vqWS3PqnEyqWClnAqQFSehB9GVXZ/1xqTONaeYmpHfPr166fWrFmjG35p8GWrVjkzkVyscNmyZfpMdFKvXr10B3HbbbepW265Re2///56p75DDjkkxmcBwNbpfUG3/0GdiJBptSc3z26BVlROtvaWQEoCKOlPzjnnHPXggw+W/bsEVkuWLNG7MCVJkHXHHXeU/Xzsscfq/z755JN6OqGsKSUnR2RHKNm2vF27djqcqribrO+Y0geYzbVxZNDjjkceeUTv8nfuuecGvptsKsIpC9leNVVoIJXt47rQyLi8ODp2J4MGuaQjiw5WdN555+kLEAaqpszCAukolFQ6yUmNTORseCJR/u9eBh2VDTxkl7733nsv0OMEgCi4MFaMatyR7ZpRhd7Hu3DK1jU/XBBWKFXV7/O94TERU/uAwlCpCwAAkDvGhuZiQXREEhJFHUyZ9Pttq5Rj0AsEz7YTI1RN+fm+0P4DwWNKH2BOKEUwZTbvKqdsZ9OUPtMCISqpALgg7ACBYAoAALiCsZ89qJwKCGcb7alUMv34fKmesq2SBABMYFP1FO08ACAuVErZ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AABgd4RTAAAAAAAAiA3hFAAAAAAAAGJDOAUgUrWWFcd9CAAAAEBeGn4Z3o63iMbJzRfHfQhIg3AqImy5CQAAAACwFWNahIlwCgAAAAAAALEhnAKwm/rfJOI+BFTihx9+UP3791cNGjRQe+65pxo8eLDatGlTVvdNJBLqF7/4hapWrZqaPn166McKAHC775DrKl6mTJkS0rMAgN2VtFoT9yFYZ+LEiaqkpETVrl1b9ejRQ82fPz/jbT/99FN1zjnn6NtLGz9hwoS0t/vuu+/UL3/5S7X33nurOnXqqE6dOqkPPvgg62MinAIAy8jgQjqJmTNnqldeeUW99dZbasiQIVndVzoT6VQAAH4Js+948skn1ffff1926du3b4BHDgAI0tSpU9WwYcPU6NGj1cKFC1Xnzp1Vnz591OrVq9PefsuWLWrfffdVY8eOVc2bN097mx9//FEdddRRqmbNmup///d/1b/+9S/1wAMPqL322ivr4yrK+xkBAKq0YcOGcj/XqlVLX/K1aNEiNWPGDPX3v/9ddevWTV/30EMPqdNOO02NGzdOtWjRIuN9P/roI91JyBmMffbZJ+9jAADY029E0XdIJVamAQvg6qLo69sX9ncJxNV3jB8/Xl166aVq0KBB+udJkyapV199VU2ePFkNHz58t9sfccQR+iLS/bu47777VOvWrfXJiqR27drl9BwIpwB4p3h5sapRO9xdA3du3aX/K410KjlDcfvtt+f9uPPmzdODgOTgQvTu3VtVr15dvf/+++rss8/OeMbjoosu0iW8DCAAwLy+I6x+I4q+46qrrlK/+tWv9Jn1yy+/XA94qNIFkIttbUqVSfrW/4e628G+o7S0VC1YsECNGDGi7DrpC6RPkL4iXy+//LKuvjrvvPPU3/72N9WyZUt15ZVX6hAsW4RTABCi5cuX6/U9kgo9+71y5UrVtGnTctcVFRWpRo0a6X/L5Prrr1e9evVSZ511VkG/HwBgV78Rdt9x5513qhNPPFHVrVtXvf7663owImtZXXPNNQUfNwAg2L5j7dq1aufOnapZs2blrpefFy9erPL11VdfqUceeURPF7zlllt0pa70A8XFxWrgwIFZPQbhFACESDqJ1I4iEymRlXLYqqZl5Hsm480331QffvhhXvcHAJjXb5jSd4wcObLs/x922GFq8+bN6je/+Q3hFAAY2neE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5557VK9evVTdunXVnnvuWeXtt2/frm6++Wbd/u6xxx6qRYsWasCAAWrFihUqSqb1HVRPAfBJrn2HSCQSatSoUWqfffZRderUUb1791aff/55udtIu16tWrVyl7Fjxzrbd8AuBHZ2o1oqPEG3rdn0F4GHU1OnTlXDhg1To0ePVgsXLlSdO3dWffr0UatXr057+7lz56oLL7xQDR48WH344Yeqb9+++vLJJ5/k+qsBIxBIxadv/X/EfQhGKC0tVeedd5664oorsrr9li1bdHs9cuRI/d+XXnpJLVmyRJ155pkqKvQdAGBX3yHuv/9+9eCDD6pJkyap999/X5/gkLZ769at5W535513qu+//77scvXVVwdyzC72HWGtN0UIg6CYUjUVZyhV0mqNatNirXLV1BDa1mz7i8pUS0jElQNJ1Y444gj18MMP65937dqlWrdurTuh4cOH73b7fv36qc2bN6tXXnml7LojjzxSdenSRR94Otu2bdOXpPXr16s2bdqoG2edqGrtkXkm4uxVB+TyVICsndDss7gPwSuZQqhNm3ap43usUevWrVMNGzbM+XE3bNig73d8kwGqqFqxCtOORKmas+YZtXz5ctWgQYOy62vVqqUvQXjqqafUddddp1+PXP39739X3bt3V998841uX8MWZ98x5/0mql69zOdipm/sXOCzA2CybZt3qN+c9GbhfUfji0PtO3S/sfYPofYbufQdMkSQStsbbrhB/frXvy5rV5s1a6Yf44ILLtDXyZl3eTy52NZ3ZOo3jm88QBVVD+e9Lj2gRSiPu6Ed4VRlGnwd7uLoxZ9FW40e1mes0M/RxtbBBFOlraMLpjKFUDu2lKr3L3zU+HHHjjzGHEG3rdn2F1VK5GDbtm2JGjVqJKZNm1bu+gEDBiTOPPPMtPdp3bp14re//W2560aNGpU49NBDM/6e0aNHS2DGhQsXLmkvX375ZSIfP/30U6J58+aRHWe9evV2u07at6A8+eSTiYYNG+Z135kzZyaqVauWWL9+fSJs9B1cuHAx4WJD3xF2v5FL3yGvl/z+Dz/8sNz1xx57bOKaa64p+7lt27aJZs2aJRo1apTo0qVL4v77709s377dir6DfoMLFy6+9R3bQmhbs+0vqpLTguhr165VO3fu1AlYKvl58eL005xWrlyZ9vZyfSYjRozQZWZJkla2bdtWLVu2LK/U0jSSokoyWTHdtJVLz8el5+Li80me0WzUqFFe95c50l9//bWe2hAFOYsga2+kCvLsd76kvFbWoJLy3Cg+F/QdhXPtb5nnYzbXno9NfYdJ/Uayva2qLb7mmmvU4Ycfrl9fmfohbbFM7Rs/frzxfYfL/YaLf8s8H7O59nxc7TvCaFuz7S+s3K0vUwmadBIufNCT5LnwfMzk0nNx8flUr57XXg5lHYVcTCMltPfdd1+lt1m0aJFeiLAQsjj6+eefrzuxRx55RLnEh77Dtb9lno/ZXHs+9B3hSA13Dj30UFVcXKwuu+wyNWbMGCNOyPjeb7j4t8zzMZtrz8fFvsNUOYVTjRs3VjVq1FCrVq0qd7383Lx587T3ketzuT0A+EjmaF9yySWV3mbfffcNJJiSdabefPPNyL440HcAgH19R7K9lbZXdl9Kkp9lnZFMZC2THTt2qKVLl6oDDzxQ5Yu+AwCCF0bbmm9/UVFOMaCcCenatauaNWtW2XWyeJb83LNnz7T3ketTby9mzpyZ8fYA4KMmTZroM9uVXaQNLjSYki1d33jjDbX33nurqNB3AIB9fUe7du30gCO1LZZpO7ILU2Vt8UcffaQrDZo2baoKQd8BAMELo23Nt7/YTSJHU6ZMSdSqVSvx1FNPJf71r38lhgwZkthzzz0TK1eu1P9+8cUXJ4YPH152+3fffTdRVFSUGDduXGLRokV6Ya6aNWsmPv7446x/59atW/X95L8u4PmYy6XnIng+bvrmm2/0goN33HGHXgBR/r9cNm7cWHabAw88MPHSSy/p/19aWqoXOGzVqlXio48+Snz//fdlF1kUMQr0HYVx6bkIno/ZeD5uyrXvEGPHjtVt9Z///OfEP//5z8RZZ52VaNeunV7oV8ydO1cvkit9iyyI++yzzyaaNGmiF9a1se9w7bPC8zEbz8dsrj2fsNvWqvqLbOQcTomHHnoo0aZNm0RxcXGie/fuiffee6/s34477rjEwIEDy93+j3/8Y+KAAw7Qtz/44IMTr776aj6/FgCQSOg2Nt1OHbNnzy67jfwsOzKJr7/+OuPuHqn3CRt9BwDY03eIXbt2JUaOHKl345OBzEknnZRYsmRJ2b8vWLAg0aNHD737X+3atRMHHXRQ4t577w10MEffAQDBC7ptraq/yEY1+Z/ci8EAAAAAAACAwuW/9DwAAAAAAABQIMIpAAAAAAAAxIZwCgAAAAAAALEhnAIAAAAAAEBsjAmnJk6cqEpKSlTt2rVVjx491Pz58yu9/QsvvKA6dOigb9+pUyf12muvKZPk8nwee+wxdcwxx6i99tpLX3r37l3l8zf5vUmaMmWKqlatmurbt68ySa7PZ926deqqq65S++yzj6pVq5Y64IADjPq85fp8JkyYoA488EBVp04d1bp1a3X99derrVu3KhO89dZb6owzzlAtWrTQn53p06dXeZ85c+aoww8/XL83++23n3rqqaciOVbEj37D3H5D0HfQd0SFvgO5oO+g74gSfYeZfQf9hqESBpgyZYreknDy5MmJTz/9NHHppZcm9txzz8SqVavS3v7dd99N1KhRI3H//fcn/vWvfyVuu+22RM2aNRMff/xxwsbnc9FFFyUmTpyY+PDDDxOLFi1KXHLJJXpL3m+//TZh23NJkq3rW7ZsmTjmmGMSZ511VsIUuT6fbdu2Jbp165Y47bTTEu+8845+XnPmzEl89NFHCRufz3PPPae39pT/ynP561//mthnn30S119/fcIEr732WuLWW29NvPTSS3o762nTplV6+6+++ipRt27dxLBhw3RbIFuiStswY8aMyI4Z8aDfMLffEPQd9B1Rou9Atug76DuiRN9hbt9Bv2EmI8Kp7t27J6666qqyn3fu3Jlo0aJFYsyYMWlvf/755ydOP/30ctf16NEjcdlllyVsfD4V7dixI1G/fv3E008/nbDxucjx9+rVK/H4448nBg4caFQnkevzeeSRRxL77rtvorS0NGGiXJ+P3PbEE08sd500skcddVTCNNl0FDfddFPi4IMPLnddv379En369An56BA3+g1z+w1B30HfERf6DlSGvqM8+o5w0XfY0XfQb5gj9ml9paWlasGCBbqsNKl69er653nz5qW9j1yfenvRp0+fjLc3/flUtGXLFrV9+3bVqFEjZeNzufPOO1XTpk3V4MGDlUnyeT4vv/yy6tmzpy6vbdasmTrkkEPUvffeq3bu3KlsfD69evXS90mW4H711Ve6VPi0005TNjK5LUB46DfM7TcEfQd9h+lMbg8QHvqO3dF3hIe+w62+w+S2wCVFcR/A2rVr9R+c/AGmkp8XL16c9j4rV65Me3u53sbnU9HNN9+s579W/AOw4bm888476oknnlAfffSRMk0+z0ca0TfffFP1799fN6ZffPGFuvLKK3VHPnr0aGXb87nooov0/Y4++mipmlQ7duxQl19+ubrllluUjTK1BRs2bFA//fSTnt8O99BvmNtvCPoO+g7T0Xf4ib5jd/Qd4aHvcKvvoN+IRuyVUyhv7NixekG/adOm6YXmbLJx40Z18cUX68UWGzdurFywa9cufTbm0UcfVV27dlX9+vVTt956q5o0aZKykSzkJ2dgfv/736uFCxeql156Sb366qvqrrvuivvQAHjYbwj6DvPRdwDuoe8wD30HfBd75ZQ0JjVq1FCrVq0qd7383Lx587T3ketzub3pzydp3LhxuqN444031KGHHqpsey5ffvmlWrp0qd75ILWRFUVFRWrJkiWqffv2yqb3RnbKqFmzpr5f0kEHHaTTcylvLS4uVjY9n5EjR+qO/Fe/+pX+WXad2bx5sxoyZIju/KQ81yaZ2oIGDRpwBsNh9Bvm9huCvoO+w3T0HX6i7/g3+o7w0Xe41XfQb0Qj9k+E/JFJMjxr1qxyDYv8LHNu05HrU28vZs6cmfH2pj8fcf/99+sUecaMGapbt27KBLk+F9lm9+OPP9altcnLmWeeqU444QT9/2X7UNvem6OOOkqX1CY7O/HZZ5/pziPODiLf5yNrC1TsCJId4M/rAdrF5LYA4aHfMLffEPQd9B2mM7k9QHjoO35G3xEN+g63+g6T2wKnJAzZllK2mXzqqaf01oxDhgzR21KuXLlS//vFF1+cGD58eLltXYuKihLjxo3T26COHj3auG1dc3k+Y8eO1dtyvvjii4nvv/++7LJx48aEbc+lItN2zcj1+SxbtkzvYjJ06NDEkiVLEq+88kqiadOmibvvvjth4/ORvxV5Pv/zP/+jt0R9/fXXE+3bt9e70ZhAPvOyvbFcpHkaP368/v/ffPON/nd5LvKcKm7reuONN+q2QLZHZltXP9BvmNtvCPoO+o4o0XcgW/Qd9B1Rou8wt++g3zCTEeGUeOihhxJt2rTRDaZsU/nee++V/dtxxx2nG5tUf/zjHxMHHHCAvr1s6/jqq68mTJLL82nbtq3+o6h4kT9oG98bkzuJfJ7P3Llz9bbB0hjL9q733HOP3rbWxuezffv2xO233647htq1aydat26duPLKKxM//vhjwgSzZ89O+7eQfA7yX3lOFe/TpUsX/fzl/XnyySdjOnpEjX7D3H5D0HfQd0SFvgO5oO+g74gSfYeZfQf9hpmqyf/EXb0FAAAAAAAAP8W+5hQAAAAAAAD8RTgFAAAAAACA2BBOAQAAAAAAIDaEUwAAAAAAAIgN4RQAAAAAAABiQzgFAAAAAACA2BBOAQAAAAAAIDaEUwAAAAAAAIgN4RQAAAAAAABiQzgFAAAAAACA2BBOAQAAAAAAQMXl/wGdPZVFvZ3tfwAAAABJRU5ErkJggg==",
|
|
"text/plain": [
|
|
"<Figure size 1200x600 with 6 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"plt.figure(figsize=(12, 6))\n",
|
|
"plot_solution(solver=pinn)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "49142e7f",
|
|
"metadata": {},
|
|
"source": [
|
|
"As you can see the solution is not very accurate, in what follows we will use **Extra Feature** as introduced in [*An extended physics informed neural network for preliminary analysis of parametric optimal control problems*](https://www.sciencedirect.com/science/article/abs/pii/S0898122123002018) to boost the training accuracy. Of course, even extra training will benefit, this tutorial is just to show that convergence using Extra Features is usally faster."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "20fdf23e",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Solving the problem with extra-features PINNs"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "a1e76351",
|
|
"metadata": {},
|
|
"source": [
|
|
"Now, the same problem is solved in a different way.\n",
|
|
"A new neural network is now defined, with an additional input variable, named extra-feature, which coincides with the forcing term in the Laplace equation. \n",
|
|
"The set of input variables to the neural network is:\n",
|
|
"\n",
|
|
"\\begin{equation}\n",
|
|
"[x, y, k(x, y)], \\text{ with } k(x, y)= 2\\pi^2\\sin{(\\pi x)}\\sin{(\\pi y)},\n",
|
|
"\\end{equation}\n",
|
|
"\n",
|
|
"where $x$ and $y$ are the spatial coordinates and $k(x, y)$ is the added feature which is equal to the forcing term.\n",
|
|
"\n",
|
|
"This feature is initialized in the class `SinSin`, which is a simple `torch.nn.Module`. After declaring such feature, we can just adjust the `FeedForward` class by creating a subclass `FeedForwardWithExtraFeatures` with an adjusted forward method and the additional attribute `extra_features`.\n",
|
|
"\n",
|
|
"Finally, we perform the same training as before: the problem is `Poisson`, the network is composed by the same number of neurons and optimizer parameters are equal to previous test, the only change is the new extra feature."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"id": "ef3ad372",
|
|
"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"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Epoch 999: 100%|██████████| 1/1 [00:00<00:00, 121.03it/s, v_num=42, g1_loss=7.75e-5, g2_loss=6.85e-5, g3_loss=0.000217, g4_loss=0.000195, D_loss=0.000491, train_loss=0.00105] "
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"`Trainer.fit` stopped: `max_epochs=1000` reached.\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Epoch 999: 100%|██████████| 1/1 [00:00<00:00, 86.63it/s, v_num=42, g1_loss=7.75e-5, g2_loss=6.85e-5, g3_loss=0.000217, g4_loss=0.000195, D_loss=0.000491, train_loss=0.00105] \n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"class SinSin(torch.nn.Module):\n",
|
|
" \"\"\"Feature: sin(x)*sin(y)\"\"\"\n",
|
|
"\n",
|
|
" def __init__(self):\n",
|
|
" super().__init__()\n",
|
|
"\n",
|
|
" def forward(self, pts):\n",
|
|
" x, y = pts.extract([\"x\"]), pts.extract([\"y\"])\n",
|
|
" f = 2 *torch.pi**2 * torch.sin(x * torch.pi) * torch.sin(y * torch.pi)\n",
|
|
" return LabelTensor(f, [\"feat\"])\n",
|
|
"\n",
|
|
"\n",
|
|
"class FeedForwardWithExtraFeatures(FeedForward):\n",
|
|
" def __init__(self, *args, extra_features, **kwargs):\n",
|
|
" super().__init__(*args, **kwargs)\n",
|
|
" self.extra_features = extra_features\n",
|
|
"\n",
|
|
" def forward(self, x):\n",
|
|
" extra_feature = self.extra_features(x) # we append extra features\n",
|
|
" x = x.append(extra_feature)\n",
|
|
" return super().forward(x)\n",
|
|
"\n",
|
|
"\n",
|
|
"model_feat = FeedForwardWithExtraFeatures(\n",
|
|
" input_dimensions=len(problem.input_variables) + 1,\n",
|
|
" output_dimensions=len(problem.output_variables),\n",
|
|
" func=Softplus,\n",
|
|
" layers=[10, 10],\n",
|
|
" extra_features=SinSin(),\n",
|
|
")\n",
|
|
"\n",
|
|
"pinn_feat = PINN(\n",
|
|
" problem,\n",
|
|
" model_feat,\n",
|
|
" optimizer=TorchOptimizer(torch.optim.Adam, lr=0.006, weight_decay=1e-8),\n",
|
|
")\n",
|
|
"trainer_feat = Trainer(\n",
|
|
" solver=pinn_feat, # setting the solver, i.e. PINN\n",
|
|
" max_epochs=1000, # setting max epochs in training\n",
|
|
" accelerator=\"cpu\", # we train on cpu, also other are available\n",
|
|
" enable_model_summary=False, # model summary statistics not printed\n",
|
|
" train_size=0.8, # set train size\n",
|
|
" val_size=0.0, # set validation size\n",
|
|
" test_size=0.2, # set testing size\n",
|
|
" shuffle=True, # shuffle the data\n",
|
|
")\n",
|
|
"\n",
|
|
"trainer_feat.train()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "9748a13e",
|
|
"metadata": {},
|
|
"source": [
|
|
"The predicted and exact solutions and the error between them are represented below.\n",
|
|
"We can easily note that now our network, having almost the same condition as before, is able to reach additional order of magnitudes in accuracy."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"id": "2be6b145",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"<Figure size 1200x600 with 6 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"plt.figure(figsize=(12, 6))\n",
|
|
"plot_solution(solver=pinn_feat)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "e7bc0577",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Solving the problem with learnable extra-features PINNs"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "86c1d7b0",
|
|
"metadata": {},
|
|
"source": [
|
|
"We can still do better!\n",
|
|
"\n",
|
|
"Another way to exploit the extra features is the addition of learnable parameter inside them.\n",
|
|
"In this way, the added parameters are learned during the training phase of the neural network. In this case, we use:\n",
|
|
"\n",
|
|
"\\begin{equation}\n",
|
|
"k(x, \\mathbf{y}) = \\beta \\sin{(\\alpha x)} \\sin{(\\alpha y)},\n",
|
|
"\\end{equation}\n",
|
|
"\n",
|
|
"where $\\alpha$ and $\\beta$ are the abovementioned parameters.\n",
|
|
"Their implementation is quite trivial: by using the class `torch.nn.Parameter` we cam define all the learnable parameters we need, and they are managed by `autograd` module!"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"id": "ae8716e7",
|
|
"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"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Epoch 999: 100%|██████████| 1/1 [00:00<00:00, 102.62it/s, v_num=43, g1_loss=7.54e-6, g2_loss=2.9e-5, g3_loss=3.65e-5, g4_loss=1.22e-5, D_loss=0.00208, train_loss=0.00217] "
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"`Trainer.fit` stopped: `max_epochs=1000` reached.\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Epoch 999: 100%|██████████| 1/1 [00:00<00:00, 68.69it/s, v_num=43, g1_loss=7.54e-6, g2_loss=2.9e-5, g3_loss=3.65e-5, g4_loss=1.22e-5, D_loss=0.00208, train_loss=0.00217] \n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"class SinSinAB(torch.nn.Module):\n",
|
|
" \"\"\" \"\"\"\n",
|
|
" def __init__(self):\n",
|
|
" super().__init__()\n",
|
|
" self.alpha = torch.nn.Parameter(torch.tensor([1.0]))\n",
|
|
" self.beta = torch.nn.Parameter(torch.tensor([1.0]))\n",
|
|
"\n",
|
|
" def forward(self, x):\n",
|
|
" t = (\n",
|
|
" self.beta*torch.sin(self.alpha*x.extract(['x'])*torch.pi)*\n",
|
|
" torch.sin(self.alpha*x.extract(['y'])*torch.pi)\n",
|
|
" )\n",
|
|
" return LabelTensor(t, ['b*sin(a*x)sin(a*y)'])\n",
|
|
"\n",
|
|
"\n",
|
|
"# make model + solver + trainer\n",
|
|
"model_learn = FeedForwardWithExtraFeatures(\n",
|
|
" input_dimensions=len(problem.input_variables) + 1, #we add one as also we consider the extra feature dimension\n",
|
|
" output_dimensions=len(problem.output_variables),\n",
|
|
" func=Softplus,\n",
|
|
" layers=[10, 10],\n",
|
|
" extra_features=SinSinAB())\n",
|
|
"\n",
|
|
"pinn_learn = PINN(problem, model_learn, optimizer=TorchOptimizer(torch.optim.Adam, lr=0.006,weight_decay=1e-8))\n",
|
|
"trainer_learn = Trainer(\n",
|
|
" solver=pinn_learn, # setting the solver, i.e. PINN\n",
|
|
" max_epochs=1000, # setting max epochs in training\n",
|
|
" accelerator=\"cpu\", # we train on cpu, also other are available\n",
|
|
" enable_model_summary=False, # model summary statistics not printed\n",
|
|
" train_size=0.8, # set train size\n",
|
|
" val_size=0.0, # set validation size\n",
|
|
" test_size=0.2, # set testing size\n",
|
|
" shuffle=True, # shuffle the data\n",
|
|
")\n",
|
|
"# train\n",
|
|
"trainer_learn.train()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "0319fb3b",
|
|
"metadata": {},
|
|
"source": [
|
|
"Umh, the final loss is not appreciabily better than previous model (with static extra features), despite the usage of learnable parameters. This is mainly due to the over-parametrization of the network: there are many parameter to optimize during the training, and the model in unable to understand automatically that only the parameters of the extra feature (and not the weights/bias of the FFN) should be tuned in order to fit our problem. A longer training can be helpful, but in this case the faster way to reach machine precision for solving the Poisson problem is removing all the hidden layers in the `FeedForward`, keeping only the $\\alpha$ and $\\beta$ parameters of the extra feature."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"id": "daa9cf17",
|
|
"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"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Epoch 999: 100%|██████████| 1/1 [00:00<00:00, 146.35it/s, v_num=44, g1_loss=1.48e-14, g2_loss=4.34e-15, g3_loss=2.04e-14, g4_loss=3.06e-15, D_loss=9.71e-12, train_loss=9.75e-12]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"`Trainer.fit` stopped: `max_epochs=1000` reached.\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Epoch 999: 100%|██████████| 1/1 [00:00<00:00, 103.91it/s, v_num=44, g1_loss=1.48e-14, g2_loss=4.34e-15, g3_loss=2.04e-14, g4_loss=3.06e-15, D_loss=9.71e-12, train_loss=9.75e-12]\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# make model + solver + trainer\n",
|
|
"model_learn = FeedForwardWithExtraFeatures(\n",
|
|
" layers=[],\n",
|
|
" func=Softplus,\n",
|
|
" output_dimensions=len(problem.output_variables),\n",
|
|
" input_dimensions=len(problem.input_variables) + 1,\n",
|
|
" extra_features=SinSinAB(),\n",
|
|
")\n",
|
|
"pinn_learn = PINN(\n",
|
|
" problem,\n",
|
|
" model_learn,\n",
|
|
" optimizer=TorchOptimizer(torch.optim.Adam, lr=0.006, weight_decay=1e-8),\n",
|
|
")\n",
|
|
"trainer_learn = Trainer(\n",
|
|
" solver=pinn_learn, # setting the solver, i.e. PINN\n",
|
|
" max_epochs=1000, # setting max epochs in training\n",
|
|
" accelerator=\"cpu\", # we train on cpu, also other are available\n",
|
|
" enable_model_summary=False, # model summary statistics not printed\n",
|
|
" train_size=0.8, # set train size\n",
|
|
" val_size=0.0, # set validation size\n",
|
|
" test_size=0.2, # set testing size\n",
|
|
" shuffle=True, # shuffle the data\n",
|
|
")\n",
|
|
"# train\n",
|
|
"trainer_learn.train()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "150b3e62",
|
|
"metadata": {},
|
|
"source": [
|
|
"In such a way, the model is able to reach a very high accuracy!\n",
|
|
"Of course, this is a toy problem for understanding the usage of extra features: similar precision could be obtained if the extra features are very similar to the true solution. The analyzed Poisson problem shows a forcing term very close to the solution, resulting in a perfect problem to address with such an approach."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "8c64fcb4",
|
|
"metadata": {},
|
|
"source": [
|
|
"We conclude here by showing the test error for the analysed methodologies: the standard PINN, PINN with extra features, and PINN with learnable extra features."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"id": "a04e8a5d",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"PINN\n",
|
|
"Testing DataLoader 0: 100%|██████████| 1/1 [00:00<00:00, 77.71it/s] \n",
|
|
"────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
|
|
" Test metric DataLoader 0\n",
|
|
"────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
|
|
" test_loss 0.27009159326553345\n",
|
|
"────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
|
|
"PINN with extra features\n",
|
|
"Testing DataLoader 0: 100%|██████████| 1/1 [00:00<00:00, 111.93it/s]\n",
|
|
"────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
|
|
" Test metric DataLoader 0\n",
|
|
"────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
|
|
" test_loss 0.0012132360134273767\n",
|
|
"────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
|
|
"PINN with learnable extra features\n",
|
|
"Testing DataLoader 0: 100%|██████████| 1/1 [00:00<00:00, 155.77it/s]\n",
|
|
"────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
|
|
" Test metric DataLoader 0\n",
|
|
"────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
|
|
" test_loss 2.0213873977437125e-11\n",
|
|
"────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# test error base pinn\n",
|
|
"print('PINN')\n",
|
|
"trainer_base.test()\n",
|
|
"# test error extra features pinn\n",
|
|
"print(\"PINN with extra features\")\n",
|
|
"trainer_feat.test()\n",
|
|
"# test error learnable extra features pinn\n",
|
|
"print(\"PINN with learnable extra features\")\n",
|
|
"_=trainer_learn.test()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "0a4c8895",
|
|
"metadata": {},
|
|
"source": [
|
|
"## What's next?\n",
|
|
"\n",
|
|
"Congratulations on completing the two dimensional Poisson tutorial of **PINA**! There are multiple directions you can go now:\n",
|
|
"\n",
|
|
"1. Train the network for longer or with different layer sizes and assert the finaly accuracy\n",
|
|
"\n",
|
|
"2. Propose new types of extrafeatures and see how they affect the learning\n",
|
|
"\n",
|
|
"3. Exploit extrafeature training in more complex problems\n",
|
|
"\n",
|
|
"4. Many more..."
|
|
]
|
|
}
|
|
],
|
|
"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
|
|
}
|