{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# unit 1.8 - Learning curve fitting\n", "\n", "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://githubtocolab.com/culurciello/deep-learning-course-source/blob/main/source/lectures/18-curve-fit.ipynb)\n", "\n", "In this example we try to find a polynomial to fit a formula - like a Taylor expansion.\n", "\n", "let us try to learn a function of the form $y = a + b * x + c * x^2 + d * x^3 + e * x^4$\n", "\n", "Inspired by [this example](https://vamsibrp.github.io/pytorch-learning-tutorial/)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1000 0.09462868422269821\n", "2000 0.00916474498808384\n", "3000 0.00023628646158613265\n", "4000 1.2055928664267412e-06\n", "5000 3.0542799400734566e-09\n", "6000 8.613838808901875e-12\n", "7000 3.0131630697483036e-12\n", "8000 1.0251710504810552e-12\n", "9000 3.58078014938909e-13\n", "10000 1.2057909737957923e-13\n" ] } ], "source": [ "import numpy as np\n", "import torch\n", "import matplotlib\n", "import matplotlib.pyplot as plt\n", "import math\n", "\n", "x = torch.linspace(-math.pi, math.pi, 100) # 1000 equally spaced points between -pi and pi\n", "y = 1/2*x+1 # a simple linear function - this is the data to fit!\n", "\n", "# a 4th order polynomial: y = a + b x + c x^2 + d x^3 + e x^4\n", "p = torch.tensor([1,2,3,4]) # powers of x\n", "xx = x.unsqueeze(-1).pow(p) # x^1, x^2, x^3, x^4\n", "# we need to find the coefficients a, b, c, d, e\n", "# note: a is the bias!\n", "\n", "# defining the model that will fit the data\n", "class myModel(torch.nn.Module):\n", " def __init__(self):\n", " super(myModel, self).__init__()\n", " self.linear1 = torch.nn.Linear(p.shape[0], 1)\n", "\n", " def forward(self, x):\n", " x = self.linear1(x)\n", " x = torch.flatten(x)\n", " return x\n", " \n", "\n", "model = myModel()\n", "loss_func = torch.nn.MSELoss()\n", "optimiser = torch.optim.Adam(model.parameters())\n", "\n", "for t in range(1,10001):\n", " y_pred = model(xx)\n", " loss = loss_func(y_pred,y)\n", " if t%1000 == 0:\n", " print(t,loss.item())\n", " \n", " optimiser.zero_grad()\n", " loss.backward()\n", " optimiser.step()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "learned parameters a,b,c,d: tensor([[ 5.0000e-01, -2.8331e-07, 2.0924e-08, 2.6097e-08]]) tensor([1.0000])\n" ] }, { "data": { "image/png": "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/v37GxtOrJ7FYmHAgAHMnz+f1atXqwTdAbPZbNWvUSpCNiQuLo5NmzbRrFkzihcvTkJCAu+99x6VK1custOgu3Hy5ElatmxJ+fLlGT16NCkpKXm/CwgIMDCZdUhKSuLChQskJSWRm5vL9u3bAahSpQqenp7GhitkgwcPpnv37jRq1IiwsDDGjh1Leno6PXv2NDqaVbh8+TKHDx/O+/no0aNs376dEiVKEBwcbGAy4/Xr148ZM2awcOFCvLy88q4r8/Hxwd3d3eB0xhs6dCht27YlODiYS5cuMWPGDFavXs3y5cuNjnZzFrEZO3futLRq1cpSokQJi6urq6VChQqWl156yXLixAmjo1mFyZMnW4Ab3sRi6d69+w3PzZ9//ml0NEOMGzfOEhwcbHFxcbGEhYVZNm7caHQkq/Hnn3/e8O9K9+7djY5muJv9GzN58mSjo1mFXr16WcqXL29xcXGx+Pn5WR588EHLihUrjI51S7pGSEREROxW0b6AQkREROQWVIRERETEbqkIiYiIiN1SERIRERG7pSIkIiIidktFSEREROyWipCIiIjYLRUhERERsVsqQiIiImK3VIRERETEbqkIiYhdSUlJISAggI8//jhv24YNG3BxcWHVqlUGJhMRI+i7xkTE7ixdupSYmBg2bNhA9erVCQkJoUOHDnz++edGRxORQqYiJCJ2qV+/fvz+++80atSIXbt2sWnTJlxdXY2OJSKFTEVIROzS1atXqVOnDsePH2fLli3UrVvX6EgiYgBdIyQidikhIYFTp05hNptJTEw0Oo6IGEQTIRGxO1lZWYSFhRESEkL16tUZO3Ysu3btwt/f3+hoIlLIVIRExO688cYbzJkzhx07duDp6UlUVBQ+Pj4sWbLE6GgiUsi0NCYidmX16tWMHTuWadOm4e3tjYODA9OmTeOvv/5iwoQJRscTkUKmiZCIiIjYLU2ERERExG6pCImIiIjdUhESERERu6UiJCIiInZLRUhERETsloqQiIiI2C0VIREREbFbKkIiIiJit1SERERExG6pCImIiIjdUhESERERu6UiJCIiInbrfwBikWKxu8Wa5wAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "abcd = model.linear1.weight.detach()\n", "bias = model.linear1.bias.detach()\n", "print(\"learned parameters b,c,d,e,a:\", abcd, bias)\n", "\n", "y_pred = (xx*abcd).sum(1).add(bias) # predictor function\n", "plt.plot(x, y, x, y_pred, 'r-.')\n", "plt.title('data to fit')\n", "plt.xlabel('x')\n", "plt.ylabel('y')\n", "plt.legend(['data', 'fit'])\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "it found coefficient of the polynomial $y = a + b * x + c * x^2 + d * x^3 + e * x^4$\n", "\n", "In this case b = 0.5, rest are 0\n", "The bias was 1, so a = 1\n", "\n", "This is basically a model of the line: $y = 1 + 0.5*x$\n", "\n", "## next step\n", "\n", "Now we can do the same thing but for a more complex nonlinear function - sin(x)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1000 0.2571175694465637\n", "2000 0.0643572136759758\n", "3000 0.020802780985832214\n", "4000 0.012529169209301472\n", "5000 0.008727134205400944\n", "6000 0.006091308780014515\n", "7000 0.00497552752494812\n", "8000 0.004766870755702257\n", "9000 0.004755954258143902\n", "10000 0.004755879752337933\n" ] } ], "source": [ "import numpy as np\n", "import torch\n", "import matplotlib\n", "import matplotlib.pyplot as plt\n", "import math\n", "\n", "x = torch.linspace(-math.pi, math.pi, 100) # 100 equally spaced points between -pi and pi\n", "y = torch.sin(x) # this is the data to fit!\n", "\n", "# a 4th order polynomial: y = a + b x + c x^2 + d x^3 + e x^4\n", "p = torch.tensor([1,2,3,4]) # powers of x\n", "xx = x.unsqueeze(-1).pow(p) # x^1, x^2, x^3, x^4\n", "# we need to find the coefficients a, b, c, d\n", "\n", "# defining the model that will fit the data\n", "class myModel(torch.nn.Module):\n", " def __init__(self):\n", " super(myModel, self).__init__()\n", " self.linear1 = torch.nn.Linear(p.shape[0], 1)\n", "\n", " def forward(self, x):\n", " x = self.linear1(x)\n", " x = torch.flatten(x)\n", " return x\n", "\n", "# training the model\n", "model = myModel()\n", "loss_func = torch.nn.MSELoss()\n", "optimiser = torch.optim.Adam(model.parameters())\n", "\n", "for t in range(1,10001):\n", " y_pred = model(xx)\n", " loss = loss_func(y_pred,y)\n", " if t%1000 == 0:\n", " print(t,loss.item())\n", " \n", " optimiser.zero_grad()\n", " loss.backward()\n", " optimiser.step()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "learned parameters a,b,c,d: tensor([[ 8.5221e-01, -4.7944e-06, -9.2267e-02, 4.9948e-07]]) tensor([6.4763e-06])\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "abcd = model.linear1.weight.detach()\n", "bias = model.linear1.bias.detach()\n", "print(\"learned parameters a,b,c,d:\", abcd, bias)\n", "\n", "y_pred = (xx*abcd).sum(1).add(bias) # predictor function\n", "plt.plot(x, y, x, y_pred, 'r-.')\n", "plt.title('data to fit')\n", "plt.xlabel('x')\n", "plt.ylabel('y')\n", "plt.legend(['data', 'fit'])\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.13" } }, "nbformat": 4, "nbformat_minor": 2 }