-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMaths_DL
1 lines (1 loc) · 66.4 KB
/
Maths_DL
1
{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[],"dockerImageVersionId":30786,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n for filename in filenames:\n print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-10-29T05:40:19.334146Z","iopub.execute_input":"2024-10-29T05:40:19.334603Z","iopub.status.idle":"2024-10-29T05:40:19.815876Z","shell.execute_reply.started":"2024-10-29T05:40:19.334541Z","shell.execute_reply":"2024-10-29T05:40:19.814632Z"},"trusted":true},"execution_count":1,"outputs":[]},{"cell_type":"code","source":"from fastai.vision.all import *","metadata":{"execution":{"iopub.status.busy":"2024-10-29T05:40:20.783824Z","iopub.execute_input":"2024-10-29T05:40:20.784807Z","iopub.status.idle":"2024-10-29T05:40:29.190919Z","shell.execute_reply.started":"2024-10-29T05:40:20.784752Z","shell.execute_reply":"2024-10-29T05:40:29.189806Z"},"trusted":true},"execution_count":2,"outputs":[]},{"cell_type":"code","source":"from ipywidgets import interact\nfrom fastai.basics import *\nimport torch\nimport matplotlib.pyplot as plt\n\nplt.rc('figure', dpi=90)\n\ndef plot_function(f, title=None, min=-2.1, max=2.1, color='r', ylim=None):\n plt.figure(figsize=(8, 6))\n x = torch.linspace(min, max, 100)\n y = f(x) # Apply function to x directly\n if ylim: plt.ylim(ylim)\n plt.plot(x.numpy(), y.numpy(), color) # Convert tensors to numpy for plotting\n plt.grid(True)\n if title is not None: plt.title(title)\n plt.show()","metadata":{"execution":{"iopub.status.busy":"2024-10-29T05:40:29.193544Z","iopub.execute_input":"2024-10-29T05:40:29.194063Z","iopub.status.idle":"2024-10-29T05:40:29.203881Z","shell.execute_reply.started":"2024-10-29T05:40:29.194009Z","shell.execute_reply":"2024-10-29T05:40:29.202679Z"},"trusted":true},"execution_count":3,"outputs":[]},{"cell_type":"code","source":"def f(x): return 3*x**2 + 2*x + 1\n\nplot_function(f, \"$3x^2 + 2x + 1$\")","metadata":{"execution":{"iopub.status.busy":"2024-10-29T05:40:29.205242Z","iopub.execute_input":"2024-10-29T05:40:29.205746Z","iopub.status.idle":"2024-10-29T05:40:29.678878Z","shell.execute_reply.started":"2024-10-29T05:40:29.205681Z","shell.execute_reply":"2024-10-29T05:40:29.677680Z"},"trusted":true},"execution_count":4,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 720x540 with 1 Axes>","image/png":"iVBORw0KGgoAAAANSUhEUgAAAmQAAAHeCAYAAAA1qBcyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA3XAAAN1wFCKJt4AABHVklEQVR4nO3dd3hU1cLF4ZVGCASS0IMUpSmKCooKNsCLCBYIVQVEEBAIRRC9ooAmGJpSRIKi0vRTKbYgAkqxISIIGgt4EZUqcumBEEMyyfn+2JdglJIyyZ7ye59nnpnMnExWPAJrztln7wDHcRwBAADAmkDbAQAAAPwdhQwAAMAyChkAAIBlFDIAAADLKGQAAACWUcgAAAAso5ABAABYRiEDAACwjEIGAABgGYUMgFfYvXu3/vWvf6l+/fq67LLL9O9//1ssNALAV1DIAHiF4OBgTZw4UT/99JO+/fZbrVu3Tu+++67tWADgFhQyAEXq7bff1vXXX6/y5curZMmSuvjii5WQkKCMjIx8vU90dLQaN24sSSpRooQaNWqkPXv2uD3vW2+9pbZt2+qCCy5QeHi4rr76as2fP9/tPyc/fvnlF/Xr109XXHGFgoKC1Lx5c6t5ALhfsO0AAHzboUOHdMstt+jRRx9VZGSkNmzYoLi4OO3bt0+JiYkFes/Dhw8rKSlJK1ascHNaacqUKbrooos0depUVahQQcuWLVPXrl118OBBDR482O0/Ly82b96sZcuWqUmTJsrMzLSSAUDRCnAYhAGgmI0cOVIzZszQkSNHFBAQkK/vzcjIUOvWrXXHHXdo+PDhefqeTz/9VC1atMjTmLODBw+qQoUKuZ7r2rWr1q1bp+3bt+crq7syZWdnKzDQnNDo1KmTDh48qE8//dRtWQDYxylLAMWufPnyuU5ZfvbZZwoICNCyZctyntu+fbsqVaqkIUOG5DyXlZWlrl27qmHDhnkuY/n19zImSY0aNdLevXtzPZfXzO5wqowB8F38KQdQLLKyspSWlqYvvvhCzz//vAYMGJBzdKxZs2Zq0aKFxo4dK0lKSUnRnXfeqWuvvVZTp07NeY9+/fqpTJkymjx5crFmX7dunerVq5frubxmBoC8oJABKBalS5dW6dKlddNNN6lZs2Z69tlnc70eHx+vL7/8UitWrFCXLl0UEhKiBQsWKCgoSJK0du1azZ49Wxs3blSjRo3UsGFDPf/882f8WY7jyOVy5dyysrIkKddzLpcrT7lXr16tpKSkMx6RO1/mosoEwPcwhgxAsfjmm2+UlpamDRs2aMyYMeratateeOGFXNvceuut+vLLLxUZGan169erWrVqBfpZ8+bNU69evc673fn++tuxY4euu+46XX/99XrvvffOuE1eM7srE2PIAN/EVZYAisVVV10lSbrxxhtVoUIF3X///Ro+fLhq166ds02dOnW0atUqTZs2rcBlTJLuuusuff311zlfb9q0Sf3798/13PkcPnxYbdq0Uc2aNfXGG2+cdbu8ZnZHJgC+i0IGoNidKmfbt2/PKWQvv/yy5syZoyuvvFKzZ89Wnz59Cvz+5cuXV/ny5XO+Tk1NlaSceczOJy0tTXfeeacyMjL0wQcfqFSpUmfcLj+ZC5sJgG+jkAEodmvXrpUkXXTRRZKklStXauDAgZo9e7bq1aunpk2bavny5WrTpk2xZ3O5XOrcubO2bdumL7/8UpUqVTrjdp6UGYD3o5ABKFKtW7dWy5YtddlllykoKEhr167V5MmTdffdd6t27dravHmzOnfurMcee0w9evSQJLVs2VJxcXFWyk1sbKyWLVumadOm6dChQzp06FDOa40aNVJoaGixZ05LS8uZXuP333/XsWPH9Pbbb0uSbr/99rMewQPgPRjUD6BIjR49Wu+995527Nih4OBg1apVS7169VL//v115MgRXXfddbrmmmu0cOHCnGkwPv/8czVr1kwffPCB7rjjjkJnyM8krBdeeKF27tx5xte2b9+uUqVKuSVzfjLt2LEj52jimTJdeOGF530PAJ6NQgYAAGAZ85ABAABYRiEDAACwjEIGAABgGYUMAADAMgoZAACAZRQyAAAAy7x2YthTc/8AAAB4g3PNNOa1hUw69y9mw+LFi9WuXTvbMVCE2Me+j33s29i/vs9T9/H5DiRxyhIAAMAyChkAAIBlFDIAAADLKGQAAACWUcgAAAAso5ABAABYRiEDAACwjEIGAABgGYUMAADAMgoZAACAZRQyAAAAyyhkAAAAllHIAAAALKOQAQAAWEYhAwAAsIxCBgAAYBmFDAAA+KfXXpOGDpV27LCdhEIGAAD8kONIU6dK06ZJBw7YTkMhAwAAfuibb6TkZOmKK6TGjW2noZABAAA/NGuWue/TRwoIsJtFFDIAAOBv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itJ330ktWpipLfr1k155hTIGFBEKGbxLxYqmjDVtKn311elJKQG419q15jTlqUlfX3yRqymBIsSfLnifyEhpxQqzXEtysvlHY88e26kA37FihdSqlZSSIo0cyaSvQDGgkME7hYdLH3wg3XWX9J//SDfdJP36q+1UgPd7+20zRjMtTXr2WSkhgTIGFAMKGbxXyZLSO+9I99wj7dghXX+99M03tlMB3mvOHOnuuyWXS3r5ZemRR2wnAvwGhQzeLSREev11KTbWjHVp1szM8A8g7xxHmjhR6t3bDNpfsEDq29d2KsCvUMjg/YKCpMRE6emnzVQYbdpICxfaTgV4h6wsacgQacQIqVQpafFiMws/gGJFIYNvCAiQRo0yl+VnZUn33msGIgM4uz//NOUrMdFcwfzpp+YDDYBiRyGDb+nTR3r3XSk0VHroIemxx6TsbNupAM9z+LC5kvLdd6U6daR166RrrrGdCvBbFDL4nnbtpJUrpago6ZlnzCBllloCTtu5U7rxRumLL0wJW7tWql3bdirAr1HI4JtuvNF84q9Vy1zG36IFE8gCkvlzce210k8/SbffLn3yiVkFA4BVbitkJ0+eVN++fXXRRRepTJkyuuSSSzRnzpyzbt+8eXOFhoYqPDw857Z37153xQGkiy82s/lff720fr103XVmXT7AXy1YcPrDSWysGcBfurTtVADkxkLmcrkUHR2tVatW6dixY5o3b56GDx+uFStWnPV7Jk6cqNTU1Jxb1apV3RUHMCpWNNNg3H336bnKVq2ynQooXo4jxcebi10yM80FLzNmSMHBtpMB+B+3FbLSpUtrzJgxql27tgICAtSkSRO1aNFCX3zxhbt+BFAwJUtKb75ploBJSZFat5amTzf/SAG+Lj1d6t5diouTypQxK1wMHmw7FYC/CXCcovlXKT09XXXq1NFzzz2nTp06/eP15s2b68cff1R2drZq1qypYcOGqUePHmd9v7i4OMXHx+d6Likpyd2x4eOqffKJGr7wgoIyM7XzX//S9/37KzskxHYsoEiUPHhQ106cqKht25RWsaK+GjVKx2vWtB0L8EsxMTE6Z+VyikB2drbTrVs3p3nz5k5WVtYZt/nyyy+do0ePOhkZGc6HH37olC1b1nn33Xfz/DOKKHqhJCUl2Y6AvFi/3nGqVnUcyXGaNHGcvXvz/K3sY9/nM/v4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"},"metadata":{}}]},{"cell_type":"code","source":"def quad(x, a, b, c) : a*x**2 + b*x + c","metadata":{"execution":{"iopub.status.busy":"2024-10-29T05:40:29.682100Z","iopub.execute_input":"2024-10-29T05:40:29.682946Z","iopub.status.idle":"2024-10-29T05:40:29.688292Z","shell.execute_reply.started":"2024-10-29T05:40:29.682814Z","shell.execute_reply":"2024-10-29T05:40:29.687174Z"},"trusted":true},"execution_count":5,"outputs":[]},{"cell_type":"code","source":"def mk_quad(a,b,c):\n return lambda x: (a*x**2 + b*x + c).float()","metadata":{"execution":{"iopub.status.busy":"2024-10-29T05:40:29.689566Z","iopub.execute_input":"2024-10-29T05:40:29.689982Z","iopub.status.idle":"2024-10-29T05:40:29.700683Z","shell.execute_reply.started":"2024-10-29T05:40:29.689945Z","shell.execute_reply":"2024-10-29T05:40:29.699590Z"},"trusted":true},"execution_count":6,"outputs":[]},{"cell_type":"code","source":"f2 = mk_quad(3,2,1)\nplot_function(f2)","metadata":{"execution":{"iopub.status.busy":"2024-10-29T05:40:29.702318Z","iopub.execute_input":"2024-10-29T05:40:29.702830Z","iopub.status.idle":"2024-10-29T05:40:29.909848Z","shell.execute_reply.started":"2024-10-29T05:40:29.702766Z","shell.execute_reply":"2024-10-29T05:40:29.908725Z"},"trusted":true},"execution_count":7,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 720x540 with 1 Axes>","image/png":"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"},"metadata":{}}]},{"cell_type":"code","source":"def noise(x, scale): return np.random.normal(scale=scale, size=x.shape)\ndef add_noise(x, mult, add): return x * (1+noise(x,mult)) + noise(x,add)","metadata":{"execution":{"iopub.status.busy":"2024-10-29T05:40:29.911519Z","iopub.execute_input":"2024-10-29T05:40:29.912793Z","iopub.status.idle":"2024-10-29T05:40:29.918989Z","shell.execute_reply.started":"2024-10-29T05:40:29.912736Z","shell.execute_reply":"2024-10-29T05:40:29.917801Z"},"trusted":true},"execution_count":8,"outputs":[]},{"cell_type":"code","source":"np.random.seed(42)\n\nx_data = torch.linspace(-2, 2, steps=20)[:,None]\ny_data = add_noise(f(x_data), 0.15, 1.5)\nx_data[:5], y_data[:5]\nplt.scatter(x_data, y_data)","metadata":{"execution":{"iopub.status.busy":"2024-10-29T05:40:57.307991Z","iopub.execute_input":"2024-10-29T05:40:57.308618Z","iopub.status.idle":"2024-10-29T05:40:57.650932Z","shell.execute_reply.started":"2024-10-29T05:40:57.308542Z","shell.execute_reply":"2024-10-29T05:40:57.649714Z"},"trusted":true},"execution_count":11,"outputs":[{"execution_count":11,"output_type":"execute_result","data":{"text/plain":"<matplotlib.collections.PathCollection at 0x7be6e6117e20>"},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"<Figure size 576x432 with 1 Axes>","image/png":"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C/v63LlzzYUXXhj6vaOjw2RnZ5tXX33VqxKjIsm899573bZ57bXXTFZWlif19FY0+2HzMVm6dKkZNWpUl+dOP/108+STT4Ztv3XrViPJNDY2elDdkQUCAbN8+fLQ788//7w57rjj+tzWaz2p7ac//an5xS9+4VFlvTd//nxzySWXRHz966+/Nsccc4x55513Qs898MAD5uyzz/aguugdaT+MMeacc84xixYt8qQet1x66aVm3rx5hz3v5XFJijPp//bGG2/otNNO01FHhZ+a/P3339fYsWNDvx999NE6/fTT9f7773tUobsOfSMNBAK65pprVFdXF++SeszmY/LftUnS2LFjj1jbGWecoaFDh6q4uDhul+4bGxtVW1vbpf6xY8dq+/btam5u7nVbr/Wmtqefflo5OTkaNWqUHnroIQWDQY+qdc+WLVvU0dFx2H7b8HfRGwsWLFBOTo6KioqsuRoQSXt7u95++22NGTPmsNe8PC7Wh/RFF10kx3EiPrZt29al/Xvvvad58+Zp0aJFEbfZ0tKi7OzsLs9lZ2drz549MdiD/+jpvkTj1FNPVWVlpXbs2KF//vOfMsbo4osvjuk/SLHYD5uPSU9ry83N1YYNG7R161Z9+OGHGjlypM4//3zt3r07pvsSTktLiyR1qf/Qz/9df0/aeq2ntd10003asmWLvvzySz3xxBN6+OGH9fDDD3tRqqtaWlrUv3//LiccXvxdxMK9996rTz/9VA0NDbrvvvs0Z84c/fWvf413WWEZYzR9+nSNHDlSl1122WGve3lcrFkFK5JnnnlGHR0dEV/PyckJ/bxp0yZdcMEFWrJkic4///yI78nMzDzs23dzc7MGDBjQ94K70ZN9idbQoUM1dOjQ0M+PPfaYsrKy9NFHH+nUU0/tda3dicV+2HxMMjMztWvXrsNqGzRoUNj3ZGZm6swzz5R04A/3d7/7nf785z/rrbfe0pQpU9wrPgqZmZmSDtSbm5sb+lnSYf9te9LWaz2tbdy4caGfJ0yYoNtvv11PP/20fvnLX3pQrXsyMzPV2tqqzs7OUCB48XcRC9/sE/CjH/1IN954o5577jldeumlcazqcMYYzZw5U1u2bNHq1avl8x1+LuvlcbE+pAcOHBhVu02bNum8887Tfffdp2uvvbbbtmPGjOnS23jfvn3avHmzRo8e3ZdSjyjafekLL9bkjsV+2HxMxowZo9///vddnqusrNTNN98c1WccOiuPB7/fr0AgoMrKSp144omSDtQ+fPhwZWVl9bqt1/paW7h/aBPBKaecoqOPPlpVVVX69re/LenAfsf678ILNh4TY4xmzZqlDRs26JVXXon4/5anx8X1u9xx8K9//csMHjzYPPbYY1G1//DDD01GRoZ56aWXTHt7u5k/f74ZOXJkxI5mXmtrazNtbW1GktmwYYNpa2sz+/fvD9v21VdfNZ999pkJBoPmq6++MqWlpWb06NGms7PT46oP15P9sPmY/Pvf/zbZ2dlm6dKlZu/evWbp0qUmJyfH7Nq1K2z79evXm82bN5vOzk6zZ88ec+utt5phw4aZpqYmjys/YN68eaaoqMh8/vnn5vPPPzdFRUXmzjvv7HNbr/Wktueee840NzebYDBo3nnnHVNQUGAeeOABjyuObN++faatrc389re/NRdffLFpa2sze/fuDdu2tLTUXHDBBaapqcl89NFH5rjjjjN//OMfPa44vGj3o7Gx0bz00kvm66+/Np2dnWb16tUmKyvLPP/883GoOrKZM2eaMWPGmK+++uqIbb06LkkR0tddd51xHMf079+/y6OmpsYYY8w//vEP079//y7v+ctf/mJOOukkc+yxx5rvfe975oMPPohH6WFJOuzx2muvGWMO35eHHnrIBAIBk5GRYYYOHWqmTZsW2u9468l+GGP3MVmzZo0ZPXq0OfbYY82YMWPM2rVrQ6/V1NR0+f/tmWeeMSeccILJyMgwubm55sILLzSbNm2KV+mmo6PDzJw502RnZ5vs7Gwze/bs0JefG2+80dx4441RtY23nuzHWWedZbKyskz//v3NySefbO6///6IXxDjYf78+Yf9bZxzzjnGGGOmTJli7rnnnlDb5uZmc9VVV5nMzEwzaNAga740GRP9fuzcudOceeaZZsCAAWbAgAFm9OjR5oknnohj5Yfbtm2bkWTS0tK65Mih/6/idVxYBQsAAEvZd1MAAABIIqQBALAWIQ0AgKUIaQAALEVIAwBgKUIaAABLEdIAAFiKkAYAwFKENAAAliKkAQCwFCENAICl/h8fpmSfWdI93wAAAABJRU5ErkJggg=="},"metadata":{}}]},{"cell_type":"code","source":"def mae(preds, acts): return (torch.abs(preds-acts)).mean()","metadata":{"execution":{"iopub.status.busy":"2024-10-29T05:40:59.891744Z","iopub.execute_input":"2024-10-29T05:40:59.892175Z","iopub.status.idle":"2024-10-29T05:40:59.898489Z","shell.execute_reply.started":"2024-10-29T05:40:59.892135Z","shell.execute_reply":"2024-10-29T05:40:59.897127Z"},"trusted":true},"execution_count":12,"outputs":[]},{"cell_type":"code","source":"from ipywidgets import interact\nimport torch\nimport matplotlib.pyplot as plt\n\n@interact(a=1.1, b=1.1, c=1.1)\ndef plot_quad(a, b, c):\n plt.figure(figsize=(8, 6))\n plt.scatter(x_data, y_data, color='blue', alpha=0.5, label='Data points')\n \n def mk_quad(a,b,c):\n return lambda x: (a*x**2 + b*x + c).float()\n \n f = mk_quad(a,b,c)\n # Calculate predicted values at x_data points for MAE calculation\n y_pred = f(x_data)\n # Calculate MAE between predictions and actual y_data\n loss = torch.mean(torch.abs(y_pred - y_data))\n \n # Plot the continuous function\n x = torch.linspace(-2, 2, 100).float()\n y = f(x)\n plt.plot(x, y, 'r-', label='Quadratic fit')\n \n plt.title(f\"MAE: {loss:.2f}\") \n plt.ylim(-3, 13)\n plt.grid(True)\n plt.legend()\n plt.show()","metadata":{"execution":{"iopub.status.busy":"2024-10-29T05:41:01.991316Z","iopub.execute_input":"2024-10-29T05:41:01.991914Z","iopub.status.idle":"2024-10-29T05:41:02.462234Z","shell.execute_reply.started":"2024-10-29T05:41:01.991855Z","shell.execute_reply":"2024-10-29T05:41:02.460876Z"},"trusted":true},"execution_count":13,"outputs":[{"output_type":"display_data","data":{"text/plain":"interactive(children=(FloatSlider(value=1.1, description='a', max=3.3000000000000003, min=-1.1), FloatSlider(v…","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"de2641e3f1d9440d963e3f480f8a2d09"}},"metadata":{}}]},{"cell_type":"markdown","source":"## http://matrixmultiplication.xyz/\n## https://wesmckinney.com/book/accessing-data","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}