diff --git a/examples/Install-Guide/Installation_Test.ipynb b/examples/Install-Guide/Installation_Test.ipynb deleted file mode 100644 index e0ad9250..00000000 --- a/examples/Install-Guide/Installation_Test.ipynb +++ /dev/null @@ -1,226 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "d46e38ec-574b-471e-ad6e-4477e4a27a8c", - "metadata": {}, - "source": [ - "The only purpose of this notebook is to quickly test whether the installation of TorchPhysics has been succesful. For that, the following simple ODE will be solved\n", - "$$\n", - " \\begin{cases}\n", - " f'(t) &= f(t) &&\\text{ for } t\\in [0,1], \\\\\n", - " f(0) &= 1.\n", - " \\end{cases}\n", - "$$\n", - "There will be no code documentation below, as this will be part of the workshop. Please run all cells below. A plot of the true solution $f(t) = e^t$ as well as the predicition of some trained neural network should appear in the last cell if the installation of TorchPhysics was succesful." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "b8e26426-9ab2-401a-af8e-5cbe47077821", - "metadata": {}, - "outputs": [], - "source": [ - "import torchphysics as tp\n", - "import numpy as np\n", - "import torch\n", - "from matplotlib import pyplot as plt\n", - "\n", - "import pytorch_lightning as pl" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "fcc54b3b-f385-435d-a28a-ab71a8706a5f", - "metadata": {}, - "outputs": [], - "source": [ - "T = tp.spaces.R1('t')\n", - "F = tp.spaces.R1('f')\n", - "\n", - "T_dom = tp.domains.Interval(T, 0, 1)\n", - "\n", - "sampler_pde_condition = tp.samplers.RandomUniformSampler(T_dom, 200)\n", - "sampler_initial_condition = tp.samplers.RandomUniformSampler(T_dom.boundary_left, 1)\n", - "\n", - "def res_pde_condition(f, t):\n", - " return f - tp.utils.grad(f, t)\n", - "\n", - "def res_initial_condition(f):\n", - " return f - 1\n", - "\n", - "model = tp.models.FCN(T, F, (20,20))\n", - "\n", - "pde_condition = tp.conditions.PINNCondition(model, sampler_pde_condition, res_pde_condition)\n", - "initial_condition = tp.conditions.PINNCondition(model, sampler_initial_condition, res_initial_condition) " - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "f612c8b1-6e08-4718-8445-0c8b5a4f000d", - "metadata": {}, - "outputs": [], - "source": [ - "optim = tp.OptimizerSetting(optimizer_class=torch.optim.Adam, lr=0.01)\n", - "\n", - "solver = tp.solver.Solver([pde_condition, initial_condition], optimizer_setting=optim)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "f649a418-324e-4f1b-a233-fbb71786d647", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "GPU available: False, used: False\n", - "TPU available: False, using: 0 TPU cores\n", - "IPU available: False, using: 0 IPUs\n", - "HPU available: False, using: 0 HPUs\n", - "C:\\Users\\s_e8mv8u\\miniconda3\\envs\\torchphysics_workshop\\lib\\site-packages\\pytorch_lightning\\callbacks\\model_checkpoint.py:613: UserWarning: Checkpoint directory C:\\Users\\s_e8mv8u\\Documents\\TorchPhysics Course\\checkpoints exists and is not empty.\n", - " rank_zero_warn(f\"Checkpoint directory {dirpath} exists and is not empty.\")\n", - "\n", - " | Name | Type | Params\n", - "------------------------------------------------\n", - "0 | train_conditions | ModuleList | 481 \n", - "1 | val_conditions | ModuleList | 0 \n", - "------------------------------------------------\n", - "481 Trainable params\n", - "0 Non-trainable params\n", - "481 Total params\n", - "0.002 Total estimated model params size (MB)\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Sanity Checking: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\s_e8mv8u\\miniconda3\\envs\\torchphysics_workshop\\lib\\site-packages\\pytorch_lightning\\trainer\\connectors\\data_connector.py:224: PossibleUserWarning: The dataloader, val_dataloader 0, does not have many workers which may be a bottleneck. Consider increasing the value of the `num_workers` argument` (try 8 which is the number of cpus on this machine) in the `DataLoader` init to improve performance.\n", - " rank_zero_warn(\n", - "C:\\Users\\s_e8mv8u\\miniconda3\\envs\\torchphysics_workshop\\lib\\site-packages\\pytorch_lightning\\trainer\\connectors\\data_connector.py:224: PossibleUserWarning: The dataloader, train_dataloader, does not have many workers which may be a bottleneck. Consider increasing the value of the `num_workers` argument` (try 8 which is the number of cpus on this machine) in the `DataLoader` init to improve performance.\n", - " rank_zero_warn(\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "107e290af95e4ae993c7312a40ca9c8a", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Training: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Validation: 0it [00:00, ?it/s]" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "`Trainer.fit` stopped: `max_steps=250` reached.\n" - ] - } - ], - "source": [ - "trainer = pl.Trainer(max_steps=250, # number of training steps\n", - " logger=False,\n", - " benchmark=True)\n", - "\n", - "trainer.fit(solver) # start training" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "d41b57ae-ebd1-4ee6-bc02-1c3ab96b4c2e", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "ts = torch.linspace(0, 1, 100)\n", - "points = tp.spaces.Points(ts.reshape(len(ts), 1), T)\n", - "output_NN = model(points).as_tensor.detach()\n", - "\n", - "plt.plot(ts.numpy(), output_NN.numpy(), label='output of the trained neural network')\n", - "plt.plot(ts.numpy(), np.exp(ts), label='true solution of the ODE')\n", - "plt.legend()\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "581cd5aa-3aa8-4039-9a83-96b6488c337c", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "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.10.9" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/examples/Install-Guide/installation_guide.pdf b/examples/Install-Guide/installation_guide.pdf deleted file mode 100644 index 9674d099..00000000 Binary files a/examples/Install-Guide/installation_guide.pdf and /dev/null differ