From 702d7b02909323d563053693efde3affa17f62a2 Mon Sep 17 00:00:00 2001 From: iridiumR Date: Mon, 26 Dec 2022 17:02:51 +0800 Subject: [PATCH] feat(AIandML): e3.1 --- .../e3.1_numpy_to_tensor.ipynb | 612 ++++++++++++++++++ 1 file changed, 612 insertions(+) create mode 100644 AIandML/e3_deep_learning/e3.1_numpy_to_tensor.ipynb diff --git a/AIandML/e3_deep_learning/e3.1_numpy_to_tensor.ipynb b/AIandML/e3_deep_learning/e3.1_numpy_to_tensor.ipynb new file mode 100644 index 0000000..df3a463 --- /dev/null +++ b/AIandML/e3_deep_learning/e3.1_numpy_to_tensor.ipynb @@ -0,0 +1,612 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 实验3-2 从numpy到Tensor\n", + "\n", + "实验目标:\n", + "\n", + "* 理解损失函数计算和梯度计算过程和框架机制\n", + "* 验证型实验,体会从numpy到Tensor、从手动梯度计算到自动梯度技术的过程\n", + "\n", + "载入相关库" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import math\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Numpy实现拟合\n", + "\n", + "> 在正式开始前,看一个使用Numpy的例子\n", + "\n", + "#### 1.1 给定数据\n", + "\n", + "* 给定原始数据源自$\\sin$函数\n", + "\n", + "$$\n", + "y = \\sin(x), \\quad x \\in [-\\pi, \\pi]\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Create random input and output data\n", + "x = np.linspace(-math.pi, math.pi, 2000)\n", + "y = np.sin(x)\n", + "\n", + "plt.plot(x, y)\n", + "plt.grid(True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 1.2 用3阶多项式拟合\n", + "\n", + "* 3阶多项式表示为\n", + "\n", + "$$\n", + "y_\\text{pred} = a + b x + c x^2 + d x^3\n", + "$$\n", + "\n", + "* 求3阶多项式系数$a,b,c,d$\n", + "* 设计代价函数\n", + "\n", + "$$\n", + "\\begin{split}\n", + "J(a,b,c,d) \n", + "&= \\frac{1}{N}\\sum \\left(y_\\text{pred} - y\\right)^2 \\\\\n", + "&= \\frac{1}{N}\\sum \\left(a + b x + c x^2 + d x^3 - y\\right)^2\n", + "\\end{split}\n", + "$$\n", + "\n", + "* 通过梯度下降法,使\n", + "\n", + "$$\n", + "\\min J(a,b,c,d)\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# Randomly initialize weights\n", + "a = np.random.randn()\n", + "b = np.random.randn()\n", + "c = np.random.randn()\n", + "d = np.random.randn()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> 请回答:\n", + "> 1. 本例中的目标函数是什么?拟如何优化?\n", + "\n", + "目标函数是:\n", + "$$\n", + "y_\\text{pred} = a + b x + c x^2 + d x^3\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 1.3 numpy下实现梯度下降" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "99 2914.0686778918653\n", + "199 2054.9974161348064\n", + "299 1450.370643919091\n", + "399 1024.6837276236965\n", + "499 724.8859448756189\n", + "599 513.6858685532102\n", + "699 364.8594671456524\n", + "799 259.95856686918034\n", + "899 186.00056188365326\n", + "999 133.8460790269978\n", + "1099 97.05922475327091\n", + "1199 71.10652197085993\n", + "1299 52.79366316730517\n", + "1399 39.86932594257033\n", + "1499 30.74639809722312\n", + "1599 24.305750585122503\n", + "1699 19.758070389713772\n", + "1799 16.54654472985528\n", + "1899 14.27829847537817\n", + "1999 12.676076131525194\n", + "Result: y = 0.06505951823932438 + 0.8479905953957829 x + -0.011223849491339904 x^2 + -0.09208574250623029 x^3\n" + ] + } + ], + "source": [ + "learning_rate = 1e-6\n", + "for t in range(2000):\n", + " # Forward pass: compute predicted y\n", + " # y = a + b x + c x^2 + d x^3\n", + " y_pred = a + b * x + c * x ** 2 + d * x ** 3\n", + "\n", + " # Compute and print loss\n", + " loss = np.square(y_pred - y).sum()\n", + " if t % 100 == 99:\n", + " print(t, loss)\n", + "\n", + " # Backprop to compute gradients of a, b, c, d with respect to loss\n", + " grad_y_pred = 2.0 * (y_pred - y)\n", + " grad_a = grad_y_pred.sum()\n", + " grad_b = (grad_y_pred * x).sum()\n", + " grad_c = (grad_y_pred * x ** 2).sum()\n", + " grad_d = (grad_y_pred * x ** 3).sum()\n", + "\n", + " # Update weights\n", + " a -= learning_rate * grad_a\n", + " b -= learning_rate * grad_b\n", + " c -= learning_rate * grad_c\n", + " d -= learning_rate * grad_d\n", + "\n", + "print(f'Result: y = {a} + {b} x + {c} x^2 + {d} x^3')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(x, y, label='real')\n", + "plt.plot(x, y_pred, label='pred')\n", + "plt.grid(True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. PyTorch的张量(Tensors)\n", + "\n", + "> PyTorch的张量类似numpy的ndarray,但在GPU上可以快约50倍。\n", + "\n", + "* 我们用Tensor重新实现前文例子" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "99 2938.743896484375\n", + "199 2081.909423828125\n", + "299 1475.6683349609375\n", + "399 1046.72216796875\n", + "499 743.2164306640625\n", + "599 528.4656982421875\n", + "699 376.5142822265625\n", + "799 268.9967956542969\n", + "899 192.9193572998047\n", + "999 139.08792114257812\n", + "1099 100.99724578857422\n", + "1199 74.04437255859375\n", + "1299 54.97263717651367\n", + "1399 41.47736358642578\n", + "1499 31.928035736083984\n", + "1599 25.17084503173828\n", + "1699 20.389366149902344\n", + "1799 17.005922317504883\n", + "1899 14.611732482910156\n", + "1999 12.917559623718262\n", + "Result: y = -0.06776070594787598 + 0.8552694916725159 x + 0.011689849197864532 x^2 + -0.09312110394239426 x^3\n" + ] + } + ], + "source": [ + "import torch\n", + "import math\n", + "\n", + "\n", + "dtype = torch.float\n", + "device = torch.device(\"cpu\")\n", + "# device = torch.device(\"cuda:0\") # Uncomment this to run on GPU\n", + "\n", + "# Create random input and output data\n", + "x = torch.linspace(-math.pi, math.pi, 2000, device=device, dtype=dtype)\n", + "y = torch.sin(x)\n", + "\n", + "# Randomly initialize weights\n", + "a = torch.randn((), device=device, dtype=dtype)\n", + "b = torch.randn((), device=device, dtype=dtype)\n", + "c = torch.randn((), device=device, dtype=dtype)\n", + "d = torch.randn((), device=device, dtype=dtype)\n", + "\n", + "learning_rate = 1e-6\n", + "for t in range(2000):\n", + " # Forward pass: compute predicted y\n", + " y_pred = a + b * x + c * x ** 2 + d * x ** 3\n", + "\n", + " # Compute and print loss\n", + " loss = (y_pred - y).pow(2).sum().item()\n", + " if t % 100 == 99:\n", + " print(t, loss)\n", + "\n", + " # Backprop to compute gradients of a, b, c, d with respect to loss\n", + " grad_y_pred = 2.0 * (y_pred - y)\n", + " grad_a = grad_y_pred.sum()\n", + " grad_b = (grad_y_pred * x).sum()\n", + " grad_c = (grad_y_pred * x ** 2).sum()\n", + " grad_d = (grad_y_pred * x ** 3).sum()\n", + "\n", + " # Update weights using gradient descent\n", + " a -= learning_rate * grad_a\n", + " b -= learning_rate * grad_b\n", + " c -= learning_rate * grad_c\n", + " d -= learning_rate * grad_d\n", + "\n", + "print(f'Result: y = {a.item()} + {b.item()} x + {c.item()} x^2 + {d.item()} x^3')" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(x.numpy(), y.numpy(), label='real')\n", + "plt.plot(x.numpy(), y_pred.numpy(), label='pred')\n", + "plt.grid(True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. 自动梯度计算(Autograd)\n", + "\n", + "> 前文例子中,我们必须手动计算多项式的梯度。事实上,PyTorch可以帮我们完成该。\n", + "\n", + "* PyTorch的autograd模块通过`计算图`功能实现了自动梯度计算,因此不必人工手算了。 \n", + "* 同样重新编写前文例子" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a.grad is None" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "99 13.743356704711914\n", + "199 12.083112716674805\n", + "299 10.983731269836426\n", + "399 10.254711151123047\n", + "499 9.771218299865723\n", + "599 9.450494766235352\n", + "699 9.23769760131836\n", + "799 9.096477508544922\n", + "899 9.002732276916504\n", + "999 8.94049072265625\n", + "1099 8.899148941040039\n", + "1199 8.871686935424805\n", + "1299 8.853440284729004\n", + "1399 8.841304779052734\n", + "1499 8.83323860168457\n", + "1599 8.827871322631836\n", + "1699 8.824300765991211\n", + "1799 8.821924209594727\n", + "1899 8.820340156555176\n", + "1999 8.819284439086914\n", + "Result: y = 0.0005760510102845728 + 0.8580527305603027 x + -9.938044240698218e-05 x^2 + -0.0935169979929924 x^3\n" + ] + } + ], + "source": [ + "import torch\n", + "import math\n", + "\n", + "dtype = torch.float\n", + "device = torch.device(\"cpu\")\n", + "# device = torch.device(\"cuda:0\") # Uncomment this to run on GPU\n", + "\n", + "# Create Tensors to hold input and outputs.\n", + "# By default, requires_grad=False, which indicates that we do not need to\n", + "# compute gradients with respect to these Tensors during the backward pass.\n", + "x = torch.linspace(-math.pi, math.pi, 2000, device=device, dtype=dtype)\n", + "y = torch.sin(x)\n", + "\n", + "# Create random Tensors for weights. For a third order polynomial, we need\n", + "# 4 weights: y = a + b x + c x^2 + d x^3\n", + "# Setting requires_grad=True indicates that we want to compute gradients with\n", + "# respect to these Tensors during the backward pass.\n", + "a = torch.randn((), device=device, dtype=dtype, requires_grad=True) # NEW!!!\n", + "b = torch.randn((), device=device, dtype=dtype, requires_grad=True)\n", + "c = torch.randn((), device=device, dtype=dtype, requires_grad=True)\n", + "d = torch.randn((), device=device, dtype=dtype, requires_grad=True)\n", + "\n", + "learning_rate = 1e-6\n", + "for t in range(2000):\n", + " # Forward pass: compute predicted y using operations on Tensors.\n", + " y_pred = a + b * x + c * x ** 2 + d * x ** 3\n", + "\n", + " # Compute and print loss using operations on Tensors.\n", + " # Now loss is a Tensor of shape (1,)\n", + " # loss.item() gets the scalar value held in the loss.\n", + " loss = (y_pred - y).pow(2).sum()\n", + " if t % 100 == 99:\n", + " print(t, loss.item())\n", + "\n", + " # NEW!!!\n", + " # Use autograd to compute the backward pass. This call will compute the\n", + " # gradient of loss with respect to all Tensors with requires_grad=True.\n", + " # After this call a.grad, b.grad. c.grad and d.grad will be Tensors holding\n", + " # the gradient of the loss with respect to a, b, c, d respectively.\n", + " loss.backward()\n", + "\n", + " # NEW!!!\n", + " # Manually update weights using gradient descent. Wrap in torch.no_grad()\n", + " # because weights have requires_grad=True, but we don't need to track this\n", + " # in autograd.\n", + " with torch.no_grad():\n", + " a -= learning_rate * a.grad\n", + " b -= learning_rate * b.grad\n", + " c -= learning_rate * c.grad\n", + " d -= learning_rate * d.grad\n", + "\n", + " # Manually zero the gradients after updating weights\n", + " a.grad = None\n", + " b.grad = None\n", + " c.grad = None\n", + " d.grad = None\n", + "\n", + "print(f'Result: y = {a.item()} + {b.item()} x + {c.item()} x^2 + {d.item()} x^3')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4. PyTorch的自动优化功能optim\n", + "\n", + "* `optim`模块自动优化的对象是`torch.nn.Module`及其派生类\n", + "* 重新改写前文示例如下" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "xx.shape:torch.Size([2000, 3])\n", + "99 2484.103515625\n", + "199 641.6993408203125\n", + "299 395.6757507324219\n", + "399 324.57843017578125\n", + "499 255.0222930908203\n", + "599 184.39678955078125\n", + "699 122.7295913696289\n", + "799 75.3610610961914\n", + "899 42.63737487792969\n", + "999 22.684669494628906\n", + "1099 12.80512809753418\n", + "1199 9.434273719787598\n", + "1299 8.856988906860352\n", + "1399 8.819315910339355\n", + "1499 8.831609725952148\n", + "1599 8.84821891784668\n", + "1699 8.896923065185547\n", + "1799 8.940781593322754\n", + "1899 8.907790184020996\n", + "1999 8.896581649780273\n", + "Result: y = 9.650691357165897e-11 + 0.8562721014022827 x + -1.3369240825511497e-08 x^2 + -0.09380023181438446 x^3\n" + ] + } + ], + "source": [ + "import torch\n", + "import math\n", + "\n", + "\n", + "# Create Tensors to hold input and outputs.\n", + "x = torch.linspace(-math.pi, math.pi, 2000)\n", + "y = torch.sin(x)\n", + "\n", + "# Prepare the input tensor (x, x^2, x^3).\n", + "p = torch.tensor([1, 2, 3])\n", + "xx = x.unsqueeze(-1).pow(p)\n", + "print(f\"xx.shape:{xx.shape}\")\n", + "\n", + "# Use the nn package to define our model and loss function.\n", + "model = torch.nn.Sequential(\n", + " torch.nn.Linear(3, 1),\n", + " torch.nn.Flatten(0, 1)\n", + ")\n", + "loss_fn = torch.nn.MSELoss(reduction='sum')\n", + "\n", + "# Use the optim package to define an Optimizer that will update the weights of\n", + "# the model for us. Here we will use RMSprop; the optim package contains many other\n", + "# optimization algorithms. The first argument to the RMSprop constructor tells the\n", + "# optimizer which Tensors it should update.\n", + "learning_rate = 1e-3\n", + "optimizer = torch.optim.RMSprop(model.parameters(), lr=learning_rate)\n", + "\n", + "for t in range(2000):\n", + " # Forward pass: compute predicted y by passing x to the model.\n", + " y_pred = model(xx)\n", + " #print(y_pred.shape)\n", + " #break\n", + "\n", + " # Compute and print loss.\n", + " loss = loss_fn(y_pred, y)\n", + " if t % 100 == 99:\n", + " print(t, loss.item())\n", + "\n", + " # Before the backward pass, use the optimizer object to zero all of the\n", + " # gradients for the variables it will update (which are the learnable\n", + " # weights of the model). This is because by default, gradients are\n", + " # accumulated in buffers( i.e, not overwritten) whenever .backward()\n", + " # is called. Checkout docs of torch.autograd.backward for more details.\n", + " optimizer.zero_grad()\n", + "\n", + " # Backward pass: compute gradient of the loss with respect to model\n", + " # parameters\n", + " loss.backward()\n", + "\n", + " # Calling the step function on an Optimizer makes an update to its\n", + " # parameters\n", + " optimizer.step()\n", + "\n", + "\n", + "linear_layer = model[0]\n", + "print(f'Result: y = {linear_layer.bias.item()} + {linear_layer.weight[:, 0].item()} x + {linear_layer.weight[:, 1].item()} x^2 + {linear_layer.weight[:, 2].item()} x^3')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> 请回答:\n", + "> 1. 请回答以上4中实现方法,分别逐步做了哪些改进?\n", + "> 2. 从本实验中获得什么体会?分析PyTorch自动梯度计算机制带来的好处?" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "2中,使用torch进行计算,可以将数据置于显存中,提高运算速度\n", + "3中,使用了torch的自动梯度下降计算方法,降低编码难度\n", + "4中,使用了torch的优化器功能,使得拟合结果更好" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "体会: 使用torch内置功能可简化编码, 提高性能" + ] + } + ], + "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.8.16" + }, + "vscode": { + "interpreter": { + "hash": "0733c54d9044ea299f7b7f48049f3576c8ad4e6ff5a97e2c60d8a9e3bff0bc54" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}