{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 作业三\n", "\n", "## 一、Python类" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "class DummyData:\n", " def __init__(self, num=200):\n", " self.num = num\n", " \n", " def load_data(self, train=True):\n", " W = [0.3, 2, 1]\n", " if train:\n", " X = np.linspace(-2, 2, num=self.num)\n", " Y = W[0]*X**2 + W[1]*X + W[2] + 0.4*np.random.randn(X.size)\n", " else:\n", " X = np.linspace(-10, 10, num=self.num)\n", " Y = W[0]*X**2 + W[1]*X + W[2] + 5*np.random.randn(X.size)\n", " return X, Y" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "X_train, Y_train = DummyData(500).load_data()\n", "X_valid, Y_valid = DummyData(200).load_data(train=False)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.scatter(X_train, Y_train)\n", "plt.scatter(X_valid, Y_valid)\n", "plt.legend([\"Training data\", \"Validation data\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 拟合上述曲线\n", "\n", "要求:\n", "\n", "* 函数$ f(x) = w_0x^2 + w_1x + w_2 $\n", "* 误差采用均方误差 $L := \\frac{\\sum_{i=1}^{n}(f(X_i) - Y_i)^2}{n}$\n", "* 固定步长的梯度下降法\n", "* 在尽可能不修改代码结构的前提下完成工作\n", "* 利用`X_train, Y_train`拟合,利用`X_valid, Y_valid`来验证拟合的效果" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 定义模型、优化器及误差\n", "\n", "Pytorch API的核心组成分为三部分:\n", "\n", "* 模型:计算 f(X) 与 $(\\frac{\\partial L}{X}, \\frac{\\partial L}{W})$\n", "* 优化目标:loss\n", "* 优化器:例如梯度下降法" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# 只需要修改这一部分 -- 代码量在20行以内\n", "class Parabola:\n", " def __init__(self):\n", " self.W = np.zeros(3)\n", " \n", " def __call__(self, X):\n", " return self.predict(X)\n", " \n", " def predict(self, X):\n", " \"\"\"计算f(X),X为向量\"\"\"\n", " assert len(X.shape)==1\n", " # 实现它\n", " raise(NotImplementedError())\n", "\n", " \n", "class GradientDescent:\n", " def __init__(self, step=1e-3):\n", " self.step = step\n", " \n", " def update(self, f:Parabola, dW):\n", " \"\"\"利用梯度dW来更新f的权重\"\"\"\n", " # 实现它\n", " raise(NotImplementedError())\n", "\n", "\n", "def loss(predict, real):\n", " \"\"\"计算预测值与真实值之间的误差 L\"\"\"\n", " assert len(real.shape)==1\n", " assert real.size == predict.size\n", " # 实现它\n", " raise(NotImplementedError())\n", "\n", " \n", "def grad(f, X, Y):\n", " \"\"\"计算L在X处的关于参数W的导数, 其中Y=f(X), X、Y均为向量\"\"\"\n", " assert len(X.shape)==1\n", " # 实现它\n", " raise(NotImplementedError())\n", " return dLdW0, dLdW1, dLdW2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 拟合模型" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Iter 0: train loss 7.565623746611025, valid loss 363.74380398672014\n", "Iter 50: train loss 5.299352078036862, valid loss 161.56088872762683\n", "Iter 100: train loss 3.862781997177601, valid loss 105.86281170032602\n", "Iter 150: train loss 2.899779455934984, valid loss 101.89443599548275\n", "Iter 200: train loss 2.224784436622721, valid loss 111.79248912900545\n", "Iter 250: train loss 1.7359194935452547, valid loss 121.85136229122152\n", "Iter 300: train loss 1.3737323579524998, valid loss 128.15773354325873\n", "Iter 350: train loss 1.1012655282637889, valid loss 130.44164961675233\n", "Iter 400: train loss 0.8941751681418859, valid loss 129.55033855018164\n", "Iter 450: train loss 0.7356472987188566, valid loss 126.48410677489\n", "Iter 500: train loss 0.6136505592939089, valid loss 122.08186164605563\n", "Iter 550: train loss 0.5193613524048778, valid loss 116.96018966970425\n", "Iter 600: train loss 0.44620211134792215, valid loss 111.53946980614747\n", "Iter 650: train loss 0.38921770302381414, valid loss 106.09074135532899\n", "Iter 700: train loss 0.3446501116605814, valid loss 100.77960180600188\n", "Iter 750: train loss 0.3096369429714135, valid loss 95.7006397036934\n", "Iter 800: train loss 0.2819917931290059, valid loss 90.90229193738399\n", "Iter 850: train loss 0.26004131013860254, valid loss 86.40394262890939\n", "Iter 900: train loss 0.24250288541754475, valid loss 82.20730897374182\n", "Iter 950: train loss 0.22839216236168317, valid loss 78.30383554981198\n" ] } ], "source": [ "f = Parabola()\n", "opt = GradientDescent(1e-3)\n", "\n", "valid_losses = []\n", "train_losses = []\n", "for i in range(1000):\n", " X, Y = X_train, Y_train\n", "\n", " dW = grad(f, X, Y)\n", " opt.update(f, dW)\n", " \n", " cur_valid_loss = loss(Y_valid, f(X_valid))\n", " cur_train_loss = loss(Y, f(X))\n", " valid_losses.append(cur_valid_loss) \n", " train_losses.append(cur_train_loss)\n", " \n", " if i%50 == 0:\n", " print(f\"Iter {i}: train loss {cur_train_loss}, valid loss {cur_valid_loss}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 显示结果" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(train_losses)\n", "plt.plot(valid_losses)\n", "plt.legend([\"train loss\", \"validation loss\"])" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.scatter(X_valid, f(X_valid))\n", "plt.scatter(X_valid, Y_valid)\n", "plt.legend([\"prediction\", \"ground truth\"])" ] } ], "metadata": { "kernelspec": { "display_name": "AI-Course", "language": "python", "name": "ai-course" }, "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.7.9" } }, "nbformat": 4, "nbformat_minor": 4 }