diff --git a/6_pytorch/0_basic/1-Tensor-and-Variable.ipynb b/6_pytorch/0_basic/1-Tensor-and-Variable.ipynb index 3b7d7e7..fe0929a 100644 --- a/6_pytorch/0_basic/1-Tensor-and-Variable.ipynb +++ b/6_pytorch/0_basic/1-Tensor-and-Variable.ipynb @@ -6,22 +6,28 @@ "source": [ "# Tensor and Variable\n", "\n", - "PyTorch的简洁设计使得它入门很简单,在深入介绍PyTorch之前,本节将先介绍一些PyTorch的基础知识,使得读者能够对PyTorch有一个大致的了解,并能够用PyTorch搭建一个简单的神经网络。部分内容读者可能暂时不太理解,可先不予以深究,后续的课程将会对此进行深入讲解。\n", "\n", - "本节内容参考了PyTorch官方教程[^1]并做了相应的增删修改,使得内容更贴合新版本的PyTorch接口,同时也更适合新手快速入门。另外本书需要读者先掌握基础的Numpy使用,其他相关知识推荐读者参考CS231n的教程[^2]。\n", + "张量(Tensor)是一种专门的数据结构,非常类似于数组和矩阵。在PyTorch中,我们使用张量来编码模型的输入和输出,以及模型的参数。\n", "\n", - "[^1]: http://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html\n", - "[^2]: http://cs231n.github.io/python-numpy-tutorial/\n", - "\n" + "张量类似于`numpy`的`ndarray`,不同之处在于张量可以在GPU或其他硬件加速器上运行。事实上,张量和NumPy数组通常可以共享相同的底层内存,从而消除了复制数据的需要(请参阅使用NumPy的桥接)。张量还针对自动微分进行了优化,在Autograd部分中看到更多关于这一点的内介绍。\n", + "\n", + "`variable`是一种可以不断变化的变量,符合反向传播,参数更新的属性。PyTorch的`variable`是一个存放会变化值的内存位置,里面的值会不停变化,像装糖果(糖果就是数据,即tensor)的盒子,糖果的数量不断变化。pytorch都是由tensor计算的,而tensor里面的参数是variable形式。\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## 把 PyTorch 当做 NumPy 用\n", + "## 1. Tensor基本用法\n", "\n", - "PyTorch 的官方介绍是一个拥有强力GPU加速的张量和动态构建网络的库,其主要构件是张量,所以我们可以把 PyTorch 当做 NumPy 来用,PyTorch 的很多操作好 NumPy 都是类似的,但是因为其能够在 GPU 上运行,所以有着比 NumPy 快很多倍的速度。通过本次课程,你能够学会如何像使用 NumPy 一样使用 PyTorch,了解到 PyTorch 中的基本元素 Tensor 和 Variable 及其操作方式。" + "PyTorch基础的数据是张量,PyTorch 的很多操作好 NumPy 都是类似的,但是因为其能够在 GPU 上运行,所以有着比 NumPy 快很多倍的速度。通过本次课程,能够学会如何像使用 NumPy 一样使用 PyTorch,了解到 PyTorch 中的基本元素 Tensor 和 Variable 及其操作方式。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.1 Tensor定义与生成" ] }, { @@ -113,7 +119,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "PyTorch Tensor 使用 GPU 加速\n", + "### 1.2 PyTorch Tensor 使用 GPU 加速\n", "\n", "我们可以使用以下两种方式将 Tensor 放到 GPU 上" ] @@ -245,7 +251,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**小练习**\n", + "### 1.3 小练习\n", "\n", "查阅以下[文档](http://pytorch.org/docs/0.3.0/tensors.html)了解 tensor 的数据类型,创建一个 float64、大小是 3 x 2、随机初始化的 tensor,将其转化为 numpy 的 ndarray,输出其数据类型\n", "\n", @@ -284,8 +290,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Tensor的操作\n", - "Tensor 操作中的 api 和 NumPy 非常相似,如果你熟悉 NumPy 中的操作,那么 tensor 基本是一致的,下面我们来列举其中的一些操作" + "## 2. Tensor的操作\n", + "Tensor 操作中的 API 和 NumPy 非常相似,如果你熟悉 NumPy 中的操作,那么 tensor 基本是一致的,下面我们来列举其中的一些操作" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.1 基本操作" ] }, { @@ -629,7 +642,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "另外,pytorch中大多数的操作都支持 inplace 操作,也就是可以直接对 tensor 进行操作而不需要另外开辟内存空间,方式非常简单,一般都是在操作的符号后面加`_`,比如" + "### 2.2 `inplace`操作\n", + "另外,pytorch中大多数的操作都支持 `inplace` 操作,也就是可以直接对 tensor 进行操作而不需要另外开辟内存空间,方式非常简单,一般都是在操作的符号后面加`_`,比如" ] }, { @@ -692,9 +706,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**小练习**\n", + "### 2.3 **小练习**\n", "\n", - "访问[文档](http://pytorch.org/docs/0.3.0/tensors.html)了解 tensor 更多的 api,实现下面的要求\n", + "访问[文档](http://pytorch.org/docs/tensors.html)了解 tensor 更多的 api,实现下面的要求\n", "\n", "创建一个 float32、4 x 4 的全为1的矩阵,将矩阵正中间 2 x 2 的矩阵,全部修改成2\n", "\n", @@ -742,28 +756,38 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Variable\n", - "tensor 是 PyTorch 中的完美组件,但是构建神经网络还远远不够,我们需要能够构建计算图的 tensor,这就是 Variable。Variable 是对 tensor 的封装,操作和 tensor 是一样的,但是每个 Variabel都有三个属性,Variable 中的 tensor本身`.data`,对应 tensor 的梯度`.grad`以及这个 Variable 是通过什么方式得到的`.grad_fn`" + "## 3. Variable\n", + "tensor 是 PyTorch 中的基础数据类型,但是构建神经网络还远远不够,需要能够构建计算图的 tensor,这就是 Variable。Variable 是对 tensor 的封装,操作和 tensor 是一样的,但是每个 Variabel都有三个属性:\n", + "* Variable 中的 tensor本身`.data`,\n", + "* 对应 tensor 的梯度`.grad`\n", + "* Variable 是通过什么方式得到的`.grad_fn`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.1 Variable的基本操作" ] }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ - "# 通过下面这种方式导入 Variable\n", + "import torch\n", "from torch.autograd import Variable" ] }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ - "x_tensor = torch.randn(10, 5)\n", - "y_tensor = torch.randn(10, 5)\n", + "x_tensor = torch.randn(3, 4)\n", + "y_tensor = torch.randn(3, 4)\n", "\n", "# 将 tensor 变成 Variable\n", "x = Variable(x_tensor, requires_grad=True) # 默认 Variable 是不需要求梯度的,所以我们用这个方式申明需要对其进行求梯度\n", @@ -772,7 +796,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -781,15 +805,15 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "tensor(-22.1040)\n", - "\n" + "tensor(-7.7018)\n", + "\n" ] } ], @@ -807,33 +831,19 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "tensor([[2., 2., 2., 2., 2.],\n", - " [2., 2., 2., 2., 2.],\n", - " [2., 2., 2., 2., 2.],\n", - " [2., 2., 2., 2., 2.],\n", - " [2., 2., 2., 2., 2.],\n", - " [2., 2., 2., 2., 2.],\n", - " [2., 2., 2., 2., 2.],\n", - " [2., 2., 2., 2., 2.],\n", - " [2., 2., 2., 2., 2.],\n", - " [2., 2., 2., 2., 2.]])\n", - "tensor([[2., 2., 2., 2., 2.],\n", - " [2., 2., 2., 2., 2.],\n", - " [2., 2., 2., 2., 2.],\n", - " [2., 2., 2., 2., 2.],\n", - " [2., 2., 2., 2., 2.],\n", - " [2., 2., 2., 2., 2.],\n", - " [2., 2., 2., 2., 2.],\n", - " [2., 2., 2., 2., 2.],\n", - " [2., 2., 2., 2., 2.],\n", - " [2., 2., 2., 2., 2.]])\n" + "tensor([[1., 1., 1., 1.],\n", + " [1., 1., 1., 1.],\n", + " [1., 1., 1., 1.]])\n", + "tensor([[1., 1., 1., 1.],\n", + " [1., 1., 1., 1.],\n", + " [1., 1., 1., 1.]])\n" ] } ], @@ -856,7 +866,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**小练习**\n", + "### 3.2 **小练习**\n", "\n", "尝试构建一个函数 $y = x^2 $,然后求 x=2 的导数。\n", "\n", @@ -931,6 +941,15 @@ "source": [ "下一次课程我们将会从导数展开,了解 PyTorch 的自动求导机制" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## References\n", + "* http://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html\n", + "* http://cs231n.github.io/python-numpy-tutorial/" + ] } ], "metadata": { diff --git a/6_pytorch/0_basic/2-autograd.ipynb b/6_pytorch/0_basic/2-autograd.ipynb index 164cb23..21f272f 100644 --- a/6_pytorch/0_basic/2-autograd.ipynb +++ b/6_pytorch/0_basic/2-autograd.ipynb @@ -10,7 +10,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -22,7 +22,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 简单情况的自动求导\n", + "## 1. 简单情况的自动求导\n", "下面我们显示一些简单情况的自动求导,\"简单\"体现在计算的结果都是标量,也就是一个数,我们对这个标量进行自动求导。" ] }, @@ -61,7 +61,8 @@ "$$\n", "\\frac{\\partial z}{\\partial x} = 2 (x + 2) = 2 (2 + 2) = 8\n", "$$\n", - "如果你对求导不熟悉,可以查看以下[网址进行复习](https://baike.baidu.com/item/%E5%AF%BC%E6%95%B0#1)" + "\n", + "如果你对求导不熟悉,可以查看以下[《导数介绍资料》](https://baike.baidu.com/item/%E5%AF%BC%E6%95%B0#1)网址进行复习" ] }, { @@ -92,210 +93,106 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "tensor([[ 5.7436e-01, -8.5241e-01, 2.2845e+00, 3.6574e-01, 1.4336e+00,\n", - " 6.2769e-01, -2.4378e-01, 2.3407e+00, 3.8966e-01, 1.1835e+00,\n", - " -6.4391e-01, 9.1353e-01, -5.8734e-01, -1.9392e+00, 9.3507e-01,\n", - " 8.8518e-02, 7.2412e-01, -1.0687e+00, -6.7646e-01, 1.2672e+00],\n", - " [ 7.2998e-01, 2.0229e+00, -5.0831e-01, -6.3940e-01, -8.7033e-01,\n", - " 2.7687e-01, 6.3498e-01, -1.8736e-03, -8.4395e-01, 1.4696e+00,\n", - " -1.7850e+00, -4.5297e-01, 9.2144e-01, 8.5070e-02, -5.8926e-01,\n", - " 1.2085e+00, -9.7894e-01, -3.4309e-01, -2.4711e-02, -6.4475e-01],\n", - " [-2.8774e-01, 1.2039e+00, -5.2320e-01, 1.3787e-01, 3.9971e-02,\n", - " -5.6454e-01, -1.5835e+00, -2.0742e-01, -1.4274e+00, -3.7860e-01,\n", - " 6.2642e-01, 1.6408e+00, -1.1916e-01, 1.4388e-01, -9.5261e-01,\n", - " 4.0784e-01, 8.1715e-01, 3.9228e-01, 4.1611e-01, -3.3709e-01],\n", - " [ 3.3040e-01, 1.7915e-01, -5.7069e-02, 1.1144e+00, -1.0322e+00,\n", - " 9.9129e-01, 1.1692e+00, 7.9638e-01, -1.0943e-01, 8.2714e-01,\n", - " -1.5700e-01, -5.6686e-01, -1.9550e-01, -1.2263e+00, 1.7836e+00,\n", - " 9.1989e-01, -6.4577e-01, 9.5402e-01, -8.6525e-01, 3.9199e-01],\n", - " [-8.8085e-01, -6.3551e-03, 1.6959e+00, -7.5292e-02, -8.8929e-02,\n", - " 1.0209e+00, 8.9355e-01, -1.2029e+00, 1.9429e+00, -2.7024e-01,\n", - " -9.1289e-01, -1.3788e+00, -6.2695e-01, -6.5776e-01, 3.3640e-01,\n", - " -1.0473e-01, 9.9417e-01, 1.0128e+00, 2.4199e+00, 2.8859e-01],\n", - " [ 8.0469e-02, -1.6585e-01, -4.9862e-01, -5.5413e-01, -4.9307e-01,\n", - " -7.3808e-01, 1.3946e-02, 5.6282e-01, 9.1096e-01, -1.9281e-01,\n", - " -3.8546e-01, -1.4070e+00, 7.3520e-01, 1.7412e+00, 1.0770e+00,\n", - " 1.4837e+00, -7.4241e-01, -4.0977e-01, 1.1057e+00, -7.0222e-01],\n", - " [-2.3147e-01, -3.7781e-01, 1.0774e+00, -7.9918e-01, 1.8275e+00,\n", - " 7.6937e-01, -2.7600e-01, 1.0389e+00, 1.4457e+00, -1.2898e+00,\n", - " 1.2761e-03, 5.5406e-01, 1.8231e+00, -2.3874e-01, 1.2145e+00,\n", - " -2.1051e+00, -6.6464e-01, -8.5335e-01, -2.6258e-01, 8.0080e-01],\n", - " [ 4.2173e-01, 1.7040e-01, -3.0126e-01, -5.2095e-01, 5.5845e-01,\n", - " 5.9780e-01, -6.8320e-01, -5.2203e-01, 4.9485e-01, -8.2392e-01,\n", - " -1.7584e-01, -1.3862e+00, 1.3604e+00, -7.5567e-01, 3.1400e-01,\n", - " 1.8617e+00, -1.1887e+00, -3.1732e-01, -1.5062e-01, -1.7251e-01],\n", - " [ 1.0924e+00, 1.0899e+00, 5.7135e-01, -2.7047e-01, 1.1123e+00,\n", - " 9.3634e-01, -1.4739e+00, 5.3640e-01, -8.2090e-02, 3.3112e-02,\n", - " 6.6032e-01, 1.1448e+00, -4.2457e-01, 1.2898e+00, 3.9002e-01,\n", - " 2.7646e-01, 9.6717e-03, -1.7425e-01, -1.9732e-01, 9.7876e-01],\n", - " [ 4.4554e-01, 5.3807e-01, -2.2031e-02, 1.3198e+00, -1.1642e+00,\n", - " -6.6617e-01, -2.6982e-01, -1.0219e+00, 5.8154e-01, 1.7617e+00,\n", - " 3.3077e-01, 1.5238e+00, -5.8909e-01, 1.1373e+00, 1.0998e+00,\n", - " -1.8168e+00, -5.0699e-01, 4.0043e-01, -2.3226e+00, 7.2522e-02]],\n", - " requires_grad=True)\n" + "tensor([[1., 2.],\n", + " [3., 4.]], requires_grad=True)\n" ] } ], "source": [ - "# FIXME: the demo need improve\n", - "x = Variable(torch.randn(10, 20), requires_grad=True)\n", - "y = Variable(torch.randn(10, 5), requires_grad=True)\n", - "w = Variable(torch.randn(20, 5), requires_grad=True)\n", - "print(x)\n", - "out = torch.mean(y - torch.matmul(x, w)) # torch.matmul 是做矩阵乘法\n", - "out.backward()" + "# 定义Variable\n", + "x = Variable(torch.FloatTensor([1,2]), requires_grad=False)\n", + "b = Variable(torch.FloatTensor([5,6]), requires_grad=False)\n", + "w = Variable(torch.FloatTensor([[1,2],[3,4]]), requires_grad=True)\n", + "print(w)" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 26, "metadata": {}, + "outputs": [], "source": [ - "如果你对矩阵乘法不熟悉,可以查看下面的[网址进行复习](https://baike.baidu.com/item/%E7%9F%A9%E9%98%B5%E4%B9%98%E6%B3%95/5446029?fr=aladdin)" + "z = torch.mean(torch.matmul(w, x) + b) # torch.matmul 是做矩阵乘法\n", + "z.backward()" ] }, { - "cell_type": "code", - "execution_count": 6, + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "tensor([[ 0.0034, -0.0301, -0.0040, -0.0488, 0.0187, -0.0139, -0.0374, 0.0102,\n", - " 0.0337, -0.0249, -0.0777, -0.0868, 0.0132, 0.0042, -0.0627, -0.0448,\n", - " 0.0221, -0.0324, -0.0601, 0.0048],\n", - " [ 0.0034, -0.0301, -0.0040, -0.0488, 0.0187, -0.0139, -0.0374, 0.0102,\n", - " 0.0337, -0.0249, -0.0777, -0.0868, 0.0132, 0.0042, -0.0627, -0.0448,\n", - " 0.0221, -0.0324, -0.0601, 0.0048],\n", - " [ 0.0034, -0.0301, -0.0040, -0.0488, 0.0187, -0.0139, -0.0374, 0.0102,\n", - " 0.0337, -0.0249, -0.0777, -0.0868, 0.0132, 0.0042, -0.0627, -0.0448,\n", - " 0.0221, -0.0324, -0.0601, 0.0048],\n", - " [ 0.0034, -0.0301, -0.0040, -0.0488, 0.0187, -0.0139, -0.0374, 0.0102,\n", - " 0.0337, -0.0249, -0.0777, -0.0868, 0.0132, 0.0042, -0.0627, -0.0448,\n", - " 0.0221, -0.0324, -0.0601, 0.0048],\n", - " [ 0.0034, -0.0301, -0.0040, -0.0488, 0.0187, -0.0139, -0.0374, 0.0102,\n", - " 0.0337, -0.0249, -0.0777, -0.0868, 0.0132, 0.0042, -0.0627, -0.0448,\n", - " 0.0221, -0.0324, -0.0601, 0.0048],\n", - " [ 0.0034, -0.0301, -0.0040, -0.0488, 0.0187, -0.0139, -0.0374, 0.0102,\n", - " 0.0337, -0.0249, -0.0777, -0.0868, 0.0132, 0.0042, -0.0627, -0.0448,\n", - " 0.0221, -0.0324, -0.0601, 0.0048],\n", - " [ 0.0034, -0.0301, -0.0040, -0.0488, 0.0187, -0.0139, -0.0374, 0.0102,\n", - " 0.0337, -0.0249, -0.0777, -0.0868, 0.0132, 0.0042, -0.0627, -0.0448,\n", - " 0.0221, -0.0324, -0.0601, 0.0048],\n", - " [ 0.0034, -0.0301, -0.0040, -0.0488, 0.0187, -0.0139, -0.0374, 0.0102,\n", - " 0.0337, -0.0249, -0.0777, -0.0868, 0.0132, 0.0042, -0.0627, -0.0448,\n", - " 0.0221, -0.0324, -0.0601, 0.0048],\n", - " [ 0.0034, -0.0301, -0.0040, -0.0488, 0.0187, -0.0139, -0.0374, 0.0102,\n", - " 0.0337, -0.0249, -0.0777, -0.0868, 0.0132, 0.0042, -0.0627, -0.0448,\n", - " 0.0221, -0.0324, -0.0601, 0.0048],\n", - " [ 0.0034, -0.0301, -0.0040, -0.0488, 0.0187, -0.0139, -0.0374, 0.0102,\n", - " 0.0337, -0.0249, -0.0777, -0.0868, 0.0132, 0.0042, -0.0627, -0.0448,\n", - " 0.0221, -0.0324, -0.0601, 0.0048]])\n" - ] - } - ], "source": [ - "# 得到 x 的梯度\n", - "print(x.grad)" + "如果你对矩阵乘法不熟悉,可以查看下面的[网址进行复习](https://baike.baidu.com/item/%E7%9F%A9%E9%98%B5%E4%B9%98%E6%B3%95/5446029?fr=aladdin)" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "tensor([[0.0200, 0.0200, 0.0200, 0.0200, 0.0200],\n", - " [0.0200, 0.0200, 0.0200, 0.0200, 0.0200],\n", - " [0.0200, 0.0200, 0.0200, 0.0200, 0.0200],\n", - " [0.0200, 0.0200, 0.0200, 0.0200, 0.0200],\n", - " [0.0200, 0.0200, 0.0200, 0.0200, 0.0200],\n", - " [0.0200, 0.0200, 0.0200, 0.0200, 0.0200],\n", - " [0.0200, 0.0200, 0.0200, 0.0200, 0.0200],\n", - " [0.0200, 0.0200, 0.0200, 0.0200, 0.0200],\n", - " [0.0200, 0.0200, 0.0200, 0.0200, 0.0200],\n", - " [0.0200, 0.0200, 0.0200, 0.0200, 0.0200]])\n" + "tensor([[0.5000, 1.0000],\n", + " [0.5000, 1.0000]])\n" ] } ], "source": [ - "# 得到 y 的的梯度\n", - "print(y.grad)" + "# 得到 w 的梯度\n", + "print(w.grad)" ] }, { - "cell_type": "code", - "execution_count": 8, + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "tensor([[ 0.0172, 0.0172, 0.0172, 0.0172, 0.0172],\n", - " [ 0.0389, 0.0389, 0.0389, 0.0389, 0.0389],\n", - " [-0.0748, -0.0748, -0.0748, -0.0748, -0.0748],\n", - " [-0.0186, -0.0186, -0.0186, -0.0186, -0.0186],\n", - " [ 0.0278, 0.0278, 0.0278, 0.0278, 0.0278],\n", - " [-0.0228, -0.0228, -0.0228, -0.0228, -0.0228],\n", - " [-0.0496, -0.0496, -0.0496, -0.0496, -0.0496],\n", - " [-0.0084, -0.0084, -0.0084, -0.0084, -0.0084],\n", - " [ 0.0693, 0.0693, 0.0693, 0.0693, 0.0693],\n", - " [-0.0821, -0.0821, -0.0821, -0.0821, -0.0821],\n", - " [ 0.0419, 0.0419, 0.0419, 0.0419, 0.0419],\n", - " [-0.0126, -0.0126, -0.0126, -0.0126, -0.0126],\n", - " [ 0.0322, 0.0322, 0.0322, 0.0322, 0.0322],\n", - " [ 0.0863, 0.0863, 0.0863, 0.0863, 0.0863],\n", - " [-0.0791, -0.0791, -0.0791, -0.0791, -0.0791],\n", - " [ 0.0179, 0.0179, 0.0179, 0.0179, 0.0179],\n", - " [-0.1109, -0.1109, -0.1109, -0.1109, -0.1109],\n", - " [-0.0188, -0.0188, -0.0188, -0.0188, -0.0188],\n", - " [-0.0636, -0.0636, -0.0636, -0.0636, -0.0636],\n", - " [ 0.0223, 0.0223, 0.0223, 0.0223, 0.0223]])\n" - ] - } - ], "source": [ - "# 得到 w 的梯度\n", - "print(w.grad)" + "具体计算的公式为:\n", + "$$\n", + "z_1 = w_{11}*x_1 + w_{12}*x_2 + b_1 \\\\\n", + "z_2 = w_{21}*x_1 + w_{22}*x_2 + b_2 \\\\\n", + "z = \\frac{1}{2} (z_1 + z_2)\n", + "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "上面数学公式就更加复杂,矩阵乘法之后对两个矩阵对应元素相乘,然后所有元素求平均,有兴趣的同学可以手动去计算一下梯度,使用 PyTorch 的自动求导,我们能够非常容易得到 x, y 和 w 的导数,因为深度学习中充满大量的矩阵运算,所以我们没有办法手动去求这些导数,有了自动求导能够非常方便地解决网络更新的问题。" + "则微分计算结果是:\n", + "$$\n", + "\\frac{\\partial z}{w_{11}} = \\frac{1}{2} x_1 \\\\\n", + "\\frac{\\partial z}{w_{12}} = \\frac{1}{2} x_2 \\\\\n", + "\\frac{\\partial z}{w_{21}} = \\frac{1}{2} x_1 \\\\\n", + "\\frac{\\partial z}{w_{22}} = \\frac{1}{2} x_2\n", + "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n" + "上面数学公式就更加复杂,矩阵乘法之后对两个矩阵对应元素相乘,然后所有元素求平均,有兴趣的同学可以手动去计算一下梯度,使用 PyTorch 的自动求导,我们能够非常容易得到 x, y 和 w 的导数,因为深度学习中充满大量的矩阵运算,所以我们没有办法手动去求这些导数,有了自动求导能够非常方便地解决网络更新的问题。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## 复杂情况的自动求导\n", - "上面我们展示了简单情况下的自动求导,都是对标量进行自动求导,可能你会有一个疑问,如何对一个向量或者矩阵自动求导了呢?感兴趣的同学可以自己先去尝试一下,下面我们会介绍对多维数组的自动求导机制。" + "## 2. 复杂情况的自动求导\n", + "\n", + "上面我们展示了简单情况下的自动求导,都是对标量进行自动求导,那么如何对一个向量或者矩阵自动求导?" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 28, "metadata": {}, "outputs": [ { @@ -316,7 +213,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 29, "metadata": {}, "outputs": [ { @@ -423,7 +320,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 多次自动求导\n", + "## 3. 多次自动求导\n", "通过调用 backward 我们可以进行一次自动求导,如果我们再调用一次 backward,会发现程序报错,没有办法再做一次。这是因为 PyTorch 默认做完一次自动求导之后,计算图就被丢弃了,所以两次自动求导需要手动设置一个东西,我们通过下面的小例子来说明。" ] }, @@ -516,7 +413,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**小练习**\n", + "## 4 练习题\n", "\n", "定义\n", "\n", @@ -650,13 +547,6 @@ "source": [ "print(j)" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "下一次课我们会介绍两种神经网络的编程方式,动态图编程和静态图编程" - ] } ], "metadata": { @@ -675,7 +565,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.9" + "version": "3.7.9" } }, "nbformat": 4, diff --git a/6_pytorch/0_basic/3-dynamic-graph.ipynb b/6_pytorch/0_basic/3-dynamic-graph.ipynb deleted file mode 100644 index 6c2079d..0000000 --- a/6_pytorch/0_basic/3-dynamic-graph.ipynb +++ /dev/null @@ -1,220 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# 动态图和静态图\n", - "目前神经网络框架分为[静态图框架和动态图框架](https://blog.csdn.net/qq_36653505/article/details/87875279),PyTorch 和 TensorFlow、Caffe 等框架最大的区别就是他们拥有不同的计算图表现形式。 TensorFlow 使用静态图,这意味着我们先定义计算图,然后不断使用它,而在 PyTorch 中,每次都会重新构建一个新的计算图。通过这次课程,我们会了解静态图和动态图之间的优缺点。\n", - "\n", - "对于使用者来说,两种形式的计算图有着非常大的区别,同时静态图和动态图都有他们各自的优点,比如动态图比较方便debug,使用者能够用任何他们喜欢的方式进行debug,同时非常直观,而静态图是通过先定义后运行的方式,之后再次运行的时候就不再需要重新构建计算图,所以速度会比动态图更快。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![](https://ws3.sinaimg.cn/large/006tNc79ly1fmai482qumg30rs0fmq6e.gif)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "下面我们比较 while 循环语句在 TensorFlow 和 PyTorch 中的定义" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## TensorFlow" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "ename": "ModuleNotFoundError", - "evalue": "No module named 'tensorflow'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# tensorflow\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mtensorflow\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mfirst_counter\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconstant\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0msecond_counter\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconstant\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'tensorflow'" - ] - } - ], - "source": [ - "# tensorflow\n", - "import tensorflow as tf\n", - "\n", - "first_counter = tf.constant(0)\n", - "second_counter = tf.constant(10)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [], - "source": [ - "def cond(first_counter, second_counter, *args):\n", - " return first_counter < second_counter\n", - "\n", - "def body(first_counter, second_counter):\n", - " first_counter = tf.add(first_counter, 2)\n", - " second_counter = tf.add(second_counter, 1)\n", - " return first_counter, second_counter" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [], - "source": [ - "c1, c2 = tf.while_loop(cond, body, [first_counter, second_counter])" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "ename": "RuntimeError", - "evalue": "The Session graph is empty. Add operations to the graph before calling run().", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcompat\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mv1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mSession\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0msess\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mcounter_1_res\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcounter_2_res\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msess\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mc1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mc2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m~/.local/lib/python3.6/site-packages/tensorflow/python/client/session.py\u001b[0m in \u001b[0;36mrun\u001b[0;34m(self, fetches, feed_dict, options, run_metadata)\u001b[0m\n\u001b[1;32m 956\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 957\u001b[0m result = self._run(None, fetches, feed_dict, options_ptr,\n\u001b[0;32m--> 958\u001b[0;31m run_metadata_ptr)\n\u001b[0m\u001b[1;32m 959\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mrun_metadata\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 960\u001b[0m \u001b[0mproto_data\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtf_session\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTF_GetBuffer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrun_metadata_ptr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.6/site-packages/tensorflow/python/client/session.py\u001b[0m in \u001b[0;36m_run\u001b[0;34m(self, handle, fetches, feed_dict, options, run_metadata)\u001b[0m\n\u001b[1;32m 1104\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mRuntimeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Attempted to use a closed Session.'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1105\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgraph\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mversion\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1106\u001b[0;31m raise RuntimeError('The Session graph is empty. Add operations to the '\n\u001b[0m\u001b[1;32m 1107\u001b[0m 'graph before calling run().')\n\u001b[1;32m 1108\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mRuntimeError\u001b[0m: The Session graph is empty. Add operations to the graph before calling run()." - ] - } - ], - "source": [ - "with tf.compat.v1.Session() as sess:\n", - " counter_1_res, counter_2_res = sess.run([c1, c2])" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'counter_1_res' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcounter_1_res\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcounter_2_res\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mNameError\u001b[0m: name 'counter_1_res' is not defined" - ] - } - ], - "source": [ - "print(counter_1_res)\n", - "print(counter_2_res)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "可以看到 TensorFlow 需要将整个图构建成静态的,换句话说,每次运行的时候图都是一样的,是不能够改变的,所以不能直接使用 Python 的 while 循环语句,需要使用辅助函数 `tf.while_loop` 写成 TensorFlow 内部的形式\n", - "\n", - "这是非常反直觉的,学习成本也是比较高的\n", - "\n", - "下面我们来看看 PyTorch 的动态图机制,这使得我们能够使用 Python 的 while 写循环,非常方便" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## PyTorch" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "# pytorch\n", - "import torch\n", - "first_counter = torch.Tensor([0])\n", - "second_counter = torch.Tensor([10])" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "while (first_counter < second_counter)[0]:\n", - " first_counter += 2\n", - " second_counter += 1" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "tensor([20.])\n", - "tensor([20.])\n" - ] - } - ], - "source": [ - "print(first_counter)\n", - "print(second_counter)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "可以看到 PyTorch 的写法跟 Python 的写法是完全一致的,没有任何额外的学习成本\n", - "\n", - "上面的例子展示如何使用静态图和动态图构建 while 循环,看起来动态图的方式更加简单且直观,你觉得呢?" - ] - } - ], - "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.6.9" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/6_pytorch/0_basic/ref_dynamic-graph.ipynb b/6_pytorch/0_basic/ref_dynamic-graph.ipynb new file mode 100644 index 0000000..a1c35e0 --- /dev/null +++ b/6_pytorch/0_basic/ref_dynamic-graph.ipynb @@ -0,0 +1,100 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 动态图和静态图\n", + "目前神经网络框架分为[静态图框架和动态图框架](https://blog.csdn.net/qq_36653505/article/details/87875279),PyTorch 和 TensorFlow、Caffe 等框架最大的区别就是他们拥有不同的计算图表现形式。 TensorFlow 使用静态图,这意味着我们先定义计算图,然后不断使用它,而在 PyTorch 中,每次都会重新构建一个新的计算图。通过这次课程,我们会了解静态图和动态图之间的优缺点。\n", + "\n", + "对于使用者来说,两种形式的计算图有着非常大的区别,同时静态图和动态图都有他们各自的优点,比如动态图比较方便debug,使用者能够用任何他们喜欢的方式进行debug,同时非常直观,而静态图是通过先定义后运行的方式,之后再次运行的时候就不再需要重新构建计算图,所以速度会比动态图更快。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![](https://ws3.sinaimg.cn/large/006tNc79ly1fmai482qumg30rs0fmq6e.gif)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## PyTorch" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# pytorch\n", + "import torch\n", + "first_counter = torch.Tensor([0])\n", + "second_counter = torch.Tensor([10])" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "while (first_counter < second_counter):\n", + " first_counter += 2\n", + " second_counter += 1" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tensor([20.])\n", + "tensor([20.])\n" + ] + } + ], + "source": [ + "print(first_counter)\n", + "print(second_counter)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "可以看到 PyTorch 的写法跟 Python 的写法是完全一致的,没有任何额外的学习成本\n", + "\n", + "上面的例子展示如何使用静态图和动态图构建 while 循环,看起来动态图的方式更加简单且直观,你觉得呢?" + ] + } + ], + "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.7.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/6_pytorch/1_NN/1-linear-regression-gradient-descend.ipynb b/6_pytorch/1_NN/1-linear-regression-gradient-descend.ipynb index 0529fae..ef09890 100644 --- a/6_pytorch/1_NN/1-linear-regression-gradient-descend.ipynb +++ b/6_pytorch/1_NN/1-linear-regression-gradient-descend.ipynb @@ -5,7 +5,8 @@ "metadata": {}, "source": [ "# 线性模型和梯度下降\n", - "这是神经网络的第一课,我们会学习一个非常简单的模型,线性回归,同时也会学习一个优化算法-梯度下降法,对这个模型进行优化。线性回归是监督学习里面一个非常简单的模型,同时梯度下降也是深度学习中应用最广的优化算法,我们将从这里开始我们的深度学习之旅" + "\n", + "本节我们简单回顾一下线性回归模型,并演示一下如何使用PyTorch来对线性回归模型进行建模和模型参数计算。" ] }, { @@ -19,7 +20,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 一元线性回归\n", + "## 1. 一元线性回归\n", "一元线性模型非常简单,假设我们有变量 $x_i$ 和目标 $y_i$,每个 i 对应于一个数据点,希望建立一个模型\n", "\n", "$$\n", @@ -46,7 +47,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 梯度下降法\n", + "## 2. 梯度下降法\n", "在梯度下降法中,我们首先要明确梯度的概念,随后我们再了解如何使用梯度进行下降。" ] }, @@ -54,7 +55,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 梯度\n", + "### 2.1 梯度\n", "梯度在数学上就是导数,如果是一个多元函数,那么梯度就是偏导数。比如一个函数f(x, y),那么 f 的梯度就是 \n", "\n", "$$\n", @@ -79,7 +80,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 梯度下降法\n", + "### 2.2 梯度下降法\n", "有了对梯度的理解,我们就能了解梯度下降发的原理了。上面我们需要最小化这个误差,也就是需要找到这个误差的最小值点,那么沿着梯度的反方向我们就能够找到这个最小值点。\n", "\n", "我们可以来看一个直观的解释。比如我们在一座大山上的某处位置,由于我们不知道怎么下山,于是决定走一步算一步,也就是在每走到一个位置的时候,求解当前位置的梯度,沿着梯度的负方向,也就是当前最陡峭的位置向下走一步,然后继续求解当前位置梯度,向这一步所在位置沿着最陡峭最易下山的位置走一步。这样一步步的走下去,一直走到觉得我们已经到了山脚。当然这样走下去,有可能我们不能走到山脚,而是到了某一个局部的山峰低处。\n", @@ -117,6 +118,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "### 2.3 PyTorch实现\n", + "\n", "上面是原理部分,下面通过一个例子来进一步学习线性模型" ] }, @@ -128,7 +131,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 1, @@ -141,43 +144,27 @@ "import numpy as np\n", "from torch.autograd import Variable\n", "\n", - "torch.manual_seed(2017)" + "torch.manual_seed(2021)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, - "outputs": [], - "source": [ - "# 读入数据 x 和 y\n", - "x_train = np.array([[3.3], [4.4], [5.5], [6.71], [6.93], [4.168],\n", - " [9.779], [6.182], [7.59], [2.167], [7.042],\n", - " [10.791], [5.313], [7.997], [3.1]], dtype=np.float32)\n", - "\n", - "y_train = np.array([[1.7], [2.76], [2.09], [3.19], [1.694], [1.573],\n", - " [3.366], [2.596], [2.53], [1.221], [2.827],\n", - " [3.465], [1.65], [2.904], [1.3]], dtype=np.float32)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[]" + "[]" ] }, - "execution_count": 3, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -189,6 +176,10 @@ } ], "source": [ + "# 生层测试数据\n", + "x_train = np.random.rand(20, 1)\n", + "y_train = x_train * 3 + 4 + 3*np.random.rand(20,1)\n", + "\n", "# 画出图像\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", @@ -198,17 +189,9 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "tensor([2.2691], requires_grad=True)\n" - ] - } - ], + "outputs": [], "source": [ "# 转换成 Tensor\n", "x_train = torch.from_numpy(x_train)\n", @@ -216,13 +199,12 @@ "\n", "# 定义参数 w 和 b\n", "w = Variable(torch.randn(1), requires_grad=True) # 随机初始化\n", - "b = Variable(torch.zeros(1), requires_grad=True) # 使用 0 进行初始化\n", - "print(w)" + "b = Variable(torch.zeros(1), requires_grad=True) # 使用 0 进行初始化" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -239,7 +221,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -255,22 +237,22 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 7, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -301,33 +283,33 @@ "这个时候需要计算我们的误差函数,也就是\n", "\n", "$$\n", - "\\frac{1}{n} \\sum_{i=1}^n(\\hat{y}_i - y_i)^2\n", + "E = \\sum_{i=1}^n(\\hat{y}_i - y_i)^2\n", "$$" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# 计算误差\n", "def get_loss(y_, y):\n", - " return torch.mean((y_ - y) ** 2)\n", + " return torch.sum((y_ - y) ** 2)\n", "\n", "loss = get_loss(y_, y_train)" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "tensor(153.3520, grad_fn=)\n" + "tensor(719.2896, dtype=torch.float64, grad_fn=)\n" ] } ], @@ -350,7 +332,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -360,15 +342,15 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "tensor([161.0043])\n", - "tensor([22.8730])\n" + "tensor([-153.8987])\n", + "tensor([-237.1102])\n" ] } ], @@ -380,7 +362,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -398,22 +380,22 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 13, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWoAAAD4CAYAAADFAawfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAAAV/klEQVR4nO3df3BV5Z3H8c83IYoB1lrMOFqaXDqzw8oP+RUdXLeURUQqTovj/lEmbaW7TmwtLt22dnT4w+6otX/sSLU7o2YptS2x7YradTpuh6q4tFOU3tBgW1CYxQSDtITYUvm1/Mh3/7g3AeK93Jvknnuee8/7NZPJvedezv3mZPLhOc95nueYuwsAEK6auAsAAJwfQQ0AgSOoASBwBDUABI6gBoDAjYlip5deeqmnUqkodg0AVamjo+Oguzfkei2SoE6lUkqn01HsGgCqkpl153uNrg8ACFzBoDazKWbWedbXX8zsS2WoDQCgIro+3P1NSbMkycxqJe2T9Fy0ZQEABgy3j/p6Sf/r7nn7UvI5efKkenp6dPz48eH+U+QxduxYTZo0SXV1dXGXAiBCww3qT0n6Ya4XzKxVUqskNTY2vu/1np4eTZgwQalUSmY23DoxhLurr69PPT09mjx5ctzlAIhQ0RcTzewCSZ+Q9HSu1929zd2b3b25oeH9I0yOHz+uiRMnEtIlYmaaOHEiZyhACNrbpVRKqqnJfG9vL+nuh9Oi/rikbe7+x5F+GCFdWhxPIADt7VJrq3T0aOZ5d3fmuSS1tJTkI4YzPG+58nR7AEBirV59JqQHHD2a2V4iRQW1mY2TdIOkZ0v2yRUmlUrp4MGDcZcBIDR79w5v+wgUFdTufsTdJ7r7oZJ9cgFRdvm4u/r7+0u3QwDJlWPwxHm3j0CQMxMHuny6uyX3M10+ownrrq4uTZkyRZ/97Gc1ffp03X///br66qt11VVX6b777ht837JlyzR37lxNmzZNbW1tJfhpAFS1Bx+U6uvP3VZfn9leIkEGdVRdPrt379add96pNWvWaN++fdq6das6OzvV0dGhzZs3S5LWrVunjo4OpdNpPfroo+rr6xvdhwKobi0tUlub1NQkmWW+t7WV7EKiFNGiTKMVVZdPU1OT5s2bp69+9avauHGjZs+eLUk6fPiwdu/erfnz5+vRRx/Vc89lJl6+/fbb2r17tyZOnDi6DwZQ3VpaShrMQwUZ1I2Nme6OXNtHY9y4cZIyfdT33nuv7rjjjnNef+WVV/Tiiy9qy5Ytqq+v14IFCxinDCB2QXZ9RN3lc+ONN2rdunU6fPiwJGnfvn06cOCADh06pEsuuUT19fV644039Oqrr5bmAwFgFIJsUQ+cQaxenenuaGzMhHSpziwWL16snTt36tprr5UkjR8/XuvXr9eSJUv0+OOP68orr9SUKVM0b9680nwgAIyCuXvJd9rc3OxDbxywc+dOXXnllSX/rKTjuALVwcw63L0512tBdn0AAM4gqAEgcAQ1AASOoAaAwBHUABA4ghoAAkdQ5/Dkk0/qnXfeGXx+++23a8eOHaPeb1dXl5566qlh/7sVK1Zow4YNo/58AJUp3KCO+NY25zM0qNeuXaupU6eOer8jDWoAyRZmUEexzqmk9evX65prrtGsWbN0xx136PTp01qxYoWmT5+uGTNmaM2aNdqwYYPS6bRaWlo0a9YsHTt2TAsWLNDABJ7x48fr7rvv1rRp07Ro0SJt3bpVCxYs0Ec+8hE9//zzkjKB/NGPflRz5szRnDlz9Ktf/UqSdM899+gXv/iFZs2apTVr1uj06dO6++67B5dbfeKJJyRl1iJZuXKlpkyZokWLFunAgQOj+rkBVDh3L/nX3LlzfagdO3a8b1teTU3umYg+96upqfh95Pj8m2++2U+cOOHu7l/4whf861//ui9atGjwPX/605/c3f1jH/uY//rXvx7cfvZzSf7CCy+4u/uyZcv8hhtu8BMnTnhnZ6fPnDnT3d2PHDnix44dc3f3Xbt2+cDx2LRpky9dunRwv0888YTff//97u5+/Phxnzt3ru/Zs8efeeYZX7RokZ86dcr37dvnF198sT/99NN5fy4AlU9S2vNkapBrfUSxzulLL72kjo4OXX311ZKkY8eOacmSJdqzZ4/uuusuLV26VIsXLy64nwsuuEBLliyRJM2YMUMXXnih6urqNGPGDHV1dUmSTp48qZUrV6qzs1O1tbXatWtXzn1t3LhRr7/++mD/86FDh7R7925t3rxZy5cvV21tra644gotXLhwxD83gMoXZtdHBLe2cXfddttt6uzsVGdnp95880098sgj2r59uxYsWKDHH39ct99+e8H91NXVDd79u6amRhdeeOHg41OnTkmS1qxZo8suu0zbt29XOp3WiRMn8tb0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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -440,68 +422,54 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "tensor(3.1358)\n", - "epoch: 0, loss: 3.135772228240967\n", - "tensor(0.3551)\n", - "epoch: 1, loss: 0.355089008808136\n", - "tensor(0.3030)\n", - "epoch: 2, loss: 0.30295446515083313\n", - "tensor(0.3013)\n", - "epoch: 3, loss: 0.30131959915161133\n", - "tensor(0.3006)\n", - "epoch: 4, loss: 0.3006228804588318\n", - "tensor(0.2999)\n", - "epoch: 5, loss: 0.2999469041824341\n", - "tensor(0.2993)\n", - "epoch: 6, loss: 0.299274742603302\n", - "tensor(0.2986)\n", - "epoch: 7, loss: 0.2986060082912445\n", - "tensor(0.2979)\n", - "epoch: 8, loss: 0.2979407012462616\n", - "tensor(0.2973)\n", - "epoch: 9, loss: 0.29727888107299805\n" + "epoch: 19, loss: 15.28364363077673\n", + "epoch: 39, loss: 14.795312869325372\n", + "epoch: 59, loss: 14.536351699107472\n", + "epoch: 79, loss: 14.39902521175574\n", + "epoch: 99, loss: 14.326200708394845\n" ] } ], "source": [ - "for e in range(10): # 进行 10 次更新\n", + "for e in range(100): # 进行 100 次更新\n", " y_ = linear_model(x_train)\n", " loss = get_loss(y_, y_train)\n", " \n", " w.grad.zero_() # 记得归零梯度\n", " b.grad.zero_() # 记得归零梯度\n", " loss.backward()\n", - " print(loss.data)\n", + " \n", " w.data = w.data - 1e-2 * w.grad.data # 更新 w\n", " b.data = b.data - 1e-2 * b.grad.data # 更新 b \n", - " print('epoch: {}, loss: {}'.format(e, loss.item()))" + " if (e + 1) % 20 == 0:\n", + " print('epoch: {}, loss: {}'.format(e, loss.item()))" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 15, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD4CAYAAAD8Zh1EAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAAAZoElEQVR4nO3df2xc5Z3v8fcnwSUEuLQ3WCwlxKbaiiUkJCSGDbdqmwsBsoD4IbhaqFvIqmwov0p3K1awSMACud2VrsgWWAER5FLalIsautxclG7TQhCg8stmnRSSQCLqgNO0MYGm/EjID3/vHzMOxh17xvaZOWfOfF7SyDPnnJzz9ZH9zePnPM/3UURgZmb1b1zaAZiZWTKc0M3McsIJ3cwsJ5zQzcxywgndzCwnDkjrwocffni0tramdXkzs7rU2dn5TkQ0l9qXWkJvbW2lo6MjrcubmdUlSZuH2ucuFzOznHBCNzPLCSd0M7OcSK0PvZQ9e/bQ09PDrl270g4lNyZMmMDkyZNpampKOxQzq7JMJfSenh4OPfRQWltbkZR2OHUvIti+fTs9PT0cc8wxaYdjZlWWqS6XXbt2MWnSJCfzhEhi0qRJ/ovHLCuWLYPWVhg3rvB12bJET5+pFjrgZJ4w30+zjFi2DBYuhI8+KnzevLnwGaC9PZFLZKqFbmaWWzfd9Eky7/fRR4XtCXFCT1hrayvvvPNO2mGYWda89dbIto9CXSf0KndHERH09fUle1Iza0xTpoxs+yjUbULv747avBkiPumOGmtS7+7u5thjj+XSSy9l2rRp3H777Zx00kmccMIJ3HLLLfuPO//885k9ezbHH388S5YsGeN3Y2a5t2gRTJz46W0TJxa2J6TihC5pvKT/lPREiX0HSnpU0iZJL0pqTSzCIVSzO2rjxo1cddVVLF68mC1btvDSSy/R1dVFZ2cnzzzzDABLly6ls7OTjo4O7rrrLrZv3z72C5tZfrW3w5Il0NICUuHrkiWJPRCFkbXQrwPWD7Hvm8B7EfHnwGLgX8YaWDnV7I5qaWlhzpw5rFq1ilWrVnHiiScya9YsNmzYwMaNGwG46667mDFjBnPmzOHtt9/ev93MbEjt7dDdDX19ha8JJnOocNiipMnA2cAi4O9LHHIecGvx/XLgHkmKKq5APWVKoZul1PaxOvjgg4FCH/qNN97IFVdc8an9Tz/9NL/85S95/vnnmThxInPnzvVYbzNLXaUt9H8F/gEY6gnhUcDbABGxF9gBTBp8kKSFkjokdfT29o482gFq0B3FmWeeydKlS/nggw8A2LJlC9u2bWPHjh187nOfY+LEiWzYsIEXXnghuYuamY1S2YQu6RxgW0R0jvViEbEkItoioq25uWR99orVoDuKM844g6997WuccsopTJ8+nYsuuoj333+f+fPns3fvXo477jhuuOEG5syZk9xFzcxGSeV6RSR9D/gGsBeYAPwX4KcR8fUBx/wcuDUinpd0APA7oHm4Lpe2trYYvMDF+vXrOe6440b7vdgQfF/N8kNSZ0S0ldpXtoUeETdGxOSIaAUuBp4amMyLVgCXFd9fVDymav3nZmb2p0Zdy0XSbUBHRKwAHgR+KGkT8C6FxG9mZjU0ooQeEU8DTxff3zxg+y7gfyQZmJmZjUzdzhQ1M7NPc0I3M8sJJ3Qzs5xwQh+Dhx56iN/+9rf7P19++eWsW7duzOft7u7mxz/+8Yj/3YIFC1i+fPmYr29m9am+E3q16+eWMTihP/DAA0ydOnXM5x1tQjezxla/Cb1a9XOBH/3oR5x88snMnDmTK664gn379rFgwQKmTZvG9OnTWbx4McuXL6ejo4P29nZmzpzJzp07mTt3Lv2TpQ455BCuv/56jj/+eObNm8dLL73E3Llz+cIXvsCKFSuAQuL+8pe/zKxZs5g1axa/+tWvALjhhht49tlnmTlzJosXL2bfvn1cf/31+8v43n///UCh1sw111zDsccey7x589i2bduYv3czq2MRkcpr9uzZMdi6dev+ZNuQWloiCqn806+WlsrPUcK6devinHPOid27d0dExJVXXhm33nprzJs3b/8x7733XkREfPWrX42XX355//aBn4FYuXJlREScf/75cfrpp8fu3bujq6srZsyYERERH374YezcuTMiIt54443ovyerV6+Os88+e/9577///rj99tsjImLXrl0xe/bsePPNN+Oxxx6LefPmxd69e2PLli1x2GGHxU9+8pOS35OZ5QOF+T8l82rmFomuWJXq5z755JN0dnZy0kknAbBz507mz5/Pm2++ybXXXsvZZ5/NGWecUfY8n/nMZ5g/fz4A06dP58ADD6SpqYnp06fT3d0NwJ49e7jmmmvo6upi/PjxvPHGGyXPtWrVKtauXbu/f3zH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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -523,7 +491,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "经过 10 次更新,我们发现红色的预测结果已经比较好的拟合了蓝色的真实值。\n", + "经过 100 次更新,我们发现红色的预测结果已经比较好的拟合了蓝色的真实值。\n", "\n", "现在你已经学会了你的第一个机器学习模型了,再接再厉,完成下面的小练习。" ] @@ -532,7 +500,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**小练习:**\n", + "### 2.4 练习题\n", "\n", "重启 notebook 运行上面的线性回归模型,但是改变训练次数以及不同的学习率进行尝试得到不同的结果" ] @@ -541,7 +509,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 多项式回归模型" + "## 3. 多项式回归模型" ] }, { @@ -579,7 +547,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -611,22 +579,22 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 17, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -655,7 +623,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -671,7 +639,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -695,7 +663,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -708,7 +676,10 @@ "y_train = Variable(y_train)\n", "\n", "def multi_linear(x):\n", - " return torch.mm(x, w) + b" + " return torch.mm(x, w) + b\n", + "\n", + "def get_loss(y_, y):\n", + " return torch.mean((y_ - y) ** 2)" ] }, { @@ -720,22 +691,22 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 22, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXkAAAD7CAYAAACPDORaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAAArT0lEQVR4nO3de5yOdf7H8dfHGMapCEmRUSQUjYZGR4ukzZKibG3pqHZrt9N21K62w6+DSimxirBZcqjNtpROUokaOjmFDjKOQ0njMObw/f3xvTE0mJn7vue673vez8fjetzn6/rcoz7zne/1uT5fc84hIiKJqVLQAYiISPQoyYuIJDAleRGRBKYkLyKSwJTkRUQSmJK8iEgCK3GSN7PRZrbBzBYWee4wM3vLzJaHbuuEnjczG2pmK8zsSzNrF43gRUTkwEozkh8DdN/nubuAd5xzzYF3Qo8BzgWah7YBwPDwwhQRkbKw0lwMZWapwOvOuRNCj78GOjnn1ppZQ2CWc66Fmf0zdH/Cvu870P7r1avnUlNTy/ZNREQqqPnz5290ztUv7rXKYe67QZHEvQ5oELp/FLCqyPuyQs8dMMmnpqaSmZkZZkgiIhWLma3c32sRO/Hq/J8Epe6RYGYDzCzTzDKzs7MjFY6IiBB+kl8fmqYhdLsh9PxqoHGR9zUKPfcrzrmRzrl051x6/frF/rUhIiJlFG6Snwb0D93vD7xW5PnLQ1U2GcDPB5uPFxGRyCvxnLyZTQA6AfXMLAsYBDwCTDKzq4GVwEWht08HfgusALYBV5Y1wLy8PLKystixY0dZdyFhSElJoVGjRiQnJwcdioiUQYmTvHPu9/t5qUsx73XADWUNqqisrCxq1apFamoqZhaJXUoJOefYtGkTWVlZNG3aNOhwRKQMYv6K1x07dlC3bl0l+ACYGXXr1tVfUSJxLOaTPKAEHyD97EXiW1wkeRGRRHb//TB7dnT2rSRfAkOHDqVly5ZceumlTJs2jUceeQSA//znPyxevHj3+8aMGcOaNWt2P77mmmv2el1EZF/LlsGgQfD++9HZf7hXvFYIzz33HG+//TaNGjUCoGfPnoBP8j169KBVq1aAT/InnHACRx55JAAvvPBCMAEXkZ+fT+XK+mcWiVXPPQfJyXDttdHZv0byB3H99dfz7bffcu655zJkyBDGjBnDjTfeyJw5c5g2bRq33347J510Eo8++iiZmZlceumlnHTSSWzfvp1OnTrtbtNQs2ZNBg4cSNu2bcnIyGD9+vUAfPPNN2RkZHDiiSdy7733UrNmzWLjGDduHG3atKFt27ZcdtllAFxxxRVMmTJl93t2fXbWrFmcccYZ9OzZk1atWnHXXXcxbNiw3e+77777ePzxxwEYPHgw7du3p02bNgwaNCjyP0AR2a+cHHjxRejbF444IjrHiK8h3s03w+efR3afJ50ETz2135dHjBjBG2+8wXvvvUe9evUYM2YMAKeeeio9e/akR48e9OnTB4AZM2bw+OOPk56e/qv9bN26lYyMDB566CHuuOMOnn/+ee69915uuukmbrrpJn7/+98zYsSIYmNYtGgRDz74IHPmzKFevXr8+OOPB/1aCxYsYOHChTRt2pTPPvuMm2++mRtu8FWtkyZN4s0332TmzJksX76cTz75BOccPXv2ZPbs2Zx55pkH3b+IhG/8eNiyBW6ISMF58TSSLydVqlShR48eAJx88sl8//33AHz88cf07dsXgEsuuaTYz7777rv07duXevXqAXDYYYcd9HgdOnTYXduelpbGhg0bWLNmDV988QV16tShcePGzJw5k5kzZ5KWlka7du1YunQpy5cvD/erikgJOAfPPgtpadCxY/SOE18j+QOMuGNdcnLy7nLEpKQk8vPzw95n5cqVKSwsBKCwsJCdO3fufq1GjRp7vbdv375MmTKFdevWcfHFFwP+Yqe7776b6667LuxYRKR0Zs+GhQth1CiIZqWyRvJhqFWrFr/88st+H5dERkYGU6dOBWDixInFvqdz585MnjyZTZs2AeyerklNTWX+/PkATJs2jby8vP0e5+KLL2bixIlMmTJl918O55xzDqNHjyYnJweA1atXs2HDhv3uQ0Qi59lnoU4d6NcvusdRkg9Dv379GDx4MGlpaXzzzTdcccUVXH/99btPvJbEU089xZNPPkmbNm1YsWIFhx566K/e07p1awYOHMhZZ51F27ZtufXWWwG49tpref/992nbti0ff/zxr0bv++7jl19+4aijjqJhw4YAdOvWjUsuuYSOHTty4okn0qdPn1L/khKR0svKgldfhauvhurVo3usUq0MFW3p6elu30VDlixZQsuWLQOKKPq2bdtGtWrVMDMmTpzIhAkTeO211w7+wXKU6P8GIuXt73+HBx+EFSvgmGPC35+ZzXfO/brig3ibk09A8+fP58Ybb8Q5R+3atRk9enTQIYlIFOXmwj//CeedF5kEfzBK8gE744wz+OKLL4IOQ0TKydSpsGFDdMsmi9KcvIhIOXr2WWjWDLp1K5/jKcmLiJSTTz+Fjz/2o/hK5ZR9leRFRMrJk0/CIYfAVVeV3zGV5EVEysEPP8Dkyb4R2SGHlN9xleTLQWpqKhs3bgw6DBEJ0NCh/vYvfynf4yrJl4JzbncbAcUhIiW1ZQs8/7zvNnn00eV7bCX5g/j+++9p0aIFl19+OSeccAKrVq3ab3ve888/n5NPPpnWrVszcuTIg+77jTfeoF27drRt25YuXfx66EXbAAOccMIJfP/997+K44EHHuD222/f/b5dLZABXnrpJTp06MBJJ53EddddR0FBQaR+HCJSBqNG+UR/223lf+yI1Mmb2S3ANYADvgKuBBoCE4G6wHzgMufczv3upAQC6DQMwPLlyxk7diwZGRkHbM87evRoDjvsMLZv30779u258MILqVu3brH7zM7O5tprr2X27Nk0bdq0RO2Di8aRnZ1Nx44dGTx4MAAvv/wyAwcOZMmSJbz88st89NFHJCcn86c//Ynx48dz+eWXl/InIyKRkJ8PTz8NZ5wBxXQhj7qwk7yZHQX8BWjlnNtuZpOAfsBvgSHOuYlmNgK4Ghge7vGC0KRJEzIyMgD2as8LkJOTw/LlyznzzDMZOnQor776KgCrVq1i+fLl+03yc+fO5cwzz9zdDrgk7YOLxlG/fn2OOeYY5s6dS/PmzVm6dCmnnXYaw4YNY/78+bRv3x6A7du3c/jhh4f3AxCRMnvlFVi50if6IETqitfKQDUzywOqA2uBzsCuBuljgfsIM8kH1Wm4aOOv/bXnnTVrFm+//TYff/wx1atXp1OnTuzYsaPUxyraPhjYax/7NiDr168fkyZN4vjjj6d3796YGc45+vfvz8MPP1zqY4tIZDkHTzzhL34KLSdR7sKek3fOrQYeB37AJ/ef8dMzm51zu5qmZwFHFfd5MxtgZplmlpmdnR1uOFG3v/a8P//8M3Xq1KF69eosXbqUuXPnHnA/GRkZzJ49m++++w7Yu33wggULAL+6067Xi9O7d29ee+01JkyYQL9Qv9IuXbowZcqU3S2Df/zxR1auXBnelxaRMpkzBz75BG65BZKSgokhEtM1dYBeQFNgMzAZ6F7SzzvnRgIjwXehDDeeaOvWrRtLliyhY2gpl5o1a/LSSy/RvXt3RowYQcuWLWnRosXuaZX9qV+/PiNHjuSCCy6gsLCQww8/nLfeeosLL7yQcePG0bp1a0455RSOO+64/e6jTp06tGzZksWLF9OhQwcAWrVqxYMPPki3bt0oLCwkOTmZYcOG0aRJk8j9EESkRJ580veM798/uBjCbjVsZn2B7s65q0OPLwc6An2BI5xz+WbWEbjPOXfOgfZVEVsNxwP9G4iU3ooVcNxxcNdd8H//F91jHajVcCRKKH8AMsysuvn17boAi4H3gD6h9/QHYqtJuohIFD32GFStCjfdFGwckZiTnwdMARbgyycr4adf7gRuNbMV+DLKUeEeS0QkHqxeDWPG+B41DRoEG0tEqmucc4OAQfs8/S3QIUL7370ItpSvWFo5TCRePPEEFBZCkesVAxPzV7ympKSwadMmJZsAOOfYtGkTKSkpQYciEjc2bvQrP116KaSmBh1NHKwM1ahRI7KysoiH8spElJKSQqNGjYIOQyRuDB0K27f7E66xIOaTfHJy8u6rQkVEYtmWLfDMM9C7N8RKQVrMT9eIiMSLESNg82a4++6gI9lDSV5EJAK2b/cXP3XrFkwjsv1RkhcRiYAXX4T162NrFA9K8iIiYcvL8xc/dewIZ50VdDR7i/kTryIisW7cON9O+NlnIdYu6dFIXkQkDDt3wgMP+Hn4884LOppf00heRCQML77oR/HDh8feKB40khcRKbPcXHjwQcjIgO4lbrBevjSSFxEpoxdegKwsP5qPxVE8aCQvIlIm27f7PvFnnAFdugQdzf5pJC8iUgYjR8KaNTB+fOyO4kEjeRGRUtu2DR5+GH7zG+jUKehoDkwjeRGRUho+3F/dOnly0JEcnEbyIiKlkJMDjz4KZ5/t5+NjnZK8iEgpDBkC2dlw//1BR1IySvIiIiW0YYPvUdO7t6+NjwdK8iIiJfTAA7508uGHg46k5JTkRURKYMUKvyjINddAixZBR1NyEUnyZlbbzKaY2VIzW2JmHc3sMDN7y8yWh27rROJYIiJBGDgQqlSBQYOCjqR0IjWSfxp4wzl3PNAWWALcBbzjnGsOvBN6LCISdz79FCZNgr/+FRo2DDqa0gk7yZvZocCZwCgA59xO59xmoBcwNvS2scD54R5LRKS8OQd33AGHH+6TfLyJxEi+KZANvGhmn5nZC2ZWA2jgnFsbes86oEFxHzazAWaWaWaZ2dnZEQhHRCRyZsyAWbPg73+HWrWCjqb0IpHkKwPtgOHOuTRgK/tMzTjnHOCK+7BzbqRzLt05l16/fv0IhCMiEhkFBXDnndCsGQwYEHQ0ZROJJJ8FZDnn5oUeT8En/fVm1hAgdLshAscSESk3Y8bAwoW+22RyctDRlE3YSd45tw5YZWa7ioq6AIuBaUD/0HP9gdfCPZaISHn5+We45x447TTo0yfoaMouUg3K/gyMN7MqwLfAlfhfIJPM7GpgJXBRhI4lIhJ199/v2xfMmBHbrYQPJiJJ3jn3OZBezEsx3EpfRKR4S5fC0KFw9dXQrl3Q0YRHV7yKiBThHNx8M9SoAQ89FHQ04VM/eRGRIl5/Hd5803ebPPzwoKMJn0byIiIhublwyy3QsiXccEPQ0USGRvIiIiFPPQXffONH8vFaMrkvjeRFRIC1a+HBB6FnT+jWLehoIkdJXkQEuPVW2LkTnngi6EgiS0leRCq8N96AiRN9O+FmzYKOJrKU5EWkQtu2Df70J78QyJ13Bh1N5OnEq4hUaPffD9995ztNVq0adDSRp5G8iFRYX33l5+CvugrOOivoaKJDSV5EKqTCQt8+uHZteOyxoKOJHk3XiEiFNHIkzJ0L48ZB3bpBRxM9GsmLSIWzdi3cdRd06QJ/+EPQ0USXkryIVCjO+WqaHTtg+PD4biNcEpquEZEK5d//hv/8BwYPhubNg44m+jSSF5EKY80auPFGOPVU34isIlCSF5EKwTm49lrfaXLMGEhKCjqi8qHpGhGpEMaMgenT4emnK8Y0zS4ayYtIwlu1yq/21KmTn66pSJTkRSShOefXai0ogNGjoVIFy3qarhGRhDZiBLz1li+XbNo06GjKX8R+p5lZkpl9Zmavhx43NbN5ZrbCzF42syqROpaISEksXOj7xJ9zDlx3XdDRBCOSf7jcBCwp8vhRYIhzrhnwE3B1BI8lInJA27dDv35w6KEwdmziX/S0PxFJ8mbWCDgPeCH02IDOwJTQW8YC50fiWCIiJXHrrbBoke9N06BB0NEEJ1Ij+aeAO4DC0OO6wGbnXH7ocRZwVHEfNLMBZpZpZpnZ2dkRCkdEKrKpU/1c/O23J9Z6rWURdpI3sx7ABufc/LJ83jk30jmX7pxLr1+/frjhiEgF98MPcM010L69X5i7ootEdc1pQE8z+y2QAhwCPA3UNrPKodF8I2B1BI4lIrJf+flwySW+XHLCBKiico/wR/LOubudc42cc6lAP+Bd59ylwHtAn9Db+gOvhXssEZEDue8++OgjXy557LFBRxMbonlZwJ3ArWa2Aj9HPyqKxxKRCm7aNHjoIbjySrj00qCjiR0RvRjKOTcLmBW6/y3QIZL7FxEpztdfw2WXwcknw3PPBR1NbKlgF/iKSKL55Re44AI///7KK5CSEnREsUVtDUQkbjkHV10FS5f61gVHHx10RLFHSV5E4tbjj8OUKX6Vp86dg44mNmm6RkTi0jvv+MW4L7oIbrst6Ghil5K8iMSdpUuhTx9o2RJGjaq4fWlKQkleROJKdjacd54/0fr661CzZtARxTbNyYtI3Ni+HXr18gtyv/8+pKYGHVHsU5IXkbhQWAhXXAFz58LkydBBV+GUiJK8iMSFe++FSZN8Jc2FFwYdTfzQnLyIxLwXXoCHH/arO6mSpnSU5EUkpr3yik/u55wDzzyjSprSUpIXkZg1c6Zfwu+UU/xCIMnJQUcUf5TkRSQmffQRnH8+tGoF//sf1KgRdERRlJvrzyxHgZK8iMSczz/3tfCNGsGbb0KdOkFHFEWffw7p6TB0aFR2ryQvIjFl2TK/Lushh8DbbyfwItz5+b4BfocOsGkTtGgRlcOohFJEYsayZXsajSV0V8lly+Dyy2HePLj4Yhg2DOrWjcqhNJIXkZiweDGcdRbs3OlH8FEa2AarsNCXCJ10kk/0EybAxIlRS/CgkbyIxIAvv4SuXSEpCWbN8idbE87SpXDNNf6M8rnn+uL/I4+M+mE1kheRQC1YAL/5jW849v77CZjg8/L83Hvbtv7PlRdf9OVC5ZDgQSN5EQnQvHn+IqfateHdd+GYY4KOKMIyM+Hqq/2fKn37+gqaI44o1xDCHsmbWWMze8/MFpvZIjO7KfT8YWb2lpktD90mchGUiJTSm2/6KZp69WD27ARL8Js3w403+qu4Nm6E//zHN94p5wQPkZmuyQduc861AjKAG8ysFXAX8I5zrjnwTuixiAijR/s6+GbN4IMPEqiKxjkYN86fNR4+HP70J1i0yPdHDkjYSd45t9Y5tyB0/xdgCXAU0AsYG3rbWOD8cI8lIvHNObjvPj+D0bWrH8E3bBh0VBHy1Ve+PKh/f2jaFD791FfS1K4daFgRPfFqZqlAGjAPaOCcWxt6aR2QqJc0iEgJ5OX55P6Pf8CVV8J//wu1agUdVQRs3OinZtLS/InVF16AOXOgXbugIwMimOTNrCYwFbjZObel6GvOOQe4/XxugJllmllmdnZ2pMIRkRjy00/Qo4cvLBk0yK/LGvfNxnbuhCef9HNOI0b4Vplff+1/k1WKncLFiERiZsn4BD/eOfdK6On1ZtYw9HpDYENxn3XOjXTOpTvn0uvXrx+JcEQkhixcCO3bw3vv+UHufffFebtg5/yJ1NatfXP7jh199UwUr1oNRySqawwYBSxxzj1Z5KVpQP/Q/f7Aa+EeS0Tiy+TJkJEBW7f6i5yuvjroiML0wQdw+unQu7cv7J8xw28xXNwfiZH8acBlQGcz+zy0/RZ4BDjbzJYDXUOPRaQCKCiAu+6Ciy6CNm1g/nw49dSgowrDrraYZ54J33/vp2e++AK6dw86soMK+2Io59yHwP7++OoS7v5FJL6sXw+XXeYbjF1/PTz9tB/0xqWvv/ZniidM8P2OH3vMn2StVi3oyEpMV7yKSMRMn+4rZ7Zs8fPvcTs9s3gxPPigbx5WrRoMHAh//Wvg5ZBloSQvImHbsQPuuMOXhZ94om9R0Lp10FGVwVdf+eQ+eTJUr+6/1G23QRwXhSjJi0hYFi6ESy7x+fGmm+CRRyAlJeioSsE53xly8GCYNs0X7999N9xyi++5EOeU5EWkTPLy4PHH/ZT1oYf6IpM4OA+5R0GBT+qPPQZz5/ryx0GD4C9/gcMOCzq6iFGSF5FS++QTuPZaXx7epw88+2wcLdOXk+P7yzz9tF+4o2lT/wWuvNJP0SQYJXkRKbGcHPjb33zH3IYN/TVBAfbeKp3ly30yHzPGnxlOT4eXX4YLLoDKiZsKE/ebiUjEOAdTp/oCk5UrfXPFhx/2i23HtPx8P4/03HPwxhu+l0LfvvDnP/s2wHF96W3JKMmLyAFlZvpzkB9+6CtnPvwQTjst6KgO4rvvfIOcF1+ENWv8nx3/+AcMGBBIT/cgKcmLSLGysuCee+Bf/4LDD4eRI+Gqq/w6rDFp2zZ/InX0aH8lVqVKfi3VYcP81apx3xGtbJTkRWQvGzb4asJhw6Cw0LcnuPvuGJ2aKSz0TXH+9S8/n/TLL34Fkl39jBs3DjrCwCnJiwgA69b55D58OOTm+tr3Bx6A1NSgI9uHc35BjsmT/RWpWVm+tr1PH99P4ayzYqrVb9CU5EUquFWrYMgQ33MrNxf+8Ad/Ff9xxwUdWRG7EvukSTBlij/7W7myXwX88cfhd79LyPLHSFCSF6mAnPOLFw0d6mc5YE9yb9482Nh2y831UzHTpvktK8vPq599tm9K36uXbxomB6QkL1KB7NjhB8JPP+2rZmrX9pUzN9wQI9Mya9fCzJnw+uu+5DEnx4/Qu3XzPWV69lRiLyUleZEE55y/QnXsWN8xd/NmOP54Xzp++eVQo0aAweXm+prMN9/025df+ucbNvQnBXr2hM6d46q1b6xRkhdJUN9/789Ljh0LS5f6PNm7N1xxBXTpEtC5yZ07/W+cWbP8NmcObN/up2FOO81fYXXOOdC2rU6eRoiSvEiCcM63QX/lFXj1VfjsM//86af73u59+wZQBrl5M8yb55P5Rx/tSergE/mAAf43zm9+AzVrlnNwFYOSvEgcy8mB2bPh7bf9NPby5f75jh19OeQFF8Axx5RTMHl5vu9wZqavhPn4Y1i0yP/2qVTJXy577bXQqZNfRi8GF71OREryInFk61afQ99/3yf2jz/27VmqVvXl4bfe6otOGjaMciA5OT6hf/mlX/90/ny/5mlurn+9dm2/gvdFF/nFXTt08LXsUu6U5EViVF6e74Sbmenbnc+d6xfmKCjwfbVOPtk3DOva1efRqJyb3LrVT+gvWeJvFy/2if2bb/a855BDoF073/QrPd1vxxxTIZp/xQMleZGAbd8O337r8+aSJT6Rf/WVv5+X599z6KG+aeLAgX6AfMopEVzXIifHn6VdsWLvbfly+OGHPe9LSoJjj4W0NOjf38+pt2kDTZooocewqCd5M+sOPA0kAS845x6J9jFFYoFzPn9u2uRbBqxZ47fVq/3trry6Zs3en2vc2E9fn3uuv01L8yWPZSo22bFj74OuXu0vKlq50gewcqUPsKi6dX0yP/10f+CWLf3WrJmfF5K4EtUkb2ZJwDDgbCAL+NTMpjnnFkfzuFJ+tm71CWz9evjxR19MUXTLyfHNAXdt27f7vJOf70epeXn+fkGB359ze+8/KWnPVqmSv5K9cmVfcbfrdtdWpcret8Xd3/X5olulSntvZj6OwsI9t4WFPtbcXF8FuHOnv791q99ycvZsP/3kfxY//rhnJF5U5cp+zrxJE3/xZrNmPqcee6xvJVC79n5+2Pn5frGLzZv9QTZt2nvLzvb/EBs2+Nv16/1791W9uj94kyZ+rrxJE38l1K5AdLFRQon2SL4DsMI59y2AmU0EegFK8nGgoMAP9L77zg/6im5r1/ockpOz/89Xr+6oVQuqV3NUS3FUT3FUSymkVhVH5WqO5MqFJCc5kis7KpnDzIFj960DCgqMglCSLSgw8guM/ALILzDydhg7cowteUZevt925hG6tT23oefy8iI3pZCU5KiS7KhR3VGzeiE1qhVSs1oBNVIKaXVkHnVb7OSwGjupWzOXw2rkckStrRxZcwtHVt9MvSpbqJSX63/jbd/uf/t9sg1mbdvzG+OXX/bcbtkCP/984B82+N8ODRr47cQT/WT9EUfAUUft2Y480r9P0ysVRrST/FHAqiKPs4BTonxMKY3cXNyPP/HDol+Y/0kBi5YmseTbKixeWZOv1x3Kjvw9/4kkWQGNq22kSdX1dEjewBE1NtCg5gYauHU0KFxLvYL11M7fSO38jRy6M5sq27bBtgC/2z4cUEgl8qlMHsnkU5l8KuMwCqm011b0keGoRCFV2EkVdpJMHkkFhVAA7AB+DDOwpCQ/uq5WzdeK16zpK1Hq1PFtc2vV8om5dm0/Ob/rft26e7bDDkvoJeyk7AL/r8LMBgADAI4++uiAo0kA+fn+z/W1a/22bp3fsrN3bz+uzeWjtcfw6ZYWfJp/Epmks5E9XalS+Y6WzKMri2nJEo6tuprUGtk0qvUzlWtU9dfBV68OKSk+MaWk+K1qKlQ5zs+LFJ07OdAcya55GLPit+I4t2fb9/G+2645F+cw50gKbVWL20fR/Rc99q77+87pmPnvUnROKSlp7zmkXXNKVav6LSVlz/1q1fzPsYIuZiHlI9pJfjVQtGt/o9BzuznnRgIjAdLT0/eZkZVf2bLFl2J8953fVq3yJ9JWrfLbunU+sRXxI3WYXa07s6qczay80/hyWzMclUiyAlofsZGeTTeS3nIlJ7fJo3WbJGo0qAmHtIFDTvejSl1eLhK3op3kPwWam1lTfHLvB1wS5WPGvy1bfPnasmXw9df+dvlyn9T3rYSoXt2XYzRu7Ht+NGqEO6IhX+1swX+XNuf1Tw5n3udVcNuNFOfbg9zfyV84c/LJSVSv3gBoEMS3FJFyENUk75zLN7MbgTfxJZSjnXOLonnMuLJtm7/se+HCPbcLF/oyt13M9lQ+pKdD06b+QpNjjvHP16kDZhQWwgcf+MVy/jt2T3lzejoMGuTbg7Rvrwo4kYom6nPyzrnpwPRoHyfm/fSTv/T7s8/2bMuW7ZlaSUnxtcidO0OrVtCiha+nO/ZY/9p+fPkljB/vW8iuWuWnebt2hXvv9WsXH3lkOX0/EYlJgZ94TUg7d/o+HvPm7dl2dY4CP7WSlgYXX+yvGjzxRD9CT0oq0e5/+sm3jx01yg/8d62C9sgjvm9JoP3BRSSmKMlHQk6O7xT1wQd+mzdvTzvVI47w16BfeaWfO0lLg3r1ynSY+fP9Qg8TJvjdZ2TAsGG+hWz9+hH8PiKSMJTky2LHDt8b+513/DZ/vr9yqFIln8Svu853jDrlFD9qD+PCk/x8P88+ZIjv3lqjhl/N549/9H8EiIgciJJ8STjn50WmT4e33vIJfscOP09yyilw111wxhm+iXeEVmXIzfVTMo8+6ismjz8ennkGLrvMXw8jIlISSvL7s3WrH6VPn+63VaELd0880Q+ju3TxCx9EuEd2Tg6MHAlPPOH7SbVv7+/37KlydREpPSX5ojZuhP/+16+dNnOmH07XquW7SA0a5NsCRqlcJS/PL9H2j3/4njCdO8O4cf5WbUZEpKyU5NetgylT/MKY77/vSxqPPhquv94Pn08/3V+aHyXO+UPfc4+vqDzjDP/41FOjdkgRqUAqZpL/6SeYOtWXqcya5RN7q1Zw991+Ucy0tHIZPs+ZA7fd5lf8adUKpk2DHj00cheRyKk4SX7nTj8VM24czJjh50eOPdYPoX//e59ly8nGjXDnnTB6tJ/9eeEFv9COmgiKSKQlflr57DN48UX4979935eGDeHGG+GSS/wimeU4bC4s9KHceadvD3777fD3v/seYCIi0ZCYSX7LFnjpJV+m8sUXfk79/PPhiiv8SdQAhswLF/pp/o8+8tP8w4fDCSeUexgiUsEkVpL//HOfPceP9yWQaWnw7LN+OiZiqx6XTkGBL4H82998oc6oUf53jcohRaQ8JEaS//BDP/cxd65v5tWvn69lb98+0LOY337r59o//BB694Z//lPtB0SkfCVGkq9c2VfMDBnis2rACxE750fst9ziR+zjxsEf/qCqGREpf4mR5E85BZYsiYks+tNPfjpm2jR/IdOLL/qyexGRICTGzPCB1gMtRwsW+IKdGTP8HxVvvaUELyLBSowkHzDnfCHPqaf6rpEffAA336yTqyISPKWhMG3b5qdnrrvOr5u6YIGfPRIRiQVK8mH44QffXfhf//L9y6ZPL/N6ICIiUZEYJ14DkJkJv/udH8n/73++QaWISKzRSL4MXnnFt5KvWtU3GVOCF5FYFVaSN7PBZrbUzL40s1fNrHaR1+42sxVm9rWZnRN2pDHAOXjsMbjwQr/03rx50Lp10FGJiOxfuCP5t4ATnHNtgGXA3QBm1groB7QGugPPmVlSmMcKVH6+P7l6551w0UXw7rvQoEHQUYmIHFhYSd45N9M5lx96OBdoFLrfC5jonMt1zn0HrAA6hHOsIOXm+k4Jzz/vOxNPmADVqgUdlYjIwUVyTv4qYEbo/lHAqiKvZYWe+xUzG2BmmWaWmZ2dHcFwImPbNujVy68xMmQIPPSQ6t9FJH4ctLrGzN4GjijmpYHOuddC7xkI5APjSxuAc24kMBIgPT3dlfbz0fTzz36lpjlzfC+aq64KOiIRkdI5aJJ3znU90OtmdgXQA+jinNuVpFcDjYu8rVHoubiRnQ3du8NXX8HEidC3b9ARiYiUXrjVNd2BO4CezrltRV6aBvQzs6pm1hRoDnwSzrHK0/r1/urVxYvhtdeU4EUkfoV7MdSzQFXgLfMNwuY65653zi0ys0nAYvw0zg3OuYIwj1UuNm6Erl1h5Up44w2f7EVE4lVYSd451+wArz0EPBTO/svb5s3QrRusWOGvYlWCF5F4p7YGIVu2+Dn4RYv8FE3nzkFHJCISPiV5/HKw550H8+fDlCk+2YuIJIIKn+R37ICePX2Z5MSJviZeRCRRVOgkX1jol4R9912/DquqaEQk0VToazdvvx0mTYLBg+Gyy4KORkQk8ipskn/qKXjySfjzn+G224KORkQkOipkkp88GW69FS64wPejiYE1wEVEoqLCJfkPPvBTM6eeCi+9BElx3QBZROTAKlSSX7bMV9KkpvpaeLULFpFEV2GS/M8/+/LIypVhxgyoWzfoiEREoq9ClFAWFMCll/p2BW+/DU2bBh2RiEj5qBBJ/m9/871onntO/WhEpGJJ+Omal1+Ghx+GAQPg+uuDjkZEpHwldJL/7DO48ko47TR45hmVSopIxZOwST47G84/359gnToVqlQJOiIRkfKXkHPyhYW+Fn79evjwQ2jQIOiIRESCkZBJ/rHH4M03/YnW9PSgoxERCU7CTdd8+CHcey9cdJFOtIqIJFSS37gR+vXzV7Q+/7xOtIqIJMx0TWEhXH65P+E6dy4cckjQEYmIBC9hkvzgwb5dwbBhkJYWdDQiIrEhItM1ZnabmTkzqxd6bGY21MxWmNmXZtYuEsfZn48+goED/cpOf/xjNI8kIhJfwk7yZtYY6Ab8UOTpc4HmoW0AMDzc4xxI9erQtavm4UVE9hWJkfwQ4A7AFXmuFzDOeXOB2mbWMALHKlZaGrzxBhx6aLSOICISn8JK8mbWC1jtnPtin5eOAlYVeZwVeq64fQwws0wzy8zOzg4nHBER2cdBT7ya2dvAEcW8NBC4Bz9VU2bOuZHASID09HR3kLeLiEgpHDTJO+e6Fve8mZ0INAW+MD8R3ghYYGYdgNVA4yJvbxR6TkREylGZp2ucc1855w53zqU651LxUzLtnHPrgGnA5aEqmwzgZ+fc2siELCIiJRWtOvnpwG+BFcA24MooHUdERA4gYkk+NJrfdd8BN0Rq3yIiUjYJ1btGRET2piQvIpLAzM+sxAYzywZWlvHj9YCNEQwnSPousSlRvkuifA/Qd9mliXOufnEvxFSSD4eZZTrnEmKJEH2X2JQo3yVRvgfou5SEpmtERBKYkryISAJLpCQ/MugAIkjfJTYlyndJlO8B+i4HlTBz8iIi8muJNJIXEZF9JFSSN7MHQitRfW5mM83syKBjKiszG2xmS0Pf51Uzqx10TGVlZn3NbJGZFZpZ3FVCmFl3M/s6tNLZXUHHU1ZmNtrMNpjZwqBjCZeZNTaz98xscei/rZuCjqkszCzFzD4xsy9C3+MfET9GIk3XmNkhzrktoft/AVo5564POKwyMbNuwLvOuXwzexTAOXdnwGGViZm1BAqBfwJ/dc5lBhxSiZlZErAMOBvfhO9T4PfOucWBBlYGZnYmkINf0OeEoOMJR2gRoobOuQVmVguYD5wfb/8u5lv41nDO5ZhZMvAhcFNosaWISKiR/K4EH1KDvVeriivOuZnOufzQw7n4ds1xyTm3xDn3ddBxlFEHYIVz7lvn3E5gIn7ls7jjnJsN/Bh0HJHgnFvrnFsQuv8LsIT9LEwUy0Kr5+WEHiaHtojmrYRK8gBm9pCZrQIuBf4edDwRchUwI+ggKqgSr3ImwTCzVCANmBdwKGViZklm9jmwAXjLORfR7xF3Sd7M3jazhcVsvQCccwOdc42B8cCNwUZ7YAf7LqH3DATy8d8nZpXku4hEmpnVBKYCN+/zl3zccM4VOOdOwv+13sHMIjqVFq1+8lGzv5WqijEe39d+UBTDCcvBvouZXQH0ALq4GD95Uop/l3ijVc5iVGgOeyow3jn3StDxhMs5t9nM3gO6AxE7OR53I/kDMbPmRR72ApYGFUu4zKw7cAfQ0zm3Leh4KrBPgeZm1tTMqgD98CufSYBCJyxHAUucc08GHU9ZmVn9XZVzZlYNf4I/onkr0aprpgIt8JUcK4HrnXNxOeoysxVAVWBT6Km5cVwp1Bt4BqgPbAY+d86dE2hQpWBmvwWeApKA0c65h4KNqGzMbALQCd/tcD0wyDk3KtCgysjMTgc+AL7C//8OcI9zbnpwUZWembUBxuL/26oETHLO3R/RYyRSkhcRkb0l1HSNiIjsTUleRCSBKcmLiCQwJXkRkQSmJC8iksCU5EVEEpiSvIhIAlOSFxFJYP8PxTZGDwihxVcAAAAASUVORK5CYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXkAAAD7CAYAAACPDORaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAprklEQVR4nO3deXhUVbb38e8iBMI8S6OgwRaRQREJGLQVGhRQEURFaW2cRbr1tlM74tt4Ha4DjiiKKIheuSCDA22LAiqiImrACQEBUSGIEEBBIECG/f6xq0jAAEmqKqeq8vs8z3lODafOWZVh1a599lnbnHOIiEhyqhJ0ACIiEjtK8iIiSUxJXkQkiSnJi4gkMSV5EZEkpiQvIpLESp3kzWycma03s0XFHmtoZrPMbHlo3SD0uJnZSDNbYWZfmdlxsQheRET2rywt+fFAn70euxV4xznXCngndB/gNKBVaBkCPB1ZmCIiUh5WlouhzCwdeMM51z50/1ugu3NurZk1A+Y451qb2TOh2xP33m5/+2/cuLFLT08v3zsREamkFixYsME516Sk56pGuO+mxRL3z0DT0O1DgNXFtssOPbbfJJ+enk5WVlaEIYmIVC5m9uO+novaiVfnvxKUuUaCmQ0xsywzy8rJyYlWOCIiQuRJfl2om4bQen3o8TVAi2LbNQ899jvOuTHOuQznXEaTJiV+2xARkXKKNMlPBy4O3b4YeL3Y4xeFRtlkApsP1B8vIiLRV+o+eTObCHQHGptZNjAcuB+YbGaXAz8C54U2fxM4HVgBbAcuLW+AeXl5ZGdns2PHjvLuQiKQlpZG8+bNSU1NDToUESmHUid559xf9vFUzxK2dcDV5Q2quOzsbOrUqUN6ejpmFo1dSik559i4cSPZ2dm0bNky6HBEpBzi/orXHTt20KhRIyX4AJgZjRo10rcokQQW90keUIIPkH72IoktIZK8iEgyu+sumDs3NvtWki+FkSNH0qZNGy688EKmT5/O/fffD8Brr73G4sWLd283fvx4fvrpp933r7jiij2eFxHZ27JlMHw4vP9+bPYf6RWvlcJTTz3F7Nmzad68OQD9+vUDfJLv27cvbdu2BXySb9++PQcffDAAzz33XDABF5Ofn0/Vqvo1i8Srp56C1FS48srY7F8t+QMYOnQoK1eu5LTTTuPRRx9l/PjxXHPNNcybN4/p06dz0003ceyxx/LAAw+QlZXFhRdeyLHHHktubi7du3ffXaahdu3aDBs2jA4dOpCZmcm6desA+O6778jMzOToo4/mjjvuoHbt2iXG8eKLL3LMMcfQoUMHBg8eDMAll1zC1KlTd28Tfu2cOXM46aST6NevH23btuXWW29l1KhRu7e78847eeihhwAYMWIEnTt35phjjmH48OHR/wGKyD5t3QrPPw8DB8If/hCbYyRWE++66+CLL6K7z2OPhcce2+fTo0eP5q233uK9996jcePGjB8/HoATTjiBfv360bdvX84991wAZsyYwUMPPURGRsbv9rNt2zYyMzO59957ufnmm3n22We54447uPbaa7n22mv5y1/+wujRo0uM4ZtvvuGee+5h3rx5NG7cmE2bNh3wbS1cuJBFixbRsmVLPv/8c6677jquvtqPap08eTJvv/02M2fOZPny5Xz66ac45+jXrx9z587l5JNPPuD+RSRyEybAli1wdVQGnJdMLfkKUq1aNfr27QtAp06d+OGHHwD4+OOPGThwIAAXXHBBia999913GThwII0bNwagYcOGBzxely5ddo9t79ixI+vXr+enn37iyy+/pEGDBrRo0YKZM2cyc+ZMOnbsyHHHHcfSpUtZvnx5pG9VRErBOXjySejYEbp2jd1xEqslv58Wd7xLTU3dPRwxJSWF/Pz8iPdZtWpVCgsLASgsLGTXrl27n6tVq9Ye2w4cOJCpU6fy888/c/755wP+YqfbbruNq666KuJYRKRs5s6FRYtg7FiI5UhlteQjUKdOHX777bd93i+NzMxMpk2bBsCkSZNK3KZHjx5MmTKFjRs3AuzurklPT2fBggUATJ8+nby8vH0e5/zzz2fSpElMnTp19zeH3r17M27cOLZu3QrAmjVrWL9+/T73ISLR8+ST0KABDBoU2+MoyUdg0KBBjBgxgo4dO/Ldd99xySWXMHTo0N0nXkvjscce45FHHuGYY45hxYoV1KtX73fbtGvXjmHDhtGtWzc6dOjADTfcAMCVV17J+++/T4cOHfj4449/13rfex+//fYbhxxyCM2aNQOgV69eXHDBBXTt2pWjjz6ac889t8wfUiJSdtnZ8OqrcPnlULNmbI9VppmhYi0jI8PtPWnIkiVLaNOmTUARxd727dupUaMGZsakSZOYOHEir7/++oFfWIGS/XcgUtH+9S+4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\n", "text/plain": [ "
" ] @@ -764,14 +735,14 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "tensor(447.3372, grad_fn=)\n" + "tensor(1144.2655, grad_fn=)\n" ] } ], @@ -783,7 +754,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ @@ -793,17 +764,17 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "tensor([[ -60.7756],\n", - " [ -81.7448],\n", - " [-401.0452]])\n", - "tensor([-15.4545])\n" + "tensor([[ -94.7455],\n", + " [-139.1247],\n", + " [-629.8584]])\n", + "tensor([-25.7413])\n" ] } ], @@ -815,7 +786,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ @@ -826,22 +797,22 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 27, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXkAAAD7CAYAAACPDORaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAAAsgUlEQVR4nO3deZzO5f7H8densS8hW4qMyilLREPUqZyUVA6plNNCqzpHv/ZdJ62nRUXWEsLJIWucjiSVtFAGLbYiKRMxyD6YMdfvj+sehmaYmfu+53vPPe/n4/F93Nv3/l6fe9Tnvu7re30/lznnEBGR+HRU0AGIiEj0KMmLiMQxJXkRkTimJC8iEseU5EVE4piSvIhIHMtzkjezEWa2wcwWZ3vuGDP7wMxWhG6rhJ43M+tvZivN7Fszax6N4EVE5PDy05MfCbQ/5LmHgQ+dc/WBD0OPAS4G6oe2HsCQ8MIUEZGCsPxcDGVmicC7zrnGocffA22cc+vMrBYw2zl3ipm9Hro/9tD9Dnf8atWqucTExIJ9EhGRYmrBggUbnXPVc3qtRJjHrpktcf8G1AzdPx5Yk22/lNBzh03yiYmJJCcnhxmSiEjxYmY/5/ZaxE68Ov+TIN81Esysh5klm1lyampqpMIRERHCT/LrQ8M0hG43hJ7/FaiTbb/aoef+wDk31DmX5JxLql49x18bIiJSQOEm+WlA99D97sDUbM93C82yaQVsPdJ4vIiIRF6ex+TNbCzQBqhmZilAb+B5YLyZ3Qz8DFwV2n06cAmwEtgF3FjQANPT00lJSWH37t0FPYSEoUyZMtSuXZuSJUsGHYqIFECek7xz7m+5vNQ2h30d0LOgQWWXkpJCxYoVSUxMxMwicUjJI+ccmzZtIiUlhXr16gUdjogUQMxf8bp7926qVq2qBB8AM6Nq1ar6FSVShMV8kgeU4AOkv71I0VYkkryISDx76imYMyc6x1aSz4P+/fvToEEDrr32WqZNm8bzzz8PwDvvvMPSpUv37zdy5EjWrl27//Ett9xy0OsiIof64Qfo3Rs++SQ6xw/3itdiYfDgwcyaNYvatWsD0LFjR8An+Q4dOtCwYUPAJ/nGjRtz3HHHATBs2LBgAs4mIyODEiX0zywSqwYPhpIl4dZbo3N89eSP4Pbbb2fVqlVcfPHF9O3bl5EjR3LHHXfwxRdfMG3aNB544AFOP/10XnjhBZKTk7n22ms5/fTTSUtLo02bNvvLNFSoUIFevXrRtGlTWrVqxfr16wH48ccfadWqFaeddhqPPfYYFSpUyDGO0aNH06RJE5o2bcr1118PwA033MDEiRP375P13tmzZ3POOefQsWNHGjZsyMMPP8ygQYP27/fEE0/w0ksvAdCnTx9atGhBkyZN6N27d+T/gCKSqx074M03oUsXOPbY6LRRtLp4d98NX38d2WOefjr065fry6+99hozZszg448/plq1aowcORKAs846i44dO9KhQweuvPJKAN577z1eeuklkpKS/nCcnTt30qpVK5599lkefPBB3njjDR577DHuuusu7rrrLv72t7/x2muv5RjDkiVLeOaZZ/jiiy+oVq0amzdvPuLHWrhwIYsXL6ZevXosWrSIu+++m549/azW8ePH8/777zNz5kxWrFjBV199hXOOjh07MmfOHM4999wjHl9EwjdmDGzbBj0jMuE8Z+rJF5JSpUrRoUMHAM444wxWr14NwNy5c+nSpQsA11xzTY7v/eijj+jSpQvVqlUD4Jhjjjliey1bttw/t71Zs2Zs2LCBtWvX8s0331ClShXq1KnDzJkzmTlzJs2aNaN58+YsX76cFStWhPtRRSQPnIOBA6FZM2jdOnrtFK2e/GF63LGuZMmS+6cjJiQkkJGREfYxS5QoQWZmJgCZmZns3bt3/2vly5c/aN8uXbowceJEfvvtN66++mrAX+z0yCOPcNttt4Udi4jkz5w5sHgxDB8O0ZyprJ58GCpWrMj27dtzfZwXrVq1YtKkSQCMGzcux33OP/98JkyYwKZNmwD2D9ckJiayYMECAKZNm0Z6enqu7Vx99dWMGzeOiRMn7v/lcNFFFzFixAh27NgBwK+//sqGDRtyPYaIRM7AgVClCnTtGt12lOTD0LVrV/r06UOzZs348ccfueGGG7j99tv3n3jNi379+vHKK6/QpEkTVq5cSaVKlf6wT6NGjejVqxfnnXceTZs25d577wXg1ltv5ZNPPqFp06bMnTv3D733Q4+xfft2jj/+eGrVqgVAu3btuOaaa2jdujWnnXYaV155Zb6/pEQk/1JSYMoUuPlmKFcuum3la2WoaEtKSnKHLhqybNkyGjRoEFBE0bdr1y7Kli2LmTFu3DjGjh3L1KlTj/zGQhTv/wYihe3xx+GZZ2DlSjjxxPCPZ2YLnHN/nPFBURuTj0MLFizgjjvuwDlH5cqVGTFiRNAhiUgU7dkDr78Ol14amQR/JEryATvnnHP45ptvgg5DRArJpEmwYUN0p01mpzF5EZFCNHAgnHwytGtXOO0pyYuIFJL582HuXN+LP6qQsq+SvIhIIXnlFTj6aLjppsJrU0leRKQQ/PILTJjgC5EdfXThtaskXwgSExPZuHFj0GGISID69/e3d95ZuO0qyeeDc25/GQHFISJ5tW0bvPGGrzZ5wgmF27aS/BGsXr2aU045hW7dutG4cWPWrFmTa3neyy67jDPOOINGjRoxdOjQIx57xowZNG/enKZNm9K2rV8PPXsZYIDGjRuzevXqP8Tx9NNP88ADD+zfL6sEMsBbb71Fy5YtOf3007ntttvYt29fpP4cIlIAw4f7RH/ffYXfdkTmyZvZPcAtgAO+A24EagHjgKrAAuB659zeXA+SBwFUGgZgxYoVjBo1ilatWh22PO+IESM45phjSEtLo0WLFlxxxRVUrVo1x2OmpqZy6623MmfOHOrVq5en8sHZ40hNTaV169b06dMHgLfffptevXqxbNky3n77bT7//HNKlizJP/7xD8aMGUO3bt3y+ZcRkUjIyIBXX4VzzoEcqpBHXdhJ3syOB+4EGjrn0sxsPNAVuATo65wbZ2avATcDQ8JtLwh169alVatWAAeV5wXYsWMHK1as4Nxzz6V///5MmTIFgDVr1rBixYpck/y8efM499xz95cDzkv54OxxVK9enRNPPJF58+ZRv359li9fztlnn82gQYNYsGABLVq0ACAtLY0aNWqE9wcQkQKbPBl+/tkn+iBE6orXEkBZM0sHygHrgPOBrALpo4AnCDPJB1VpOHvhr9zK886ePZtZs2Yxd+5cypUrR5s2bdi9e3e+28pePhg46BiHFiDr2rUr48eP59RTT6Vz586YGc45unfvznPPPZfvtkUkspyDl1/2Fz+FlpModGGPyTvnfgVeAn7BJ/et+OGZLc65rKLpKcDxOb3fzHqYWbKZJaempoYbTtTlVp5369atVKlShXLlyrF8+XLmzZt32OO0atWKOXPm8NNPPwEHlw9euHAh4Fd3yno9J507d2bq1KmMHTuWrqF6pW3btmXixIn7SwZv3ryZn3/+ObwPLSIF8sUX8NVXcM89kJAQTAyRGK6pAnQC6gFbgAlA+7y+3zk3FBgKvgpluPFEW7t27Vi2bBmtQ0u5VKhQgbfeeov27dvz2muv0aBBA0455ZT9wyq5qV69OkOHDuXyyy8nMzOTGjVq8MEHH3DFFVcwevRoGjVqxJlnnsmf/vSnXI9RpUoVGjRowNKlS2nZsiUADRs25JlnnqFdu3ZkZmZSsmRJBg0aRN26dSP3RxCRPHnlFV8zvnv34GIIu9SwmXUB2jvnbg497ga0BroAxzrnMsysNfCEc+6iwx2rOJYaLgr0byCSfytXwp/+BA8/DP/6V3TbOlyp4UhMofwFaGVm5cyvb9cWWAp8DFwZ2qc7EFtF0kVEoujFF6F0abjrrmDjiMSY/JfARGAhfvrkUfjhl4eAe81sJX4a5fBw2xIRKQp+/RVGjvQ1amrWDDaWiMyucc71Bnof8vQqoGWEjr9/EWwpXLG0cphIUfHyy5CZCdmuVwxMzF/xWqZMGTZt2qRkEwDnHJs2baJMmTJBhyJSZGzc6Fd+uvZaSEwMOpoisDJU7dq1SUlJoShMr4xHZcqUoXbt2kGHIVJk9O8PaWn+hGssiPkkX7Jkyf1XhYqIxLJt22DAAOjcGWJlQlrMD9eIiBQVr70GW7bAI48EHckBSvIiIhGQluYvfmrXLphCZLlRkhcRiYA334T162OrFw9K8iIiYUtP9xc/tW4N550XdDQHi/kTryIisW70aF9OeOBAiLVLetSTFxEJw9698PTTfhz+0kuDjuaP1JMXEQnDm2/6XvyQIbHXiwf15EVECmzPHnjmGWjVCtrnucB64VJPXkSkgIYNg5QU35uPxV48qCcvIlIgaWm+Tvw550DbtkFHkzv15EVECmDoUFi7FsaMid1ePKgnLyKSb7t2wXPPwV/+Am3aBB3N4aknLyKST0OG+KtbJ0wIOpIjU09eRCQfduyAF16ACy/04/GxTkleRCQf+vaF1FR46qmgI8kbJXkRkTzasMHXqOnc2c+NLwqU5EVE8ujpp/3UyeeeCzqSvFOSFxHJg5Ur/aIgt9wCp5wSdDR5F5Ekb2aVzWyimS03s2Vm1trMjjGzD8xsRei2SiTaEhEJQq9eUKoU9O4ddCT5E6me/KvADOfcqUBTYBnwMPChc64+8GHosYhIkTN/PowfD/ffD7VqBR1N/oSd5M2sEnAuMBzAObfXObcF6ASMCu02Crgs3LZERAqbc/Dgg1Cjhk/yRU0kevL1gFTgTTNbZGbDzKw8UNM5ty60z29AzZzebGY9zCzZzJJTU1MjEI6ISOS89x7Mng2PPw4VKwYdTf5FIsmXAJoDQ5xzzYCdHDI045xzgMvpzc65oc65JOdcUvXq1SMQjohIZOzbBw89BCefDD16BB1NwUQiyacAKc65L0OPJ+KT/nozqwUQut0QgbZERArNyJGweLGvNlmyZNDRFEzYSd459xuwxsyyJhW1BZYC04Duoee6A1PDbUtEpLBs3QqPPgpnnw1XXhl0NAUXqQJl/weMMbNSwCrgRvwXyHgzuxn4GbgqQm2JiETdU0/58gXvvRfbpYSPJCJJ3jn3NZCUw0sxXEpfRCRny5dD//5w883QvHnQ0YRHV7yKiGTjHNx9N5QvD88+G3Q04VM9eRGRbN59F95/31ebrFEj6GjCp568iEjInj1wzz3QoAH07Bl0NJGhnryISEi/fvDjj74nX1SnTB5KPXkREWDdOnjmGejYEdq1CzqayFGSFxEB7r0X9u6Fl18OOpLIUpIXkWJvxgwYN86XEz755KCjiSwleREp1nbtgn/8wy8E8tBDQUcTeTrxKiLF2lNPwU8/+UqTpUsHHU3kqScvIsXWd9/5MfibboLzzgs6muhQkheRYikz05cPrlwZXnwx6GiiR8M1IlIsDR0K8+bB6NFQtWrQ0USPevIiUuysWwcPPwxt28J11wUdTXQpyYtIseKcn02zezcMGVK0ywjnhYZrRKRY+c9/4J13oE8fqF8/6GiiTz15ESk21q6FO+6As87yhciKAyV5ESkWnINbb/WVJkeOhISEoCMqHBquEZFiYeRImD4dXn21eAzTZFFPXkTi3po1frWnNm38cE1xoiQvInHNOb9W6759MGIEHFXMsp6Ga0Qkrr32GnzwgZ8uWa9e0NEUvoh9p5lZgpktMrN3Q4/rmdmXZrbSzN42s1KRaktEJC8WL/Z14i+6CG67LehoghHJHy53AcuyPX4B6OucOxn4Hbg5gm2JiBxWWhp07QqVKsGoUfF/0VNuIpLkzaw2cCkwLPTYgPOBiaFdRgGXRaItEZG8uPdeWLLE16apWTPoaIITqZ58P+BBIDP0uCqwxTmXEXqcAhyf0xvNrIeZJZtZcmpqaoTCEZHibNIkPxb/wAPxtV5rQYSd5M2sA7DBObegIO93zg11ziU555KqV68ebjgiUsz98gvccgu0aOEX5i4Shg71K5dEQSR68mcDHc1sNTAOP0zzKlDZzLJm79QGfo1AWyIiucrIgGuu8dMlx46FUkVhukffvv6scL9+UTl82EneOfeIc662cy4R6Ap85Jy7FvgYuDK0W3dgarhtiYgczhNPwOef++mSJ50UdDR58Oqr/uTBlVfCSy9FpYloXhbwEHCvma3Ej9EPj2JbIlLMTZsGzz4LN94I114bdDR5MGCAvwz38st9acySJaPSTEQvhnLOzQZmh+6vAlpG8vgiIjn5/nu4/no44wwYPDjoaPJg0CC480647DI/rhSlBA8qayAiRdz27b4zXKoUTJ4MZcoEHdERDBniC+h07Ahvvx31EwcqayAiRZZzcNNNsHy5L11wwglBR3QEffv6MfgOHWDChEI5M6yevIgUWS+9BBMnwgsvwPnnBx3NYTgHTz3lE/wVV/igC2nqj3ryIlIkffihX4z7qqvgvvuCjuYwnIMHH/TfSN26wfDhUKLwUq+SvIgUOcuX+1mHDRr4nBmzdWkyM/2q4a+/Dj17Qv/+hV7rWMM1IlKkpKbCpZf60Y5334UKFYKOKBfp6b7n/vrr/ifHgAGBFLNXT15Eioy0NOjUyS/I/cknkJgYdES52L7d/9SYOdNP3n/00cBCUZIXkSIhMxNuuAHmzfMTU1rG6lU4v/0Gl1wC334Lw4b5ZakCpCQvIkXCY4/B+PHQp4+foBKTvv8e2reHDRv8JbiXXBJ0REryIhL7hg2D557zdbxidibNF1/AX//qZ8588gkkJQUdEaATryIS4yZP9sn9oov8ucuYnEnz9tvQti1UreqTfYwkeFCSF5EYNnOmX8LvzDP9QiBRLPFSMJmZ8PjjPsikJF8CM8bKX2q4RkRi0uef+/pdDRvC//4H5csHHdEhdu6E7t39t8+NN/qaNKVLBx3VHyjJi0jM+fprPxe+dm14/32oUiXoiA6xZo2fy/nNN/Dyy3DPPTE6jqQkLyIx5ocf/LqsRx8Ns2bF4CLcn33m58Dv2gX//W9MzKA5HI3Ji0jM+OGHA4XGYq6qpHO+imSbNlCxop+wH+MJHpTkRSRGLF0K550He/f6HvwppwQdUTbbtvlKaPfe6+vAJyf7kwVFgJK8iATu2299Bxlg9mxo0iTIaA6xeDG0aAFTpvgrsSZNgkqVgo4qz5TkRSRQCxfCX/7iC4598kkMdZCdgzff9PM3t271tY3vvz9mT7DmRkleRALz5Zd+DL5iRZgzB/70p6AjCtmyxc99v+kmXyRn0SI/llQEhZ3kzayOmX1sZkvNbImZ3RV6/hgz+8DMVoRuY20SlIgE6P334YILoFo1n+BPPDHoiEI++wyaNvXDMv/6lz9BUKtW0FEVWCR68hnAfc65hkAroKeZNQQeBj50ztUHPgw9FhFhxAg/D/7kk+HTT2NkFk1GBjzxhO+xlyjhr8Z65BFISAg6srCEneSdc+uccwtD97cDy4DjgU7AqNBuo4DLwm1LRIo253wevflm34ufMydGOslLl8JZZ8GTT8J11/nhmTPPDDqqiIjomLyZJQLNgC+Bms65daGXfgNi7ZIGESlE6ek+uT/5pK8C8N//+rH4QGVkwPPPQ7NmsGoVjBsHo0b5K7HiRMSueDWzCsAk4G7n3DbLdgbaOefMzOXyvh5AD4ATYuI3m4hE2u+/+/OYM2dC795+C3ySytKlfhWS+fN9gfrBg6FGjYCDiryI9OTNrCQ+wY9xzk0OPb3ezGqFXq8FbMjpvc65oc65JOdcUvXq1SMRjojEkKxp5h9/7OvCP/FEwAl+zx545pmDe+8TJsRlgofIzK4xYDiwzDn3SraXpgHdQ/e7A1PDbUtEipYJE6BVK1+wcfbswFfC8980TZvCP//pC4wtWQJXXx0DPyuiJxI9+bOB64Hzzezr0HYJ8DxwoZmtAC4IPRaRYmDfPnj4YV8JoEkTWLDAn9cMzIYN0K2bn5S/dy9Mn+7XEoy56meRF/aYvHPuMyC3r8G24R5fRIqW9evh+ut9gbHbb4dXX/VXswYiIwOGDvULxO7YAb16+a1s2YACKnwqNSwiETN9up85s22bH38PdHjm/fd9QbGlS33dhEGDoEGDAAMKhsoaiEjYdu+GO+/0FzjVrOmLNAaW4Jcv94G0b+9Psk6Z4uvOFMMED0ryIhKmxYt9eZcBA+Cuu+Crr6BRowACWbcOevaExo19aYI+ffyJ1csui+sTq0ei4RoRKZD0dHjpJX9xU6VK8N57vvNc6DZtghdf9N8y6elw660+qDidEplfSvIikm9ffeVz6bff+pXwBg4MYKLK9u3Qr5//ptm+Ha691k/CP+mkQg4ktmm4RkTybMcOv2Z169a+A/3OO34ufKEm+M2bfTKvWxcefxzatvXfNv/+txJ8DtSTF5Ejcs5X3r3/fvj5Z/jHP+C55wq5xMu6dfDKKzBkiL+6qlMnPx2yRYtCDKLoUZIXkcNKTva9988+g9NO87dnn12IASxb5ifbjxzpx9y7dvUlgBs3LsQgii4N14hIjlJS/EWiLVrADz/4a4oWLSqkBJ+ZeeBMbsOGPsF36wbffw9jxijB54N68iJykA0b/OzDQYN8rn34Yd9xLpShmS1bfBIfMMAn9Fq14Omn4bbbQAUMC0RJXkQA+O03n9yHDPHXEF1zjc+viYlRbtg5+OIL/1NhwgRIS4OkJHjrLejSJcCaCPFBSV6kmFuzBvr2hdde88n9uuv8+cyoL6q9bh2MHevrHyxbBhUq+CGZW2+FM86IcuPFh5K8SDGU1Xnu39/PmoEDyb1+/Sg2vH07TJ7sh2Q+/NCPB7Vs6RP91Vf7RC8RpSQvUozs3g0TJ/rJKsnJULmynznTs2cUh2V27PCVyyZN8mv+paVBvXrw6KP+AqZTT41SwwJK8iJxzzl/heqoUX50ZMsWn1cHD/ajI+XLR6HRzZt9Qp882VeD3LPHnzi94Qb/k6F162JdT6YwKcmLxKnVqw+sS718uS+h3rmzz7Nt28JRkZxA7Rx8/bWf9jh9Osyb51cOqVPHF5W//HI/9zIhIYKNSl4oyYvECed86fTJk3113UWL/PN//rMf8u7SJcLTIFNS/HJ6H30EM2b46TkAzZv7eZedOvlZMuqxB0pJXqQI27ED5syBWbPg3XdhxQr/fOvWfjrk5ZfDiSdGoCHn/DSczz/3if3jj2HlSv9alSpw4YVwySVw0UVw7LERaFAiRUlepAjZudOfMP3kE5/Y5871K9yVLg3nnecXQurUyV9DFJZdu/zwy9y5B7a1a/1rlSrBuef6AjZ/+YtfxDWiYz8SSUryIjEqPd2XE0hO9kPc8+bBd9/5oW4zP5X8/vvhggv8ItkFXrZ00yZ/4EWLYOFCvy1f7qc3gp8J06aN/3nQujWcfrrG1osQJXmRgKWlwapV8OOP/pqg777z27JlPtGD7zyfeaafx96qlb9/zDH5aCQz0/fEV6zw3xxLlhzY1q8/sN/xx0OzZr5IfPPmviENvxRpUU/yZtYeeBVIAIY5556PdpsiscA5P2a+aZM/J7l2rd9+/dXfrl7th7WzRkGy1Knjqz1efLG/bdbMT3k87IiIc35u5M8/H7z99JNvZOVK/22SpUIFX/jrkkv8Wn2NGvmGCn3lD4m2qCZ5M0sABgEXAinAfDOb5pxbGs12pfDs3OkT2Pr1fmr0li0Hbzt2+OHdrC0tzV+Qk5Hhe6np6f7+vn3+eM4dfPyEhAPbUUdBiRJ+K1nywG3WVqrUwbc53c96f/btqKMO3sx8HJmZB24zM32se/bA3r1+27PHf/6dO/3nzNp+/93/LTZvPtATz65ECT9mXreuP1958sl+rYuTTvKlBCpXDu2YkeH/iJs3w9xUSE2FjRv97YYN/tth3boDt7t2HdxQ2bL+CqeTTz7QUP36fqtTR+PoxUS0e/ItgZXOuVUAZjYO6AQoyRcB+/Yd6AyuXn3wtm6dT+w7duT+/nLloGJFf1u27IHbihX/mKCzkiscuHXOx7Avw5G5z7Evw5GR4chIh4wMR3o67N4D2/aGvjAyjL17IT3d2Jt+8G16hr+NlIQER6mSjvJlM6lQNpPyZfdRoew+ypfOoGH1dKrW280x5fZQtVwax5TZxbHltnFcmc0cV3oT1WwTR+3edeDb4Zvt8PkOf8n/tm3+WyLrGzI3FSrAccf5rWXLA/fr1j2wVaum6YsS9SR/PLAm2+MU4Mwotyn55Bz88gssWOCHaJct8/Otv//e97qzJCT4DmDduj6vHHss1KyRSc0Ku6hZegvVSm6lMluovG8jldI3UWrn7we6t1kJbefOUJd+N2wOdevT0ny3OD2dUJb2txkZfju0e1/QzwlkchQZlCCdkmRQggxK4DAyOeqgLfsjw3EUmZRiL6XYS0nSSdiXCfuA3cDvBQimRAl/qWnFin6rUMHfnnSSn5JYubLfqlTxW/XqB7Zq1cI4yyrFTeAnXs2sB9AD4IQTTgg4muJh82Y/3Xn+fL8lJ/tRgCyJiY4GJ2dwQdMtNKi8jpNKrSHR/UTttBWU2LDWj88sDA0d/P77gVkYuSlb1iex8uUPbGXK+LOJxx7r75cq5ecBZo2rZB9bSUg4cHvUUQduzQ7cZm2Qa+/V8CeGEoDSWU/m9gWS/ZhZW/a2s9rNGjfKvmXFX7r0gftlyhz8c6ZE4P/rSTER7f/SfgXqZHtcO/Tcfs65ocBQgKSkpMh02eQgmzf7C2Zmz/bbt9/63JaQ4GhUZxsdT/yFpAaLOWPvXBpt+ZzyKd/D6p1/PFCVKqHue00/N7pqVd+rrFrVb1Wq+MRdqZLvhVaq5JO7ptuJBCbaSX4+UN/M6uGTe1fgmii3Wew556fg/fe/8O7UDL5MTsA5o0zCXs6utISnKs7ivG3TOGPfAsqtToPV+AR94onQKBEuPtePy2Rtxx3nE3vp0kdoWURiTVSTvHMuw8zuAN7H/0oe4ZxbEs02i6vMTPh0cioT3tzOfz8/hl+2VgYgiUX05l3a8iEtSi2hdOKJ0KABnHoR1L/jwLSOKlWC/QAiEhVRHxh0zk0Hpke7nWJn1y6YP59v31nFmOmVGftjS9bsO56ylOcCZvFYzflceuZGjmtdF5qcCY1u0rQ5kWJIZ3+Kiu3b/VI+n3zC7x8tYtT8hgzPvIHFnEcJ0rnouO94vu13dLqhCuXPbAvlOwYdsYjEACX5WLVvn5/68v77fvvqKxbsa8pg68lYe5y0zDK0OuV3Bt24nS43VaR69eZBRywiMUhJPpZs2uTrxf7vf77E4O+/k0EJJpz4EH1rjGf+utqUL+fodp3x979D06YaRxeRw1OSD9pPP8HUqfDOO/Dpp/4Maq1a7OlwBaNK9+CFWc1ZtSqBU0+FAY/C9dcblSoFHbSIFBVK8kH45Rd4+22/NtvChf65xo3h0UfZcWFnhs5vxsuvGGvXQosW8HJf6NhR50xFJP+U5AtLaiqMH+9XUv78c/9cy5bw0ktw2WWkn3ASw4bBk1f5mjDnnw+jR/tblR8RkYJSko+mjAx/0nT4cH9lUkaGL+n6zDPQtSucdBLO+TU5H73El/k+5xz/+Kyzgg5eROKBknw0/PijT+yjRvkysNWrw113QffuvkB4yBdfwH33+RV/GjaEadOgQwf13EUkcpTkIyUz0/faBwyA997zA+iXXAIDB8Kll/oiVSEbN8JDD8GIEb5iwLBhPv+rZpWIRJrSSri2boU334RBg/zqO8ceC088Abfe6jN4NpmZfteHHvJve+ABePxxX8NLRCQalOQL6tdfoW9feP11Xyf9rLPgqafgiisO6rVnWbwYbr/dn3P9859hyBA/oUZEJJqU5PNr+XLo0wf+/W9/VerVV/uB9TPOyHH3ffvg5Zfhn//0a0IMHw433KDpkCJSOJTk8+rbb+HJJ2HKFF9yt0cPn9zr1cv1LatW+bH2zz6Dzp19p7969UKMWUSKPSX5I1myxCf3CRP8Ihi9esGddx42Wzvne+z33ON77KNHw3XXadaMiBQ+Jfnc/PCDT+5jx/rl6h57DO6994h113//3Q/HTJvmL2R6803QqoYiEhQl+UNt2OBnxwwd6odlHnwQ7r/fL3N3BAsXwpVXQkqKPyd7550aexeRYCnJZ0lLg3794Lnn/IIcf/+7773XrHnEtzoHb7zhk3qNGr7O2JlnRj9kEZEjUZLPzIT//AcefRTWrIFOneCFF+CUU/L09qzvg9GjoV07GDMmT51+EZFCUbwHE775Bs49F66/3vfYZ8/2JX/zmOB/+QVat/azKXv3hunTleBFJLYUz5781q3+UtOBA+GYY3x9ge7d8zWAnpwMf/2r78n/739w8cVRjFdEpICKV0/eOXjrLd9THzAAbrvNz6K58cZ8JfjJk/0PgNKlfZExJXgRiVVhJXkz62Nmy83sWzObYmaVs732iJmtNLPvzeyisCMN188/+2x8/fVQt65fP3Xw4CNOiczOOXjxRV+5oGlT+PJLXzlYRCRWhduT/wBo7JxrAvwAPAJgZg2BrkAjoD0w2MwSwmyrYDIzffGwRo184ZiBA2Hu3FzLEOQmI8N3/B96CK66Cj76KE8Tb0REAhVWknfOzXTOZYQezgNqh+53AsY55/Y4534CVgItw2mrQH74Adq0gTvugLPP9lXCevbM9+T1PXv8Gh9vvOEn4YwdC2XLRidkEZFIiuSY/E3Ae6H7xwNrsr2WEnruD8ysh5klm1lyampqZCLJzIT+/f2Yynff+ctOZ8zwwzT5tGuXn1U5aZK/wOnZZ3WBk4gUHUecXWNms4Bjc3ipl3NuamifXkAGMCa/ATjnhgJDAZKSklx+3/8Ha9fCTTf5BTwuvdR3v2vVKtChtm71KzV98YWvRXPTTWFHJyJSqI6Y5J1zFxzudTO7AegAtHXOZSXpX4E62XarHXouuqZM8Yt17NrlC7bfdluBq4KlpkL79v6HwLhx0KVLhGMVESkE4c6uaQ88CHR0zu3K9tI0oKuZlTazekB94Ktw2jqs7dvh5pvh8sshMREWLfIrdBQwwa9fD+edB0uXwtSpSvAiUnSFezHUQKA08IH5hDrPOXe7c26JmY0HluKHcXo65/aF2Vbupkzx4+6PPuovPc1hZaa82rgRLrjAz7icMcMnexGRosoOjLAELykpySUnJ+f/jc75cZUmTcJqf8sWXx542TJ/Fev554d1OBGRQmFmC5xzSTm9Fh9lDczCTvDbtvkx+CVL/BCNEryIxIP4SPJh2rnTT8RZsAAmTvTJXkQkHhT7JL97N3Ts6KdJjhvn58SLiMSLYp3kMzN98cmPPvL14DWLRkTiTbG+dvOBB2D8eOjTx9ctExGJN8U2yffrB6+8Av/3f3DffUFHIyISHcUyyU+YAPfe66+d6tu3wNdMiYjEvGKX5D/91A/NnHWWXz8kIZgCyCIihaJYJfkffvAzaRIT/Vx4lQsWkXhXbJL81q1+emSJEvDee1C1atARiYhEX7GYQrlvH1x7LaxcCbNmQb16QUckIlI4ikWS/+c/fS2awYNVcExEipe4H655+2147jno0cNXHxYRKU7iOskvWgQ33uiXdx0wQFMlRaT4idskn5oKl13mT7BOmhRWiXkRkSIrLsfkMzP9XPj16+Gzz6BmzaAjEhEJRlwm+Rdf9Ot4Dx4MSTmW0RcRKR7ibrjms8/gscfgqqt0olVEJK6S/MaN0LWrv6L1jTd0olVEJG6GazIzoVs3f8J13jw4+uigIxIRCV7cJPk+fXy5gkGDoFmzoKMREYkNERmuMbP7zMyZWbXQYzOz/ma20sy+NbPmkWgnN59/Dr16+ZWd/v73aLYkIlK0hJ3kzawO0A74JdvTFwP1Q1sPYEi47RxOuXJwwQUahxcROVQkevJ9gQcBl+25TsBo580DKptZrQi0laNmzWDGDKhUKVotiIgUTWEleTPrBPzqnPvmkJeOB9Zke5wSei6nY/Qws2QzS05NTQ0nHBEROcQRT7ya2Szg2Bxe6gU8ih+qKTDn3FBgKEBSUpI7wu4iIpIPR0zyzrkLcnrezE4D6gHfmB8Irw0sNLOWwK9AnWy71w49JyIihajAwzXOue+cczWcc4nOuUT8kExz59xvwDSgW2iWTStgq3NuXWRCFhGRvIrWPPnpwCXASmAXcGOU2hERkcOIWJIP9eaz7jugZ6SOLSIiBRNXtWtERORgSvIiInHM/MhKbDCzVODnAr69GrAxguEESZ8lNsXLZ4mXzwH6LFnqOueq5/RCTCX5cJhZsnMuLpYI0WeJTfHyWeLlc4A+S15ouEZEJI4pyYuIxLF4SvJDgw4ggvRZYlO8fJZ4+Rygz3JEcTMmLyIifxRPPXkRETlEXCV5M3s6tBLV12Y208yOCzqmgjKzPma2PPR5pphZ5aBjKigz62JmS8ws08yK3EwIM2tvZt+HVjp7OOh4CsrMRpjZBjNbHHQs4TKzOmb2sZktDf23dVfQMRWEmZUxs6/M7JvQ53gy4m3E03CNmR3tnNsWun8n0NA5d3vAYRWImbUDPnLOZZjZCwDOuYcCDqtAzKwBkAm8DtzvnEsOOKQ8M7ME4AfgQnwRvvnA35xzSwMNrADM7FxgB35Bn8ZBxxOO0CJEtZxzC82sIrAAuKyo/buYL+Fb3jm3w8xKAp8Bd4UWW4qIuOrJZyX4kPIcvFpVkeKcm+mcywg9nIcv11wkOeeWOee+DzqOAmoJrHTOrXLO7QXG4Vc+K3Kcc3OAzUHHEQnOuXXOuYWh+9uBZeSyMFEsC62etyP0sGRoi2jeiqskD2Bmz5rZGuBa4PGg44mQm4D3gg6imMrzKmcSDDNLBJoBXwYcSoGYWYKZfQ1sAD5wzkX0cxS5JG9ms8xscQ5bJwDnXC/nXB1gDHBHsNEe3pE+S2ifXkAG/vPErLx8FpFIM7MKwCTg7kN+yRcZzrl9zrnT8b/WW5pZRIfSolVPPmpyW6kqB2Pwde17RzGcsBzps5jZDUAHoK2L8ZMn+fh3KWq0ylmMCo1hTwLGOOcmBx1PuJxzW8zsY6A9ELGT40WuJ384ZlY/28NOwPKgYgmXmbUHHgQ6Oud2BR1PMTYfqG9m9cysFNAVv/KZBCh0wnI4sMw590rQ8RSUmVXPmjlnZmXxJ/gjmrfibXbNJOAU/EyOn4HbnXNFstdlZiuB0sCm0FPzivBMoc7AAKA6sAX42jl3UaBB5YOZXQL0AxKAEc65Z4ONqGDMbCzQBl/tcD3Q2zk3PNCgCsjM/gx8CnyH//8d4FHn3PTgoso/M2sCjML/t3UUMN4591RE24inJC8iIgeLq+EaERE5mJK8iEgcU5IXEYljSvIiInFMSV5EJI4pyYuIxDEleRGROKYkLyISx/4fZlGW5uHmJ64AAAAASUVORK5CYII=\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -870,18 +841,18 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "epoch 20, Loss: 22.71861\n", - "epoch 40, Loss: 5.37627\n", - "epoch 60, Loss: 1.32816\n", - "epoch 80, Loss: 0.38091\n", - "epoch 100, Loss: 0.15742\n" + "epoch 20, Loss: 65.56586\n", + "epoch 40, Loss: 15.41177\n", + "epoch 60, Loss: 3.70702\n", + "epoch 80, Loss: 0.97122\n", + "epoch 100, Loss: 0.32874\n" ] } ], @@ -911,22 +882,22 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 29, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -959,7 +930,9 @@ "collapsed": true }, "source": [ - "**小练习:上面的例子是一个三次的多项式,尝试使用二次的多项式去拟合它,看看最后能做到多好**\n", + "## 4. 练习题\n", + "\n", + "上面的例子是一个三次的多项式,尝试使用二次的多项式去拟合它,看看最后能做到多好\n", "\n", "**提示:参数 `w = torch.randn(2, 1)`,同时重新构建 x 数据集**" ] @@ -981,7 +954,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.9" + "version": "3.7.9" } }, "nbformat": 4, diff --git a/6_pytorch/1_NN/2-logistic-regression.ipynb b/6_pytorch/1_NN/2-logistic-regression.ipynb index cef4c03..1ced160 100644 --- a/6_pytorch/1_NN/2-logistic-regression.ipynb +++ b/6_pytorch/1_NN/2-logistic-regression.ipynb @@ -782,7 +782,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.9" + "version": "3.7.9" } }, "nbformat": 4, diff --git a/6_pytorch/README.md b/6_pytorch/README.md index cbe9c54..3645aa6 100644 --- a/6_pytorch/README.md +++ b/6_pytorch/README.md @@ -1,4 +1,15 @@ +# PyTorch + +PyTorch是基于Python的科学计算包,其旨在服务两类场合: +* 替代numpy发挥GPU潜能 +* 提供了高度灵活性和效率的深度学习平台 + +PyTorch的简洁设计使得它入门很简单,本部分内容在深入介绍PyTorch之前,先介绍一些PyTorch的基础知识,让大家能够对PyTorch有一个大致的了解,并能够用PyTorch搭建一个简单的神经网络,然后在深入学习如何使用PyTorch实现各类网络结构。在学习过程,可能部分内容暂时不太理解,可先不予以深究,后续的课程将会对此进行深入讲解。 + + + +![PyTorch Demo](imgs/PyTorch_demo.gif) ## References diff --git a/6_pytorch/imgs/PyTorch_demo.gif b/6_pytorch/imgs/PyTorch_demo.gif new file mode 100644 index 0000000..b4f1737 Binary files /dev/null and b/6_pytorch/imgs/PyTorch_demo.gif differ diff --git a/README.md b/README.md index 3b402f3..701243e 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ ## 1. 内容 1. [课程简介](CourseIntroduction.pdf) -2. [Python](0_python/) +2. [Python](0_python/README.md) - [Install Python](references_tips/InstallPython.md) - [ipython & notebook](0_python/0-ipython_notebook.ipynb) - [Python Basics](0_python/1_Basics.ipynb) @@ -21,43 +21,44 @@ - [Control Flow](0_python/5_Control_Flow.ipynb) - [Function](0_python/6_Function.ipynb) - [Class](0_python/7_Class.ipynb) -3. [numpy & matplotlib](1_numpy_matplotlib_scipy_sympy/) +3. [numpy & matplotlib](1_numpy_matplotlib_scipy_sympy/README.md) - [numpy](1_numpy_matplotlib_scipy_sympy/1-numpy_tutorial.ipynb) - [matplotlib](1_numpy_matplotlib_scipy_sympy/2-matplotlib_tutorial.ipynb) -4. [knn](2_knn/knn_classification.ipynb) +4. [kNN](2_knn/knn_classification.ipynb) 5. [kMeans](3_kmeans/1-k-means.ipynb) + - [kMeans - Image Compression](3_kmeans/2-kmeans-color-vq.ipynb) + - [Cluster Algorithms](3_kmeans/3-ClusteringAlgorithms.ipynb) 6. [Logistic Regression](4_logistic_regression/) - [Least squares](4_logistic_regression/1-Least_squares.ipynb) - [Logistic regression](4_logistic_regression/2-Logistic_regression.ipynb) + - [PCA and Logistic regression](4_logistic_regression/3-PCA_and_Logistic_Regression.ipynb) 7. [Neural Network](5_nn/) - [Perceptron](5_nn/1-Perceptron.ipynb) - [Multi-layer Perceptron & BP](5_nn/2-mlp_bp.ipynb) - [Softmax & cross-entroy](5_nn/3-softmax_ce.ipynb) -8. [PyTorch](6_pytorch/) +8. [PyTorch](6_pytorch/README.md) - Basic - - [basic/Tensor-and-Variable](6_pytorch/0_basic/1-Tensor-and-Variable.ipynb) - - [basic/autograd](6_pytorch/0_basic/2-autograd.ipynb) - - [basic/dynamic-graph](6_pytorch/0_basic/3-dynamic-graph.ipynb) + - [Tensor and Variable](6_pytorch/0_basic/1-Tensor-and-Variable.ipynb) + - [autograd](6_pytorch/0_basic/2-autograd.ipynb) - NN & Optimization - - [nn/linear-regression-gradient-descend](6_pytorch/1_NN/linear-regression-gradient-descend.ipynb) - - [nn/logistic-regression](6_pytorch/1_NN/logistic-regression.ipynb) - - [nn/nn-sequential-module](6_pytorch/1_NN/nn-sequential-module.ipynb) - - [nn/bp](6_pytorch/1_NN/bp.ipynb) - - [nn/deep-nn](6_pytorch/1_NN/deep-nn.ipynb) - - [nn/param_initialize](6_pytorch/1_NN/param_initialize.ipynb) - - [optim/sgd](6_pytorch/1_NN/optimizer/sgd.ipynb) - - [optim/adam](6_pytorch/1_NN/optimizer/adam.ipynb) + - [nn/linear-regression-gradient-descend](6_pytorch/1_NN/1-linear-regression-gradient-descend.ipynb) + - [nn/logistic-regression](6_pytorch/1_NN/2-logistic-regression.ipynb) + - [nn/nn-sequential-module](6_pytorch/1_NN/3-nn-sequential-module.ipynb) + - [nn/deep-nn](6_pytorch/1_NN/4-deep-nn.ipynb) + - [nn/param_initialize](6_pytorch/1_NN/5-param_initialize.ipynb) + - [optim/sgd](6_pytorch/1_NN/optimizer/6_1-sgd.ipynb) + - [optim/adam](6_pytorch/1_NN/optimizer/6_6-adam.ipynb) - CNN - [CNN simple demo](demo_code/3_CNN_MNIST.py) - - [cnn/basic_conv](6_pytorch/2_CNN/basic_conv.ipynb) + - [cnn/basic_conv](6_pytorch/2_CNN/1-basic_conv.ipynb) - [cnn/minist (demo code)](./demo_code/3_CNN_MNIST.py) - - [cnn/batch-normalization](6_pytorch/2_CNN/batch-normalization.ipynb) - - [cnn/regularization](6_pytorch/2_CNN/regularization.ipynb) - - [cnn/lr-decay](6_pytorch/2_CNN/lr-decay.ipynb) - - [cnn/vgg](6_pytorch/2_CNN/vgg.ipynb) - - [cnn/googlenet](6_pytorch/2_CNN/googlenet.ipynb) - - [cnn/resnet](6_pytorch/2_CNN/resnet.ipynb) - - [cnn/densenet](6_pytorch/2_CNN/densenet.ipynb) + - [cnn/batch-normalization](6_pytorch/2_CNN/2-batch-normalization.ipynb) + - [cnn/lr-decay](6_pytorch/2_CNN/3-lr-decay.ipynb) + - [cnn/regularization](6_pytorch/2_CNN/4-regularization.ipynb) + - [cnn/vgg](6_pytorch/2_CNN/6-vgg.ipynb) + - [cnn/googlenet](6_pytorch/2_CNN/7-googlenet.ipynb) + - [cnn/resnet](6_pytorch/2_CNN/8-resnet.ipynb) + - [cnn/densenet](6_pytorch/2_CNN/9-densenet.ipynb) - RNN - [rnn/pytorch-rnn](6_pytorch/3_RNN/pytorch-rnn.ipynb) - [rnn/rnn-for-image](6_pytorch/3_RNN/rnn-for-image.ipynb)