From 15853e15252dcfb405ceefcb891cab1d9b87f0fc Mon Sep 17 00:00:00 2001 From: Prakhar Sharma <1915438@swansea.ac.uk> Date: Mon, 11 Mar 2024 17:43:27 +0000 Subject: [PATCH] NN refactor --- DeepINN/config.py | 4 + DeepINN/model.py | 8 +- DeepINN/nn/FCNN.py | 6 +- DeepINN/nn/base.py | 5 +- Tutorials/5. FCNN/3. model.ipynb | 28 +- .../6. 2D heat conduction/1. model.ipynb | 404 ++++++++++++++++++ 6 files changed, 432 insertions(+), 23 deletions(-) create mode 100644 Tutorials/6. 2D heat conduction/1. model.ipynb diff --git a/DeepINN/config.py b/DeepINN/config.py index e2a694e..1f9330d 100644 --- a/DeepINN/config.py +++ b/DeepINN/config.py @@ -11,6 +11,10 @@ def __init__(self, float_type=torch.float32, random_seed=42, device = 'cuda'): self.device = device # Add more configuration parameters as needed + self.apply_seeds() + self.apply_float_type() + self.default_device() + def apply_seeds(self): torch.manual_seed(self.random_seed) diff --git a/DeepINN/model.py b/DeepINN/model.py index 3faf280..091c57c 100644 --- a/DeepINN/model.py +++ b/DeepINN/model.py @@ -52,9 +52,9 @@ def initialise_training(self, iterations : int = None): self.training_history = [] # Initialize an empty list for storing loss values self.iterations = iterations # Load all the seeds, data types, devices etc. - self.config.apply_seeds() - self.config.apply_float_type() - self.config.default_device() + # self.config.apply_seeds() + # self.config.apply_float_type() + # self.config.default_device() # In 1D problem we need to combine the BCs as there is only one point for each BC, which returns an undefined feature scaling because the ub and lb are same in the denominator, so we get infinity # For problem with multiple points on each boundary, we don't need to combine them. @@ -74,7 +74,7 @@ def train(self, iterations : int = None, display_every : int = 1): """ self.initialise_training(iterations) self.trainer() - + @timer def trainer(self): # implement training loop diff --git a/DeepINN/nn/FCNN.py b/DeepINN/nn/FCNN.py index be354e9..a87d58c 100644 --- a/DeepINN/nn/FCNN.py +++ b/DeepINN/nn/FCNN.py @@ -1,7 +1,7 @@ import torch from .base import BaseNetwork -class FullyConnected(BaseNetwork, torch.nn.Module): +class FullyConnected(BaseNetwork): """ Implementation of Fully Connected neural network """ @@ -28,10 +28,10 @@ def __init__(self, self.linears = torch.nn.ModuleList([torch.nn.Linear(self.layer_size[i], self.layer_size[i+1]) for i in range(0,len(self.layer_size)-1)]) # initialise the weights - self.init() + self.weight_init() - def init(self): + def weight_init(self): # weight initialisation for i in range(len(self.layer_size)-1): diff --git a/DeepINN/nn/base.py b/DeepINN/nn/base.py index 682bb62..30a962a 100644 --- a/DeepINN/nn/base.py +++ b/DeepINN/nn/base.py @@ -1,12 +1,13 @@ from abc import ABC, abstractmethod from .utils import activation, initialiser +import torch -class BaseNetwork(): +class BaseNetwork(torch.nn.Module): """ Base class for all neural networks """ def __init__(self) -> None: - super().__init__() # intialise all methods from nn.Module + super().__init__() # initialise all methods from nn.Module self.activation_function = activation self.initialiser_function = initialiser diff --git a/Tutorials/5. FCNN/3. model.ipynb b/Tutorials/5. FCNN/3. model.ipynb index 85416dd..6ceb093 100644 --- a/Tutorials/5. FCNN/3. model.ipynb +++ b/Tutorials/5. FCNN/3. model.ipynb @@ -198,19 +198,19 @@ "name": "stdout", "output_type": "stream", "text": [ - "Iteration: 1 \t BC Loss: 0.4354\t PDE Loss: 0.0000 \t Loss: 0.4354\n", - "Iteration: 51 \t BC Loss: 0.2866\t PDE Loss: 0.0000 \t Loss: 0.2866\n", - "Iteration: 101 \t BC Loss: 0.1963\t PDE Loss: 0.0000 \t Loss: 0.1963\n", - "Iteration: 151 \t BC Loss: 0.1437\t PDE Loss: 0.0000 \t Loss: 0.1437\n", - "Iteration: 201 \t BC Loss: 0.1102\t PDE Loss: 0.0000 \t Loss: 0.1102\n", - "Iteration: 251 \t BC Loss: 0.0852\t PDE Loss: 0.0000 \t Loss: 0.0852\n", - "Iteration: 301 \t BC Loss: 0.0650\t PDE Loss: 0.0000 \t Loss: 0.0650\n", - "Iteration: 351 \t BC Loss: 0.0485\t PDE Loss: 0.0000 \t Loss: 0.0485\n", - "Iteration: 401 \t BC Loss: 0.0352\t PDE Loss: 0.0000 \t Loss: 0.0352\n", - "Iteration: 451 \t BC Loss: 0.0249\t PDE Loss: 0.0000 \t Loss: 0.0249\n", - "Iteration: 501 \t BC Loss: 0.0172\t PDE Loss: 0.0000 \t Loss: 0.0172\n", + "Iteration: 1 \t BC Loss: 1.1904\t PDE Loss: 0.0000 \t Loss: 1.1904\n", + "Iteration: 51 \t BC Loss: 0.8801\t PDE Loss: 0.0000 \t Loss: 0.8801\n", + "Iteration: 101 \t BC Loss: 0.6463\t PDE Loss: 0.0000 \t Loss: 0.6463\n", + "Iteration: 151 \t BC Loss: 0.4837\t PDE Loss: 0.0000 \t Loss: 0.4837\n", + "Iteration: 201 \t BC Loss: 0.3789\t PDE Loss: 0.0000 \t Loss: 0.3789\n", + "Iteration: 251 \t BC Loss: 0.3130\t PDE Loss: 0.0000 \t Loss: 0.3130\n", + "Iteration: 301 \t BC Loss: 0.2686\t PDE Loss: 0.0000 \t Loss: 0.2686\n", + "Iteration: 351 \t BC Loss: 0.2344\t PDE Loss: 0.0000 \t Loss: 0.2344\n", + "Iteration: 401 \t BC Loss: 0.2047\t PDE Loss: 0.0000 \t Loss: 0.2047\n", + "Iteration: 451 \t BC Loss: 0.1773\t PDE Loss: 0.0000 \t Loss: 0.1773\n", + "Iteration: 501 \t BC Loss: 0.1516\t PDE Loss: 0.0000 \t Loss: 0.1516\n", "Training finished\n", - "Time taken: 'trainer' in 4.2741 secs\n" + "Time taken: 'trainer' in 3.2072 secs\n" ] } ], @@ -289,7 +289,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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dpu3LkvRoSW0XV/PeiwAkAYILHA2v19qaJCKiiLbvV6znXVYACAtsHAcnM/vlyoqWOkWANIYgQXpwe2WyspSPQsAQJJwSggAANgegQUAANgegQUAANgegQUAANgegQUAANgegQUAANgegQUAANge67DAesFg9CJvAACcA4EF1goEpOpqqb39bJvXaz4TiJVpAQDD4JQQrBMISJWVkWFFkjo6pIULUzMnAIAjEFhgjWDQPLJiGNH7BrcFg9bNCQDgGAQWWKO5OfrIymCh0NLSYs18AACOQmCBNTo7R9avqyu58wAAOBKBBdbweEbWr7AwufMAADgSgQXWKC017wZyuWLvD7WXlFg3JwCAYxBYYA2327x1WYoOLYO3ubUZABADgQXW8fulhgapqCiy3euVfv7z1MwJAOAILBwHa/n9UkVF9Eq3AwPS1q2pnh0AwKYILLCe2y2VlUW2DQykZCoAAGfglBAAALA9AgsAALA9AgsAALA9AgsAALA9AgsAALA9AgsAALA9AgsAALA9AgsAALA9Fo7D8ILB6BVpedYPACAFCCyILRCQqqul9vazbV6v+QBDvz918wIAjEmcEkK0QECqrIwMK5LU0WG2BwKpmRcAYMwisCBSMGgeWTGM6H2htpoasx8AABYhsCBSc3P0kZXBDENqazP7AQBgkVEFlnXr1qm4uFg5OTmaNWuW9uzZM6L3bd68WS6XS7fffntE+z333COXyxXxuvnmm0czNZyvzs7E9gMAIAHiDiwvv/yyamtrVVdXp3379umaa67RvHnz9MEHH5zzfUePHtUPfvADlZaWxtx/8803q7OzM/x66aWX4p0aEsHjSWw/AAASIO7AsnbtWi1evFiLFi3StGnTtH79euXm5mrjxo3DvicYDOrOO+/UypUrNXny5Jh9srOzVVhYGH5NmDAh3qkhEUpLzbuBXK7Y+10uyecz+wEAYJG4bmvu6+vT3r17tXz58nBbRkaGysvL1dLSMuz7Vq1apYkTJ+ree+9V8zDXPjQ1NWnixImaMGGCvvWtb+nxxx/Xn/3Zn8Xs29vbq97e3vB2T0+PJKm/v1/9/f3xfKSvFBov0ePa2nPPSQsXmt8Pvvg2FGLq66WBAfOVIGOyzilAna1Dra1Bna2RrDrHM15cgeXEiRMKBoMqKCiIaC8oKNC7774b8z27du3S888/r/379w87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H/3IyMzMNN566y2LZ+4s8dZ5wYIFxrp164w333zTOHDggHHPPfcYF154odHe3m7xzJ0l3jqHHDlyxCgqKjJKS0uNiooKaybrYPHWube317j22muNW265xdi1a5dx5MgRo6mpydi/f7/FM3eeeGv9i1/8wsjOzjZ+8YtfGEeOHDG2b99ueDwe48EHH7R45s6xdetW49FHHzUCgYAhyfjlL395zv6HDx82cnNzjdraWuOdd94xfvKTnxhut9vYtm1bUuc55gPLddddZyxdujS8HQwGjUmTJhlr1qyJ2f973/ueceutt0a0zZo1y/i7v/u7pM7T6eKt81BffvmlMX78eGPTpk3JmmJaGE2dv/zyS+P66683/v3f/924++67CSwjEG+d//Vf/9WYPHmy0dfXZ9UU00a8tV66dKnxrW99K6KttrbWmD17dlLnmS5GElgeeugh46qrropomz9/vjFv3rwkzswwxvQpob6+Pu3du1fl5eXhtoyMDJWXl6ulpSXme1paWiL6S9K8efOG7Y/R1XmoM2fOqL+/X3/6p3+arGk63mjrvGrVKk2cOFH33nuvFdN0vNHU+dVXX1VJSYmWLl2qgoICff3rX9cTTzyhYDBo1bQdaTS1vv7667V3797waaPDhw9r69atuuWWWyyZ81iQqr+DafHww9E6ceKEgsGgCgoKItoLCgr07rvvxnxPV1dXzP5dXV1Jm6fTjabOQy1btkyTJk2K+pcEZ42mzrt27dLzzz+v/fv3WzDD9DCaOh8+fFi/+c1vdOedd2rr1q1qbW3VAw88oP7+ftXV1VkxbUcaTa0XLFigEydO6IYbbpBhGPryyy/193//93rkkUesmPKYMNzfwZ6eHn3++ecaN25cUn7umD7CAmd48skntXnzZv3yl79UTk5OqqeTNk6dOqWFCxdqw4YNys/PT/V00trAwIAmTpyon/70p5o5c6bmz5+vRx99VOvXr0/11NJOU1OTnnjiCf3Lv/yL9u3bp0AgoC1btmj16tWpnhrO05g+wpKfny+3263u7u6I9u7ubhUWFsZ8T2FhYVz9Mbo6hzzzzDN68skn9etf/1rTp09P5jQdL946Hzp0SEePHtVtt90WbhsYGJAkXXDBBTp48KCmTJmS3Ek70Gh+nz0ejzIzM+V2u8NtV155pbq6utTX16esrKykztmpRlPrH//4x1q4cKHuu+8+SdLVV1+t06dP6/7779ejjz6qjAz+P/18Dfd3MC8vL2lHV6QxfoQlKytLM2fOVGNjY7htYGBAjY2NKikpifmekpKSiP6StHPnzmH7Y3R1lqSnnnpKq1ev1rZt23TttddaMVVHi7fOV1xxhd566y3t378//Prud7+rm266Sfv375fP57Ny+o4xmt/n2bNnq7W1NRwIJem9996Tx+MhrJzDaGp95syZqFASCooGj85LiJT9HUzqJb0OsHnzZiM7O9t44YUXjHfeece4//77jYsuusjo6uoyDMMwFi5caDz88MPh/r///e+NCy64wHjmmWeMAwcOGHV1ddzWPALx1vnJJ580srKyjIaGBqOzszP8OnXqVKo+giPEW+ehuEtoZOKt87Fjx4zx48cbVVVVxsGDB43/+Z//MSZOnGg8/vjjqfoIjhFvrevq6ozx48cbL730knH48GFjx44dxpQpU4zvfe97qfoItnfq1CnjzTffNN58801DkrF27VrjzTffNN5//33DMAzj4YcfNhYuXBjuH7qt+Yc//KFx4MABY926ddzWbJWf/OQnxte+9jUjKyvLuO6664zXX389vO/GG2807r777oj+//mf/2lMnTrVyMrKMq666ipjy5YtFs/YmeKp8yWXXGJIinrV1dVZP3GHiff3eTACy8jFW+fdu3cbs2bNMrKzs43Jkycb//iP/2h8+eWXFs/ameKpdX9/v/HYY48ZU6ZMMXJycgyfz2c88MADxieffGL9xB3it7/9bcz/3obqevfddxs33nhj1HtmzJhhZGVlGZMnTzZ+9rOfJX2eLsPgGBkAALC3MX0NCwAAcAYCCwAAsD0CCwAAsD0CCwAAsD0CCwAAsD0CCwAAsD0CCwAAsD0CCwAAsD0CCwAAsD0CCwAAsD0CCwAAsD0CCwAAsL3/B2RlpZqjVnCpAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -322,7 +322,7 @@ }, { "data": { - "image/png": "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WSyWZkdycrLzusu1s4FztmDBAsPX19d4+eWXje3btxu33nqrER4ebhQVFZldmttYvHixcf/99xvvvfeeIclYuHBhs+uPP/64ERYWZrz//vvG5s2bjWuuucbo1auXceLECec9l19+uZGSkmJ89dVXxurVq42kpCRjypQpHfxNXNv48eONV155xdi2bZuxadMm48orrzR69OhhVFVVOe+57bbbjISEBCMrK8vYsGGDcd555xmjR492Xm9sbDQGDx5sZGZmGhs3bjQWL15sREZGGjNnzjTjK7mkDz/80Pj444+NPXv2GLt37zb++Mc/Gj4+Psa2bdsMw6CN28O6deuMxMREY+jQocY999zjPE9bt41Zs2YZgwYNMgoLC53H0aNHndddrZ0JN21g1KhRxp133un8s91uN+Li4ozZs2ebWJX7+m64cTgcRmxsrPG3v/3Nea6srMzw8/Mz/vvf/xqGYRg7duwwJBnr16933vPJJ58YFovFOHz4cIfV7m6Ki4sNScaqVasMw2hqVx8fH+Ptt9923rNz505DkpGdnW0YRlMQtVqths1mc97z/PPPG6GhoUZdXV3HfgE3EhERYfzzn/+kjdtBZWWl0bdvX2PZsmXG2LFjneGGtm47s2bNMlJSUk57zRXbmW6pc1RfX6+cnBxlZmY6z1mtVmVmZio7O9vEyjzHgQMHZLPZmrVxWFiY0tPTnW2cnZ2t8PBwjRgxwnlPZmamrFar1q5d2+E1u4vy8nJJUpcuXSRJOTk5amhoaNbWycnJ6tGjR7O2HjJkiHP/N0kaP368KioqtH379g6s3j3Y7XYtWLBA1dXVysjIoI3bwZ133qkJEyY0a1OJf89tbe/evYqLi1Pv3r11ww03KD8/X5JrtrPpG2e6u5KSEtnt9mZ/YZIUExOjXbt2mVSVZ7HZbJJ02jY+dc1msyk6OrrZdW9vb3Xp0sV5D5pzOByaPn26zj//fOfGszabTb6+vgoPD29273fb+nR/F6euocnWrVuVkZGh2tpaBQcHa+HChRo4cKA2bdpEG7ehBQsWKDc3V+vXr//eNf49t5309HS9+uqr6t+/vwoLC/Xwww/rwgsv1LZt21yynQk3QCd15513atu2bVqzZo3ZpXik/v37a9OmTSovL9c777yjm266SatWrTK7LI9SUFCge+65R8uWLZO/v7/Z5Xi0K664wvn7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b9+uxMREJSUlNTu+G2i+LScnRw6HQ0899ZTOO+889evXT0eOHPnRz/uuAQMGqKCgQAUFBc5zO3bsUFlZmQYOHHjG381isej888/Xww8/rI0bN8rX11cLFy4849cDaB+EGwDtKjExUWvXrlVeXp5KSkrkcDh05513qrS0VFOmTNH69eu1b98+ffrpp5o2bVqLwSQpKUkNDQ2aO3eu9u/frzfeeMM50Pjbn1dVVaWsrCyVlJSctrsqMzNTQ4YM0Q033KDc3FytW7dOU6dO1dixYzVixIgz+l5r167VY489pg0bNig/P1/vvfeejh49qgEDBpxdAwFoc4QbAO3q3nvvlZeXlwYOHKioqCjl5+crLi5OX3zxhex2uy677DINGTJE06dPV3h4uKzWH/7PUkpKip5++mn99a9/1eDBg/Xvf/9bs2fPbnbP6NGjddttt2ny5MmKior63oBkqemJywcffKCIiAiNGTNGmZmZ6t27t958880z/l6hoaH6/PPPdeWVV6pfv37605/+pKeeekpXXHHFmTcOgHZhMZi3CAAAPAhPbgAAgEch3AAAAI9CuAEAAB6FcAMAADwK4QYAAHgUwg0AAPAohBsAAOBRCDcAAMCjEG4AAIBHIdwAAACPQrgBAAAe5f8DiN6PiryAMWoAAAAASUVORK5CYII=", + "image/png": "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Xz9NmzbNse3tt99WdHS0du/erS5dukiSOnfurOeff77W7/nz8TuxsbH6+9//rgkTJui1116Tt7e3AgMDZbFYan3eLyUnJ2vr1q06cOCAoqOjJUnvv/++evbsqXXr1mngwIGSakrQu+++q4CAAEnSzTffrOTkZD3zzDPKyspSVVWVrr32WsXExEiSevfufR5nC0BD4coNgCa3efNmff/99/L393e8unXrJqnmaskp8fHxpx27ePFiXXbZZYqKilJAQIBuvvlmHT16VGVlZWf8+ampqYqOjnYUG0nq0aOHgoKClJqa6tgWGxvrKDaSFBERodzcXElSXFycLrvsMvXu3Vt//OMf9eabb+rYsWNnfhIANBrKDYAmV1JSotGjRyslJaXWa8+ePbrooosc+7Vs2bLWcWlpafrd736nPn366L///a82bNigWbNmSaoZcNzQvLy8av3aYrHIbrdLkjw8PLRo0SJ9++236tGjh1599VV17dpVBw4caPAcAM4O5QZAo/L29lZ1dXWtbf3799f27dsVGxurTp061Xr9stD83IYNG2S32/Xiiy9q8ODB6tKlizIzM3/z836pe/fuysjIUEZGhmPbjh07VFBQoB49epzxd7NYLBo6dKieeuopbdq0Sd7e3po7d+4ZHw+gcVBuADSq2NhYrVmzRmlpacrLy5PdbtfEiROVn5+v66+/XuvWrdO+ffu0cOFCjR8/vt5i0qlTJ1VWVurVV1/V/v379cEHHzgGGv/880pKSpScnKy8vLw6b1clJSWpd+/euvHGG7Vx40atXbtW48aN08UXX6wBAwac0fdas2aNpk2bpvXr1ys9PV1ffPGFjhw5ou7du5/dCQLQ4Cg3ABrVQw89JA8PD/Xo0UNt2rRRenq6IiMjtWrVKlVXV2v48OHq3bu3Jk2apKCgIFmtv/7XUlxcnF566SU999xz6tWrlz788ENNnz691j5DhgzRhAkTNHbsWLVp0+a0AclSzRWXL7/8UsHBwbrooouUlJSkDh066JNPPjnj72Wz2bR8+XJdeeWV6tKlix577DG9+OKLGjly5JmfHACNwmLw3CIAAHAjXLkBAABuhXIDAADcCuUGAAC4FcoNAABwK5QbAADgVig3AADArVBuAACAW6HcAAAAt0K5AQAAboVyAwAA3ArlBgAAuJX/D+szUHOYAt76AAAAAElFTkSuQmCC", "text/plain": [ "
" ] diff --git a/Tutorials/6. 2D heat conduction/1. model.ipynb b/Tutorials/6. 2D heat conduction/1. model.ipynb new file mode 100644 index 0000000..e727a90 --- /dev/null +++ b/Tutorials/6. 2D heat conduction/1. model.ipynb @@ -0,0 +1,404 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# FCNN training" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using default backend: PyTorch\n", + "Using Pytorch: 2.0.1+cu117\n" + ] + } + ], + "source": [ + "# This is only valid when the package is not installed\n", + "import sys\n", + "sys.path.append('../../') # two folders up\n", + "import DeepINN as dp\n", + "import torch" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Geometry" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# A simple 1D geometry\n", + "X = dp.spaces.R2('x')\n", + "Rect = dp.domains.Parallelogram(X, [0,0], [1,0], [0,1]) # unit square" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "left_bc = dp.constraint.DirichletBC(geom = Rect,\n", + " function = lambda X: torch.tensor([0.0]),\n", + " sampling_strategy = \"grid\",\n", + " no_points = 10, \n", + " filter_fn = lambda x: x[:, 0] == 0.0)\n", + "right_bc = dp.constraint.DirichletBC(geom = Rect,\n", + " function = lambda X: torch.tensor([1.0]),\n", + " sampling_strategy = \"grid\",\n", + " no_points = 10, # you can use more points. there are conditions to deal with stupid conditions. \n", + " filter_fn = lambda x: x[:, 0] == 1.0)\n", + "\n", + "interior_points = dp.constraint.PDE(geom = Rect,\n", + " sampling_strategy= \"LatinHypercube\",\n", + " no_points = 30)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dp.utils.scatter(X, interior_points.sampler_object(), dpi = 50) # collocation points\n", + "dp.utils.scatter(X, left_bc.sampler_object(), dpi = 50)\n", + "dp.utils.scatter(X, right_bc.sampler_object(), dpi = 50)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## PDE" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def laplace(X,y):\n", + " \"\"\"\n", + " 2D Laplace equation.\n", + " u__x + u__y = 0\n", + " i is always zero because output to the NN is always 1D\n", + " \"\"\"\n", + " dy_x = dp.constraint.Jacobian(X, y)(i=0, j=0)\n", + " dy_xx = dp.constraint.Jacobian(X, dy_x)(i = 0, j = 0)\n", + "\n", + " dy_y = dp.constraint.Jacobian(X, y)(i=0, j=1)\n", + " dy_yy = dp.constraint.Jacobian(X, dy_y)(i = 0, j = 1)\n", + "\n", + " return dy_xx + dy_yy" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "domain = dp.domain.Generic(laplace,\n", + " interior_points,\n", + " [left_bc, right_bc])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Network" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "activation = \"tanh\"\n", + "initialiser = \"Xavier normal\"\n", + "layer_size = [1] + [2] * 1 + [1]" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "__init__() missing 1 required positional argument: 'self'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[8], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m net \u001b[38;5;241m=\u001b[39m \u001b[43mdp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mFullyConnected\u001b[49m\u001b[43m(\u001b[49m\u001b[43mlayer_size\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mactivation\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43minitialiser\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2\u001b[0m model \u001b[38;5;241m=\u001b[39m dp\u001b[38;5;241m.\u001b[39mModel(domain, net)\n", + "File \u001b[0;32m~/Desktop/repos/DeepINN/Tutorials/6. 2D heat conduction/../../DeepINN/nn/FCNN.py:13\u001b[0m, in \u001b[0;36mFullyConnected.__init__\u001b[0;34m(self, layer_size, activation, initialiser)\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__init__\u001b[39m(\u001b[38;5;28mself\u001b[39m, \n\u001b[1;32m 9\u001b[0m layer_size : \u001b[38;5;28mlist\u001b[39m,\n\u001b[1;32m 10\u001b[0m activation : \u001b[38;5;28mstr\u001b[39m,\n\u001b[1;32m 11\u001b[0m initialiser : \u001b[38;5;28mstr\u001b[39m,\n\u001b[1;32m 12\u001b[0m ):\n\u001b[0;32m---> 13\u001b[0m \u001b[43mBaseNetwork\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[38;5;21;43m__init__\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 16\u001b[0m \u001b[38;5;66;03m# Validate the types of the attributes\u001b[39;00m\n\u001b[1;32m 17\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(layer_size, \u001b[38;5;28mlist\u001b[39m):\n", + "\u001b[0;31mTypeError\u001b[0m: __init__() missing 1 required positional argument: 'self'" + ] + } + ], + "source": [ + "net = dp.nn.FullyConnected(layer_size, activation, initialiser)\n", + "model = dp.Model(domain, net)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Domain compiled\n", + "Network compiled\n" + ] + } + ], + "source": [ + "optimiser = \"adam\"\n", + "lr=0.001\n", + "metrics=\"MSE\"\n", + "\n", + "model.compile(optimiser, lr, metrics, device = \"cuda\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(torch.optim.adam.Adam, 0.001, MSELoss())" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.optimiser_function, model.lr, model.metric" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "max(): argument 'input' (position 1) must be Tensor, not list", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[30], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mmodel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtrain\u001b[49m\u001b[43m(\u001b[49m\u001b[43miterations\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;241;43m500\u001b[39;49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Desktop/repos/DeepINN/Tutorials/6. 2D heat conduction/../../DeepINN/model.py:76\u001b[0m, in \u001b[0;36mModel.train\u001b[0;34m(self, iterations, display_every)\u001b[0m\n\u001b[1;32m 69\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"_summary_\u001b[39;00m\n\u001b[1;32m 70\u001b[0m \n\u001b[1;32m 71\u001b[0m \u001b[38;5;124;03mArgs:\u001b[39;00m\n\u001b[1;32m 72\u001b[0m \u001b[38;5;124;03m iterations (int): _description_. Number of iterations.\u001b[39;00m\n\u001b[1;32m 73\u001b[0m \u001b[38;5;124;03m display_every (int, optional): _description_. Display the loss every display_every iterations. Defaults to 1. \u001b[39;00m\n\u001b[1;32m 74\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 75\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39minitialise_training(iterations)\n\u001b[0;32m---> 76\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtrainer\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Desktop/repos/DeepINN/Tutorials/6. 2D heat conduction/../../DeepINN/utils/user_fun.py:328\u001b[0m, in \u001b[0;36mtimer..wrapper_timer\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 325\u001b[0m \u001b[38;5;129m@functools\u001b[39m\u001b[38;5;241m.\u001b[39mwraps(func)\n\u001b[1;32m 326\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapper_timer\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 327\u001b[0m start_time \u001b[38;5;241m=\u001b[39m time\u001b[38;5;241m.\u001b[39mperf_counter()\n\u001b[0;32m--> 328\u001b[0m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;66;03m# execute the decorated function\u001b[39;00m\n\u001b[1;32m 329\u001b[0m end_time \u001b[38;5;241m=\u001b[39m time\u001b[38;5;241m.\u001b[39mperf_counter()\n\u001b[1;32m 330\u001b[0m run_time \u001b[38;5;241m=\u001b[39m end_time \u001b[38;5;241m-\u001b[39m start_time\n", + "File \u001b[0;32m~/Desktop/repos/DeepINN/Tutorials/6. 2D heat conduction/../../DeepINN/model.py:83\u001b[0m, in \u001b[0;36mModel.trainer\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 78\u001b[0m \u001b[38;5;129m@timer\u001b[39m\n\u001b[1;32m 79\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mtrainer\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 80\u001b[0m \u001b[38;5;66;03m# implement training loop\u001b[39;00m\n\u001b[1;32m 81\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39miter \u001b[38;5;241m<\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39miterations:\n\u001b[0;32m---> 83\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mBC_forward \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnetwork\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mforward\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mboundary_point_sample\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 84\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mBC_loss \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmetric(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mBC_forward, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mboundary_point_labels)\n\u001b[1;32m 86\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcollocation_forward \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mnetwork\u001b[38;5;241m.\u001b[39mforward(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcollocation_point_sample)\n", + "File \u001b[0;32m~/Desktop/repos/DeepINN/Tutorials/6. 2D heat conduction/../../DeepINN/nn/FCNN.py:51\u001b[0m, in \u001b[0;36mFullyConnected.forward\u001b[0;34m(self, input)\u001b[0m\n\u001b[1;32m 45\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mforward\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;28minput\u001b[39m):\n\u001b[1;32m 46\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 47\u001b[0m \u001b[38;5;124;03m Implementation of forward for the Fully Connected network.\u001b[39;00m\n\u001b[1;32m 48\u001b[0m \u001b[38;5;124;03m All we need is the inputs tensor and rest of the things are already in the class.\u001b[39;00m\n\u001b[1;32m 49\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m---> 51\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mub \u001b[38;5;241m=\u001b[39m \u001b[43mtorch\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmax\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 52\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlb \u001b[38;5;241m=\u001b[39m torch\u001b[38;5;241m.\u001b[39mmin(\u001b[38;5;28minput\u001b[39m)\n\u001b[1;32m 54\u001b[0m \u001b[38;5;66;03m# Preprocessing input : feature scaling\u001b[39;00m\n", + "\u001b[0;31mTypeError\u001b[0m: max(): argument 'input' (position 1) must be Tensor, not list" + ] + } + ], + "source": [ + "model.train(iterations = 500)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# model.iter = 1\n", + "# model.train(iterations = 2000)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "FullyConnected(\n", + " (activation): Tanh()\n", + " (linears): ModuleList(\n", + " (0): Linear(in_features=1, out_features=2, bias=True)\n", + " (1): Linear(in_features=2, out_features=1, bias=True)\n", + " )\n", + ")" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.network" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "coordinates_list = dp.utils.tensor2numpy([model.collocation_point_sample, model.boundary_point_sample])\n", + "solution_list = dp.utils.tensor2numpy([model.collocation_forward, model.BC_forward])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "history = model.training_history" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(1)\n", + "plt.scatter(coordinates_list[0], solution_list[0], label = \"collocation points\", color = \"red\")\n", + "plt.scatter(coordinates_list[1], solution_list[1], label = \"boundary points\", color = \"blue\")\n", + "plt.grid('minor')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0, 0.5, 'Loss')" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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WSyWZkdycrLzusu1s4FztmDBAsPX19d4+eWXje3btxu33nqrER4ebhQVFZldmttYvHixcf/99xvvvfeeIclYuHBhs+uPP/64ERYWZrz//vvG5s2bjWuuucbo1auXceLECec9l19+uZGSkmJ89dVXxurVq42kpCRjypQpHfxNXNv48eONV155xdi2bZuxadMm48orrzR69OhhVFVVOe+57bbbjISEBCMrK8vYsGGDcd555xmjR492Xm9sbDQGDx5sZGZmGhs3bjQWL15sREZGGjNnzjTjK7mkDz/80Pj444+NPXv2GLt37zb++Mc/Gj4+Psa2bdsMw6CN28O6deuMxMREY+jQocY999zjPE9bt41Zs2YZgwYNMgoLC53H0aNHndddrZ0JN21g1KhRxp133un8s91uN+Li4ozZs2ebWJX7+m64cTgcRmxsrPG3v/3Nea6srMzw8/Mz/vvf/xqGYRg7duwwJBnr16933vPJJ58YFovFOHz4cIfV7m6Ki4sNScaqVasMw2hqVx8fH+Ptt9923rNz505DkpGdnW0YRlMQtVqths1mc97z/PPPG6GhoUZdXV3HfgE3EhERYfzzn/+kjdtBZWWl0bdvX2PZsmXG2LFjneGGtm47s2bNMlJSUk57zRXbmW6pc1RfX6+cnBxlZmY6z1mtVmVmZio7O9vEyjzHgQMHZLPZmrVxWFiY0tPTnW2cnZ2t8PBwjRgxwnlPZmamrFar1q5d2+E1u4vy8nJJUpcuXSRJOTk5amhoaNbWycnJ6tGjR7O2HjJkiHP/N0kaP368KioqtH379g6s3j3Y7XYtWLBA1dXVysjIoI3bwZ133qkJEyY0a1OJf89tbe/evYqLi1Pv3r11ww03KD8/X5JrtrPpG2e6u5KSEtnt9mZ/YZIUExOjXbt2mVSVZ7HZbJJ02jY+dc1msyk6OrrZdW9vb3Xp0sV5D5pzOByaPn26zj//fOfGszabTb6+vgoPD29273fb+nR/F6euocnWrVuVkZGh2tpaBQcHa+HChRo4cKA2bdpEG7ehBQsWKDc3V+vXr//eNf49t5309HS9+uqr6t+/vwoLC/Xwww/rwgsv1LZt21yynQk3QCd15513atu2bVqzZo3ZpXik/v37a9OmTSovL9c777yjm266SatWrTK7LI9SUFCge+65R8uWLZO/v7/Z5Xi0K664wvn7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b9+uxMREJSUlNTu+G2i+LScnRw6HQ0899ZTOO+889evXT0eOHPnRz/uuAQMGqKCgQAUFBc5zO3bsUFlZmQYOHHjG381isej888/Xww8/rI0bN8rX11cLFy4849cDaB+EGwDtKjExUWvXrlVeXp5KSkrkcDh05513qrS0VFOmTNH69eu1b98+ffrpp5o2bVqLwSQpKUkNDQ2aO3eu9u/frzfeeMM50Pjbn1dVVaWsrCyVlJSctrsqMzNTQ4YM0Q033KDc3FytW7dOU6dO1dixYzVixIgz+l5r167VY489pg0bNig/P1/vvfeejh49qgEDBpxdAwFoc4QbAO3q3nvvlZeXlwYOHKioqCjl5+crLi5OX3zxhex2uy677DINGTJE06dPV3h4uKzWH/7PUkpKip5++mn99a9/1eDBg/Xvf/9bs2fPbnbP6NGjddttt2ny5MmKior63oBkqemJywcffKCIiAiNGTNGmZmZ6t27t958880z/l6hoaH6/PPPdeWVV6pfv37605/+pKeeekpXXHHFmTcOgHZhMZi3CAAAPAhPbgAAgEch3AAAAI9CuAEAAB6FcAMAADwK4QYAAHgUwg0AAPAohBsAAOBRCDcAAMCjEG4AAIBHIdwAAACPQrgBAAAe5f8DiN6PiryAMWoAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(2)\n", + "plt.plot(history)\n", + "plt.xlabel(\"Iterations\")\n", + "plt.ylabel(\"Loss\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "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.16" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +}