From be18b6ccc8af8c23a69194b12b79bd82a9a84e97 Mon Sep 17 00:00:00 2001 From: wizardforcel <562826179@qq.com> Date: Mon, 19 Oct 2020 21:45:53 +0800 Subject: [PATCH] 2020-10-19 21:45:53 --- docs/pytorch/00.md | 3 + docs/pytorch/01.md | 1 + docs/pytorch/02.md | 36 ++++ docs/pytorch/03.md | 24 +++ docs/pytorch/04.md | 1 + docs/pytorch/05.md | 74 +++++++ docs/pytorch/06.md | 90 +++++++++ docs/pytorch/07.md | 65 ++++++ docs/pytorch/08.md | 1 + docs/pytorch/09.md | 108 ++++++++++ docs/pytorch/10.md | 126 ++++++++++++ docs/pytorch/11.md | 58 ++++++ docs/pytorch/12.md | 82 ++++++++ docs/pytorch/13.md | 72 +++++++ docs/pytorch/14.md | 109 ++++++++++ docs/pytorch/15.md | 1 + docs/pytorch/16.md | 159 +++++++++++++++ docs/pytorch/17.md | 145 ++++++++++++++ docs/pytorch/18.md | 117 +++++++++++ docs/pytorch/19.md | 138 +++++++++++++ docs/pytorch/20.md | 165 ++++++++++++++++ docs/pytorch/21.md | 112 +++++++++++ docs/pytorch/22.md | 1 + docs/pytorch/23.md | 61 ++++++ docs/pytorch/24.md | 66 +++++++ docs/pytorch/25.md | 121 ++++++++++++ docs/pytorch/26.md | 187 ++++++++++++++++++ .../img/03f4667f9aae4918338a56b74865a389.png | Bin 0 -> 4914 bytes .../img/04a6040ad4f06a69a92f440ea17dde44.png | Bin 0 -> 20412 bytes .../img/13e0473ef73a9de2569a81c62e30d054.png | Bin 0 -> 6686 bytes .../img/1b292936f4a0c3be1d04e43a994fd48c.png | Bin 0 -> 8156 bytes .../img/1f0b990d5a8d78692d3730d855fe44ea.png | Bin 0 -> 5758 bytes .../img/20e2ebdf112e4aa3202e951e072c2dc2.png | Bin 0 -> 14528 bytes .../img/22309cd02ee52b3a65e1f0022e8b964e.png | Bin 0 -> 7096 bytes .../img/25959870b2b1e7d6fd61229cb20bed29.png | Bin 0 -> 8331 bytes .../img/25ed82d9ef8a8b1c9c60445c7c08c732.png | Bin 0 -> 12627 bytes .../img/2fc34594dcb247d4a3414467eed4a109.png | Bin 0 -> 12358 bytes .../img/388ca39bf710c8f053f533ad10872cd7.png | Bin 0 -> 24030 bytes .../img/4d69c0a49be83a66f774caf12e64c3a7.png | Bin 0 -> 6857 bytes .../img/5a415b795ebbb116db6d4a2394d93b27.png | Bin 0 -> 7832 bytes .../img/6730e1145d2a40e8ced1fda4d453d9c6.png | Bin 0 -> 5433 bytes .../img/68f39521fc6853acdf26440e7d5a2861.png | Bin 0 -> 9357 bytes .../img/7345448d48d8d6c6c1b03fda91334e3e.png | Bin 0 -> 5534 bytes .../img/761c210ceb0fdd69c7e0f8bd85e39698.png | Bin 0 -> 3863 bytes .../img/7a8716c377832b032ee24276b7ddcc31.png | Bin 0 -> 19259 bytes .../img/7eca2f8318f254b17ca0bc215ec4f5a0.png | Bin 0 -> 9296 bytes .../img/90e1ab65f286c889d94c9f6c57d596c9.png | Bin 0 -> 8307 bytes .../img/94268b7d9687d039d872da203453c97b.png | Bin 0 -> 7832 bytes .../img/99c72d57612c137b62599837526f0e0e.png | Bin 0 -> 12627 bytes .../img/9e1df524980c8f42ab4353070c2a1b74.png | Bin 0 -> 4857 bytes .../img/a545e4a49909bd7a80e042fd6d8267cb.png | Bin 0 -> 8772 bytes .../img/a577eb2dc81a64cfc4f6d04ff9a25873.png | Bin 0 -> 5743 bytes .../img/b708f231f544bd7bcefa1d55c82653dd.png | Bin 0 -> 13767 bytes .../img/bbd3ae66e0235fac8745c37306e74a52.png | Bin 0 -> 8738 bytes .../img/bce7313d5ac6f2600b62a4962a6daf3a.png | Bin 0 -> 7465 bytes .../img/c2914d88b6f17b84982e162cf6930a88.png | Bin 0 -> 8800 bytes .../img/c429fb827df769a542339e200e2ea20c.png | Bin 0 -> 7630 bytes .../img/c42f3cec435a83431d5a1737e99b8b8c.png | Bin 0 -> 4779 bytes .../img/c8011979fa20046cbfa36e46cf508689.png | Bin 0 -> 5758 bytes .../img/cb2138c3f800c7ca4b5ae38076d09429.png | Bin 0 -> 6043 bytes .../img/f1108a1b6941305fa7a39e488c023fe9.png | Bin 0 -> 7988 bytes .../img/f38868821469cadc36810cfd827511d1.png | Bin 0 -> 3887 bytes .../img/f790e22ee4be05f818e52467c2f13b37.png | Bin 0 -> 19026 bytes .../img/febe7e5dc5d5b9a5004d15c50d3228c1.png | Bin 0 -> 8854 bytes .../img/fedaa24e2fcad876c77a2038c2d8d14d.png | Bin 0 -> 10271 bytes .../img/ffeedc89cc695e61aa6e941c1c696a39.png | Bin 0 -> 10294 bytes 66 files changed, 2123 insertions(+) create mode 100644 docs/pytorch/00.md create mode 100644 docs/pytorch/01.md create mode 100644 docs/pytorch/02.md create mode 100644 docs/pytorch/03.md create mode 100644 docs/pytorch/04.md create mode 100644 docs/pytorch/05.md create mode 100644 docs/pytorch/06.md create mode 100644 docs/pytorch/07.md create mode 100644 docs/pytorch/08.md create mode 100644 docs/pytorch/09.md create mode 100644 docs/pytorch/10.md create mode 100644 docs/pytorch/11.md create mode 100644 docs/pytorch/12.md create mode 100644 docs/pytorch/13.md create mode 100644 docs/pytorch/14.md create mode 100644 docs/pytorch/15.md create mode 100644 docs/pytorch/16.md create mode 100644 docs/pytorch/17.md create mode 100644 docs/pytorch/18.md create mode 100644 docs/pytorch/19.md create mode 100644 docs/pytorch/20.md create mode 100644 docs/pytorch/21.md create mode 100644 docs/pytorch/22.md create mode 100644 docs/pytorch/23.md create mode 100644 docs/pytorch/24.md create mode 100644 docs/pytorch/25.md create mode 100644 docs/pytorch/26.md create mode 100644 docs/pytorch/img/03f4667f9aae4918338a56b74865a389.png create mode 100644 docs/pytorch/img/04a6040ad4f06a69a92f440ea17dde44.png create mode 100644 docs/pytorch/img/13e0473ef73a9de2569a81c62e30d054.png create mode 100644 docs/pytorch/img/1b292936f4a0c3be1d04e43a994fd48c.png create mode 100644 docs/pytorch/img/1f0b990d5a8d78692d3730d855fe44ea.png create mode 100644 docs/pytorch/img/20e2ebdf112e4aa3202e951e072c2dc2.png create mode 100644 docs/pytorch/img/22309cd02ee52b3a65e1f0022e8b964e.png create mode 100644 docs/pytorch/img/25959870b2b1e7d6fd61229cb20bed29.png create mode 100644 docs/pytorch/img/25ed82d9ef8a8b1c9c60445c7c08c732.png create mode 100644 docs/pytorch/img/2fc34594dcb247d4a3414467eed4a109.png create mode 100644 docs/pytorch/img/388ca39bf710c8f053f533ad10872cd7.png create mode 100644 docs/pytorch/img/4d69c0a49be83a66f774caf12e64c3a7.png create mode 100644 docs/pytorch/img/5a415b795ebbb116db6d4a2394d93b27.png create mode 100644 docs/pytorch/img/6730e1145d2a40e8ced1fda4d453d9c6.png create mode 100644 docs/pytorch/img/68f39521fc6853acdf26440e7d5a2861.png create mode 100644 docs/pytorch/img/7345448d48d8d6c6c1b03fda91334e3e.png create mode 100644 docs/pytorch/img/761c210ceb0fdd69c7e0f8bd85e39698.png create mode 100644 docs/pytorch/img/7a8716c377832b032ee24276b7ddcc31.png create mode 100644 docs/pytorch/img/7eca2f8318f254b17ca0bc215ec4f5a0.png create mode 100644 docs/pytorch/img/90e1ab65f286c889d94c9f6c57d596c9.png create mode 100644 docs/pytorch/img/94268b7d9687d039d872da203453c97b.png create mode 100644 docs/pytorch/img/99c72d57612c137b62599837526f0e0e.png create mode 100644 docs/pytorch/img/9e1df524980c8f42ab4353070c2a1b74.png create mode 100644 docs/pytorch/img/a545e4a49909bd7a80e042fd6d8267cb.png create mode 100644 docs/pytorch/img/a577eb2dc81a64cfc4f6d04ff9a25873.png create mode 100644 docs/pytorch/img/b708f231f544bd7bcefa1d55c82653dd.png create mode 100644 docs/pytorch/img/bbd3ae66e0235fac8745c37306e74a52.png create mode 100644 docs/pytorch/img/bce7313d5ac6f2600b62a4962a6daf3a.png create mode 100644 docs/pytorch/img/c2914d88b6f17b84982e162cf6930a88.png create mode 100644 docs/pytorch/img/c429fb827df769a542339e200e2ea20c.png create mode 100644 docs/pytorch/img/c42f3cec435a83431d5a1737e99b8b8c.png create mode 100644 docs/pytorch/img/c8011979fa20046cbfa36e46cf508689.png create mode 100644 docs/pytorch/img/cb2138c3f800c7ca4b5ae38076d09429.png create mode 100644 docs/pytorch/img/f1108a1b6941305fa7a39e488c023fe9.png create mode 100644 docs/pytorch/img/f38868821469cadc36810cfd827511d1.png create mode 100644 docs/pytorch/img/f790e22ee4be05f818e52467c2f13b37.png create mode 100644 docs/pytorch/img/febe7e5dc5d5b9a5004d15c50d3228c1.png create mode 100644 docs/pytorch/img/fedaa24e2fcad876c77a2038c2d8d14d.png create mode 100644 docs/pytorch/img/ffeedc89cc695e61aa6e941c1c696a39.png diff --git a/docs/pytorch/00.md b/docs/pytorch/00.md new file mode 100644 index 0000000..1c235b6 --- /dev/null +++ b/docs/pytorch/00.md @@ -0,0 +1,3 @@ +# 莫烦 PyTorch 系列教程 + +来源:[https://www.pytorchtutorial.com/mofan-pytorch-tutorials-list/](https://www.pytorchtutorial.com/mofan-pytorch-tutorials-list/) \ No newline at end of file diff --git a/docs/pytorch/01.md b/docs/pytorch/01.md new file mode 100644 index 0000000..a50456f --- /dev/null +++ b/docs/pytorch/01.md @@ -0,0 +1 @@ +# PyTorch 简介 \ No newline at end of file diff --git a/docs/pytorch/02.md b/docs/pytorch/02.md new file mode 100644 index 0000000..4440c4a --- /dev/null +++ b/docs/pytorch/02.md @@ -0,0 +1,36 @@ +# [莫烦 PyTorch 系列教程] 1.1 – Why PyTorch? + +## 为什么用 PyTorch + +[PyTorch](https://www.pytorchtutorial.com/goto/http://pytorch.org/) 是 [Torch](https://www.pytorchtutorial.com/goto/http://torch.ch/) 在 Python 上的衍生. 因为 [Torch](https://www.pytorchtutorial.com/goto/http://torch.ch/) 是一个使用 [Lua](https://www.pytorchtutorial.com/goto/https://www.lua.org/) 语言的神经网络库, Torch 很好用, 但是 Lua 又不是特别流行, 所有开发团队将 Lua 的 Torch 移植到了更流行的语言 Python 上. 是的 PyTorch 一出生就引来了剧烈的反响. 为什么呢? + +很简单, 我们就看看有谁在用 PyTorch 吧. + +![](img/20e2ebdf112e4aa3202e951e072c2dc2.png) + +可见, 著名的 Facebook, twitter 等都在使用它, 这就说明 PyTorch 的确是好用的, 而且是值得推广. + +而且如果你知道 [Numpy](https://www.pytorchtutorial.com/goto/http://www.numpy.org/), PyTorch 说他就是在神经网络领域可以用来替换 numpy 的模块. + +## 神经网络在做什么 + +神经网络在学习拟合线条(回归): + +![](img/c8011979fa20046cbfa36e46cf508689.png) + +神经网络在学习区分数据(分类): + +![](img/94268b7d9687d039d872da203453c97b.png) + +## PyTorch 和 Tensorflow + +据 PyTorch 自己介绍, 他们家的最大优点就是建立的神经网络是动态的, 对比静态的 Tensorflow, 他能更有效地处理一些问题, 比如说 RNN 变化时间长度的输出. 而我认为, 各家有各家的优势和劣势, 所以我们要以中立的态度. 两者都是大公司, Tensorflow 自己说自己在分布式训练上下了很大的功夫, 那我就默认 Tensorflow 在这一点上要超出 PyTorch, 但是 Tensorflow 的静态计算图使得他在 RNN 上有一点点被动 (虽然它用其他途径解决了), 不过用 PyTorch 的时候, 你会对这种动态的 RNN 有更好的理解. + +而且 Tensorflow 的高度工业化, 它的底层代码… 你是看不懂的. PyTorch 好那么一点点, 如果你深入 API, 你至少能比看 Tensorflow 多看懂一点点 PyTorch 的底层在干嘛. + +最后我的建议就是: + +* 如果你是学生, 随便选一个学, 或者稍稍偏向 PyTorch, 因为写代码的时候应该更好理解. 懂了一个模块, 转换 Tensorflow 或者其他的模块都好说. +* 如果是上班了, 跟着你公司来, 公司用什么, 你就用什么, 不要脱群. + +文章来源:[莫烦](https://www.pytorchtutorial.com/goto/https://morvanzhou.github.io/) \ No newline at end of file diff --git a/docs/pytorch/03.md b/docs/pytorch/03.md new file mode 100644 index 0000000..8e58e77 --- /dev/null +++ b/docs/pytorch/03.md @@ -0,0 +1,24 @@ +# [莫烦 PyTorch 系列教程] 1.2 – 安装 PyTorch + +## 支持的系统 + +PyTorch 暂时只支持 MacOS, Linux. 暂不支持 Windows! (可怜的 Windows 同学们.. 又被抛弃了). 不过说不定像 Tensorflow 一样, 因为 Windows 用户的强烈要求, 他们在某天就突然支持了. + +## 安装 + +PyTorch 安装起来很简单, [它自家网页](https://www.pytorchtutorial.com/goto/http://pytorch.org/)上就有很方便的选择方式 (网页升级改版后可能和下图有点不同): + +![](img/b708f231f544bd7bcefa1d55c82653dd.png) + +所以根据你的情况选择适合你的安装方法, 我已自己为例, 我使用的是 MacOS, 想用 pip 安装, 我的 Python 是 3.5 版的, 我没有 GPU 加速, 那我就按上面的选: + +然后根据上面的提示, 我只需要在我的 Terminal 当中输入以下指令就好了: + +``` +$ pip install http://download.pytorch.org/whl/torch-0.1.11.post5-cp35-cp35m-macosx_10_7_x86_64.whl +$ pip install torchvision +``` + +注意, 我安装的是0.1.11版本的 torch, 你需要去他们网站上看是否有新版本的. 安装 PyTorch 会安装两个模块, 一个是 torch, 一个 torchvision, torch 是主模块, 用来搭建神经网络的, torchvision 是辅模块, 有数据库, 还有一些已经训练好的神经网络等着你直接用, 比如 ([VGG, AlexNet, ResNet](https://www.pytorchtutorial.com/goto/http://pytorch.org/docs/torchvision/models.html)). + +文章来源:[莫烦](https://www.pytorchtutorial.com/goto/https://morvanzhou.github.io/) \ No newline at end of file diff --git a/docs/pytorch/04.md b/docs/pytorch/04.md new file mode 100644 index 0000000..bdded7d --- /dev/null +++ b/docs/pytorch/04.md @@ -0,0 +1 @@ +# PyTorch 神经网络基础 \ No newline at end of file diff --git a/docs/pytorch/05.md b/docs/pytorch/05.md new file mode 100644 index 0000000..0e6631a --- /dev/null +++ b/docs/pytorch/05.md @@ -0,0 +1,74 @@ +# [莫烦 PyTorch 系列教程] 2.1 – Torch vs Numpy + +## 用 Numpy 还是 Torch + +Torch 自称为神经网络界的 Numpy, 因为他能将 torch 产生的 tensor 放在 GPU 中加速运算 (前提是你有合适的 GPU), 就像 Numpy 会把 array 放在 CPU 中加速运算. 所以神经网络的话, 当然是用 Torch 的 tensor 形式数据最好咯. 就像 Tensorflow 当中的 tensor 一样. + +当然, 我们对 Numpy 还是爱不释手的, 因为我们太习惯 numpy 的形式了. 不过 torch 看出来我们的喜爱, 他把 torch 做的和 numpy 能很好的兼容. 比如这样就能自由地转换 numpy array 和 torch tensor 了: + +``` +import torch +import numpy as np + +np_data = np.arange(6).reshape((2, 3)) +torch_data = torch.from_numpy(np_data) +tensor2array = torch_data.numpy() +print( + \'\nnumpy array:\', np_data, # [[0 1 2], [3 4 5]] + \'\ntorch tensor:\', torch_data, # 0 1 2 \n 3 4 5 [torch.LongTensor of size 2x3] + \'\ntensor to array:\', tensor2array, # [[0 1 2], [3 4 5]] +) +``` + +## Torch 中的数学运算 + +其实 torch 中 tensor 的运算和 numpy array 的如出一辙, 我们就以对比的形式来看. 如果想了解 torch 中其它更多有用的运算符, [API就是你要去的地方](https://www.pytorchtutorial.com/goto/http://pytorch.org/docs/torch.html#math-operations). + +``` +# abs 绝对值计算 +data = [-1, -2, 1, 2] +tensor = torch.FloatTensor(data) # 转换成32位浮点 tensor +print( + \'\nabs\', + \'\nnumpy: \', np.abs(data), # [1 2 1 2] + \'\ntorch: \', torch.abs(tensor) # [1 2 1 2] +) + +# sin 三角函数 sin +print( + \'\nsin\', + \'\nnumpy: \', np.sin(data), # [-0.84147098 -0.90929743 0.84147098 0.90929743] + \'\ntorch: \', torch.sin(tensor) # [-0.8415 -0.9093 0.8415 0.9093] +) + +# mean 均值 +print( + \'\nmean\', + \'\nnumpy: \', np.mean(data), # 0.0 + \'\ntorch: \', torch.mean(tensor) # 0.0 +) +``` + +除了简单的计算, 矩阵运算才是神经网络中最重要的部分. 所以我们展示下矩阵的乘法. 注意一下包含了一个 numpy 中可行, 但是 torch 中不可行的方式. + +``` +# matrix multiplication 矩阵点乘 +data = [[1,2], [3,4]] +tensor = torch.FloatTensor(data) # 转换成32位浮点 tensor +# correct method +print( + \'\nmatrix multiplication (matmul)\', + \'\nnumpy: \', np.matmul(data, data), # [[7, 10], [15, 22]] + \'\ntorch: \', torch.mm(tensor, tensor) # [[7, 10], [15, 22]] +) + +# !!!! 下面是错误的方法 !!!! +data = np.array(data) +print( + \'\nmatrix multiplication (dot)\', + \'\nnumpy: \', data.dot(data), # [[7, 10], [15, 22]] 在numpy 中可行 + \'\ntorch: \', tensor.dot(tensor) # torch 会转换成 [1,2,3,4].dot([1,2,3,4) = 30.0 +) +``` + +文章来源:[莫烦](https://www.pytorchtutorial.com/goto/https://morvanzhou.github.io/) \ No newline at end of file diff --git a/docs/pytorch/06.md b/docs/pytorch/06.md new file mode 100644 index 0000000..6303b9f --- /dev/null +++ b/docs/pytorch/06.md @@ -0,0 +1,90 @@ +# [莫烦 PyTorch 系列教程] 2.2 – 变量 (Variable) + +## 什么是 Variable + +在 Torch 中的 Variable 就是一个存放会变化的值的地理位置. 里面的值会不停的变化. 就像一个裝鸡蛋的篮子, 鸡蛋数会不停变动. 那谁是里面的鸡蛋呢, 自然就是 Torch 的 Tensor 咯. **如果用一个 Variable 进行计算, 那返回的也是一个同类型的 Variable.** + +我们定义一个 Variable: + +``` +import torch +from torch.autograd import Variable # torch 中 Variable 模块 + +# 先生鸡蛋 +tensor = torch.FloatTensor([[1,2],[3,4]]) +# 把鸡蛋放到篮子里, requires_grad是参不参与误差反向传播, 要不要计算梯度 +variable = Variable(tensor, requires_grad=True) + +print(tensor) +""" + 1 2 + 3 4 +[torch.FloatTensor of size 2x2] +""" + +print(variable) +""" +Variable containing: + 1 2 + 3 4 +[torch.FloatTensor of size 2x2] +""" +``` + +## Variable 计算, 梯度 + +我们再对比一下 tensor 的计算和 variable 的计算.\’ + +``` +t_out = torch.mean(tensor*tensor) # x^2 +v_out = torch.mean(variable*variable) # x^2 +print(t_out) +print(v_out) # 7.5 +``` + +到目前为止, 我们看不出什么不同, **但是时刻记住, Variable 计算时, 它在背景幕布后面一步步默默地搭建着一个庞大的系统, 叫做计算图, computational graph. 这个图是用来干嘛的? 原来是将所有的计算步骤 (节点) 都连接起来, 最后进行误差反向传递的时候, 一次性将所有 variable 里面的修改幅度 (梯度) 都计算出来, 而 tensor 就没有这个能力啦.** + +v_out = torch.mean(variable*variable) 就是在计算图中添加的一个计算步骤, 计算误差反向传递的时候有他一份功劳, 我们就来举个例子: + +``` +v_out.backward() # 模拟 v_out 的误差反向传递 + +# 下面两步看不懂没关系, 只要知道 Variable 是计算图的一部分, 可以用来传递误差就好. +# v_out = 1/4 * sum(variable*variable) 这是计算图中的 v_out 计算步骤 +# 针对于 v_out 的梯度就是, d(v_out)/d(variable) = 1/4*2*variable = variable/2 + +print(variable.grad) # 初始 Variable 的梯度 +\'\'\' + 0.5000 1.0000 + 1.5000 2.0000 +\'\'\' +``` + +#### 获取 Variable 里面的数据 + +直接 print(variable) 只会输出 Variable 形式的数据, 在很多时候是用不了的(比如想要用 plt 画图), 所以我们要转换一下, 将它变成 tensor 形式. + +``` +print(variable) # Variable 形式 +""" +Variable containing: + 1 2 + 3 4 +[torch.FloatTensor of size 2x2] +""" + +print(variable.data) # tensor 形式 +""" + 1 2 + 3 4 +[torch.FloatTensor of size 2x2] +""" + +print(variable.data.numpy()) # numpy 形式 +""" +[[ 1\. 2.] + [ 3\. 4.]] +""" +``` + +文章来源:[莫烦](https://www.pytorchtutorial.com/goto/https://morvanzhou.github.io/) \ No newline at end of file diff --git a/docs/pytorch/07.md b/docs/pytorch/07.md new file mode 100644 index 0000000..4e88f9b --- /dev/null +++ b/docs/pytorch/07.md @@ -0,0 +1,65 @@ +# [莫烦 PyTorch 系列教程] 2.3 – 激励函数 (Activation) + +## 什么是 Activation + +一句话概括 Activation: 就是让神经网络可以描述非线性问题的步骤, 是神经网络变得更强大. 如果还不是特别了解, 我有制作一个动画短片(如下), 浅显易懂的阐述了激励函数的作用. 包懂. + +## Torch 中的激励函数 + +Torch 中的激励函数有很多, 不过我们平时要用到的就这几个.  relu, sigmoid, tanh, softplus . 那我们就看看他们各自长什么样啦. + +``` +import torch +import torch.nn.functional as F # 激励函数都在这 +from torch.autograd import Variable + +# 做一些假数据来观看图像 +x = torch.linspace(-5, 5, 200) # x data (tensor), shape=(100, 1) +x = Variable(x) +``` + +接着就是做生成不同的激励函数数据: + +``` +x_np = x.data.numpy() # 换成 numpy array, 出图时用 + +# 几种常用的 激励函数 +y_relu = F.relu(x).data.numpy() +y_sigmoid = F.sigmoid(x).data.numpy() +y_tanh = F.tanh(x).data.numpy() +y_softplus = F.softplus(x).data.numpy() +# y_softmax = F.softmax(x) softmax 比较特殊, 不能直接显示, 不过他是关于概率的, 用于分类 +``` + +接着我们开始画图, 画图的代码也在下面: + +![](img/f1108a1b6941305fa7a39e488c023fe9.png) + +``` +import matplotlib.pyplot as plt # python 的可视化模块, 我有教程 (https://morvanzhou.github.io/tutorials/data-manipulation/plt/) + +plt.figure(1, figsize=(8, 6)) +plt.subplot(221) +plt.plot(x_np, y_relu, c=\'red\', label=\'relu\') +plt.ylim((-1, 5)) +plt.legend(loc=\'best\') + +plt.subplot(222) +plt.plot(x_np, y_sigmoid, c=\'red\', label=\'sigmoid\') +plt.ylim((-0.2, 1.2)) +plt.legend(loc=\'best\') + +plt.subplot(223) +plt.plot(x_np, y_tanh, c=\'red\', label=\'tanh\') +plt.ylim((-1.2, 1.2)) +plt.legend(loc=\'best\') + +plt.subplot(224) +plt.plot(x_np, y_softplus, c=\'red\', label=\'softplus\') +plt.ylim((-0.2, 6)) +plt.legend(loc=\'best\') + +plt.show() +``` + +文章来源:[莫烦](https://www.pytorchtutorial.com/goto/https://morvanzhou.github.io/) \ No newline at end of file diff --git a/docs/pytorch/08.md b/docs/pytorch/08.md new file mode 100644 index 0000000..bf7ddb5 --- /dev/null +++ b/docs/pytorch/08.md @@ -0,0 +1 @@ +# 建造第一个神经网络 \ No newline at end of file diff --git a/docs/pytorch/09.md b/docs/pytorch/09.md new file mode 100644 index 0000000..5d61c40 --- /dev/null +++ b/docs/pytorch/09.md @@ -0,0 +1,108 @@ +# [莫烦 PyTorch 系列教程] 3.1 – 关系拟合 (回归 Regression) + +我会这次会来见证神经网络是如何通过简单的形式将一群数据用一条线条来表示. 或者说, 是如何在数据当中找到他们的关系, 然后用神经网络模型来建立一个可以代表他们关系的线条. + +![](img/1f0b990d5a8d78692d3730d855fe44ea.png) + +## 建立数据集 + +我们创建一些假数据来模拟真实的情况. 比如一个一元二次函数:  y = a * x^2 b , 我们给  y  数据加上一点噪声来更加真实的展示它. + +``` +import torch +from torch.autograd import Variable +import matplotlib.pyplot as plt + +x = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1) # x data (tensor), shape=(100, 1) +y = x.pow(2) 0.2*torch.rand(x.size()) # noisy y data (tensor), shape=(100, 1) + +# 用 Variable 来修饰这些数据 tensor +x, y = torch.autograd.Variable(x), Variable(y) + +# 画图 +plt.scatter(x.data.numpy(), y.data.numpy()) +plt.show() +``` + +## 建立神经网络 + +建立一个神经网络我们可以直接运用 torch 中的体系. 先定义所有的层属性( __init__() ), 然后再一层层搭建( forward(x) )层于层的关系链接. 建立关系的时候, 我们会用到激励函数, 如果还不清楚激励函数用途的同学, 这里有非常好的一篇动画教程 (如下). + +``` +import torch +import torch.nn.functional as F # 激励函数都在这 + +class Net(torch.nn.Module): # 继承 torch 的 Module + def __init__(self, n_feature, n_hidden, n_output): + super(Net, self).__init__() # 继承 __init__ 功能 + # 定义每层用什么样的形式 + self.hidden = torch.nn.Linear(n_feature, n_hidden) # 隐藏层线性输出 + self.predict = torch.nn.Linear(n_hidden, n_output) # 输出层线性输出 + + def forward(self, x): # 这同时也是 Module 中的 forward 功能 + # 正向传播输入值, 神经网络分析出输出值 + x = F.relu(self.hidden(x)) # 激励函数(隐藏层的线性值) + x = self.predict(x) # 输出值 + return x + +net = Net(n_feature=1, n_hidden=10, n_output=1) + +print(net) # net 的结构 +""" +Net ( + (hidden): Linear (1 -> 10) + (predict): Linear (10 -> 1) +) +""" +``` + +## 训练网络 + +训练的步骤很简单, 如下: + +``` +# optimizer 是训练的工具 +optimizer = torch.optim.SGD(net.parameters(), lr=0.5) # 传入 net 的所有参数, 学习率 +loss_func = torch.nn.MSELoss() # 预测值和真实值的误差计算公式 (均方差) + +for t in range(100): + prediction = net(x) # 喂给 net 训练数据 x, 输出预测值 + + loss = loss_func(prediction, y) # 计算两者的误差 + + optimizer.zero_grad() # 清空上一步的残余更新参数值 + loss.backward() # 误差反向传播, 计算参数更新值 + optimizer.step() # 将参数更新值施加到 net 的 parameters 上 +``` + +## 可视化训练过程 + +为了可视化整个训练的过程, 更好的理解是如何训练, 我们如下操作: + +``` +import matplotlib.pyplot as plt + +plt.ion() # 画图 +plt.show() + +for t in range(100): + + ... + loss.backward() + optimizer.step() + + # 接着上面来 + if t % 5 == 0: + # plot and show learning process + plt.cla() + plt.scatter(x.data.numpy(), y.data.numpy()) + plt.plot(x.data.numpy(), prediction.data.numpy(), \'r-\', lw=5) + plt.text(0.5, 0, \'Loss=%.4f\' % loss.data[0], fontdict={\'size\': 20, \'color\': \'red\'}) + plt.pause(0.1) +``` + +![](img/13e0473ef73a9de2569a81c62e30d054.png) + +所以这也就是在我 [github 代码](https://www.pytorchtutorial.com/goto/https://github.com/MorvanZhou/PyTorch-Tutorial/blob/master/tutorial-contents/301_regression.py) 中的每一步的意义啦. + +文章来源:[莫烦](https://www.pytorchtutorial.com/goto/https://morvanzhou.github.io/) \ No newline at end of file diff --git a/docs/pytorch/10.md b/docs/pytorch/10.md new file mode 100644 index 0000000..71ccfee --- /dev/null +++ b/docs/pytorch/10.md @@ -0,0 +1,126 @@ +# [莫烦 PyTorch 系列教程] 3.2 – 区分类型 (分类 Classification) + +这次我们也是用最简单的途径来看看神经网络是怎么进行事物的分类. + +![](img/5a415b795ebbb116db6d4a2394d93b27.png) + +## 建立数据集 + +我们创建一些假数据来模拟真实的情况. 比如两个二次分布的数据, 不过他们的均值都不一样. + +``` +import torch +from torch.autograd import Variable +import matplotlib.pyplot as plt + +# 假数据 +n_data = torch.ones(100, 2) # 数据的基本形态 +x0 = torch.normal(2*n_data, 1) # 类型0 x data (tensor), shape=(100, 2) +y0 = torch.zeros(100) # 类型0 y data (tensor), shape=(100, 1) +x1 = torch.normal(-2*n_data, 1) # 类型1 x data (tensor), shape=(100, 1) +y1 = torch.ones(100) # 类型1 y data (tensor), shape=(100, 1) + +# 注意 x, y 数据的数据形式是一定要像下面一样 (torch.cat 是在合并数据) +x = torch.cat((x0, x1), 0).type(torch.FloatTensor) # FloatTensor = 32-bit floating +y = torch.cat((y0, y1), ).type(torch.LongTensor) # LongTensor = 64-bit integer + +# torch 只能在 Variable 上训练, 所以把它们变成 Variable +x, y = Variable(x), Variable(y) + +# plt.scatter(x.data.numpy()[:, 0], x.data.numpy()[:, 1], c=y.data.numpy(), s=100, lw=0, cmap=\'RdYlGn\') +# plt.show() + +# 画图 +plt.scatter(x.data.numpy(), y.data.numpy()) +plt.show() +``` + +## 建立神经网络 + +建立一个神经网络我们可以直接运用 torch 中的体系. 先定义所有的层属性( __init__() ), 然后再一层层搭建( forward(x) )层于层的关系链接. 这个和我们在前面 regression 的时候的神经网络基本没差. 建立关系的时候, 我们会用到激励函数. + +``` +import torch +import torch.nn.functional as F # 激励函数都在这 + +class Net(torch.nn.Module): # 继承 torch 的 Module + def __init__(self, n_feature, n_hidden, n_output): + super(Net, self).__init__() # 继承 __init__ 功能 + self.hidden = torch.nn.Linear(n_feature, n_hidden) # 隐藏层线性输出 + self.out = torch.nn.Linear(n_hidden, n_output) # 输出层线性输出 + + def forward(self, x): + # 正向传播输入值, 神经网络分析出输出值 + x = F.relu(self.hidden(x)) # 激励函数(隐藏层的线性值) + x = self.out(x) # 输出值, 但是这个不是预测值, 预测值还需要再另外计算 + return x + +net = Net(n_feature=2, n_hidden=10, n_output=2) # 几个类别就几个 output + +print(net) # net 的结构 +""" +Net ( + (hidden): Linear (2 -> 10) + (out): Linear (10 -> 2) +) +""" +``` + +## 训练网络 + +训练的步骤很简单, 如下: + +``` +# optimizer 是训练的工具 +optimizer = torch.optim.SGD(net.parameters(), lr=0.02) # 传入 net 的所有参数, 学习率 +# 算误差的时候, 注意真实值!不是! one-hot 形式的, 而是1D Tensor, (batch,) +# 但是预测值是2D tensor (batch, n_classes) +loss_func = torch.nn.CrossEntropyLoss() + +for t in range(100): + out = net(x) # 喂给 net 训练数据 x, 输出分析值 + + loss = loss_func(out, y) # 计算两者的误差 + + optimizer.zero_grad() # 清空上一步的残余更新参数值 + loss.backward() # 误差反向传播, 计算参数更新值 + optimizer.step() # 将参数更新值施加到 net 的 parameters 上 +``` + +## 可视化训练过程 + +为了可视化整个训练的过程, 更好的理解是如何训练, 我们如下操作: + +``` +import matplotlib.pyplot as plt + +plt.ion() # 画图 +plt.show() + +for t in range(100): + + ... + loss.backward() + optimizer.step() + + # 接着上面来 + if t % 2 == 0: + plt.cla() + # 过了一道 softmax 的激励函数后的最大概率才是预测值 + prediction = torch.max(F.softmax(out), 1)[1] + pred_y = prediction.data.numpy().squeeze() + target_y = y.data.numpy() + plt.scatter(x.data.numpy()[:, 0], x.data.numpy()[:, 1], c=pred_y, s=100, lw=0, cmap=\'RdYlGn\') + accuracy = sum(pred_y == target_y)/200 # 预测中有多少和真实值一样 + plt.text(1.5, -4, \'Accuracy=%.2f\' % accuracy, fontdict={\'size\': 20, \'color\': \'red\'}) + plt.pause(0.1) + +plt.ioff() # 停止画图 +plt.show() +``` + +![](img/bce7313d5ac6f2600b62a4962a6daf3a.png) + +所以这也就是在我 [github 代码](https://www.pytorchtutorial.com/goto/https://github.com/MorvanZhou/PyTorch-Tutorial/blob/master/tutorial-contents/302_classification.py) 中的每一步的意义啦. + +文章来源:[莫烦](https://www.pytorchtutorial.com/goto/https://morvanzhou.github.io/) \ No newline at end of file diff --git a/docs/pytorch/11.md b/docs/pytorch/11.md new file mode 100644 index 0000000..1572a3c --- /dev/null +++ b/docs/pytorch/11.md @@ -0,0 +1,58 @@ +# [莫烦 PyTorch 系列教程] 3.3 – 快速搭建回归神经网络 + +Torch 中提供了很多方便的途径, 同样是神经网络, 能快则快, 我们看看如何用更简单的方式搭建同样的回归神经网络. + +## 快速搭建 + +我们先看看之前写神经网络时用到的步骤. 我们用 net1  代表这种方式搭建的神经网络. + +``` +class Net(torch.nn.Module): + def __init__(self, n_feature, n_hidden, n_output): + super(Net, self).__init__() + self.hidden = torch.nn.Linear(n_feature, n_hidden) + self.predict = torch.nn.Linear(n_hidden, n_output) + + def forward(self, x): + x = F.relu(self.hidden(x)) + x = self.predict(x) + return x + +net1 = Net(1, 10, 1) # 这是我们用这种方式搭建的 net1 +``` + +我们用 class 继承了一个 torch 中的神经网络结构, 然后对其进行了修改, 不过还有更快的一招, 用一句话就概括了上面所有的内容! + +``` +net2 = torch.nn.Sequential( + torch.nn.Linear(1, 10), + torch.nn.ReLU(), + torch.nn.Linear(10, 1) +) +``` + +我们再对比一下两者的结构: + +``` +print(net1) +""" +Net ( + (hidden): Linear (1 -> 10) + (predict): Linear (10 -> 1) +) +""" +print(net2) +""" +Sequential ( + (0): Linear (1 -> 10) + (1): ReLU () + (2): Linear (10 -> 1) +) +""" +``` + +我们会发现 net2  多显示了一些内容, 这是为什么呢? 原来他把激励函数也一同纳入进去了, 但是 net1  中, 激励函数实际上是在 forward()  功能中才被调用的. 这也就说明了, 相比 net2 , net1  的好处就是, 你可以根据你的个人需要更加个性化你自己的前向传播过程, 比如(RNN). 不过如果你不需要七七八八的过程, 相信 net2  这种形式更适合你. + +所以这也就是在我 [github 代码](https://www.pytorchtutorial.com/goto/https://github.com/MorvanZhou/PyTorch-Tutorial/blob/master/tutorial-contents/303_build_nn_quickly.py) 中的每一步的意义啦. + +文章来源:[莫烦](https://www.pytorchtutorial.com/goto/https://morvanzhou.github.io/) \ No newline at end of file diff --git a/docs/pytorch/12.md b/docs/pytorch/12.md new file mode 100644 index 0000000..42c8326 --- /dev/null +++ b/docs/pytorch/12.md @@ -0,0 +1,82 @@ +# [莫烦 PyTorch 系列教程] 3.4 – 保存和恢复模型 + +训练好了一个模型, 我们当然想要保存它, 留到下次要用的时候直接提取直接用, 这就是这节的内容啦. 我们用回归的神经网络举例实现保存提取. + +## 保存 + +我们快速地建造数据, 搭建网络: + +``` +torch.manual_seed(1) # reproducible + +# 假数据 +x = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1) # x data (tensor), shape=(100, 1) +y = x.pow(2) 0.2*torch.rand(x.size()) # noisy y data (tensor), shape=(100, 1) +x, y = Variable(x, requires_grad=False), Variable(y, requires_grad=False) + +def save(): + # 建网络 + net1 = torch.nn.Sequential( + torch.nn.Linear(1, 10), + torch.nn.ReLU(), + torch.nn.Linear(10, 1) + ) + optimizer = torch.optim.SGD(net1.parameters(), lr=0.5) + loss_func = torch.nn.MSELoss() + + # 训练 + for t in range(100): + prediction = net1(x) + loss = loss_func(prediction, y) + optimizer.zero_grad() + loss.backward() + optimizer.step() +``` + +接下来我们有两种途径来保存 + +``` +torch.save(net1, \'net.pkl\') # 保存整个网络 +torch.save(net1.state_dict(), \'net_params.pkl\') # 只保存网络中的参数 (速度快, 占内存少) +``` + +## 提取网络 + +这种方式将会提取整个神经网络, 网络大的时候可能会比较慢. + +``` +def restore_net(): + # restore entire net1 to net2 + net2 = torch.load(\'net.pkl\') + prediction = net2(x) +``` + +## 只提取网络参数 + +这种方式将会提取所有的参数, 然后再放到你的新建网络中. + +``` +def restore_params(): + # 新建 net3 + net3 = torch.nn.Sequential( + torch.nn.Linear(1, 10), + torch.nn.ReLU(), + torch.nn.Linear(10, 1) + ) + + # 将保存的参数复制到 net3 + net3.load_state_dict(torch.load(\'net_params.pkl\')) + prediction = net3(x) +``` + +## 显示结果 + +调用上面建立的几个功能, 然后出图. + +![](img/68f39521fc6853acdf26440e7d5a2861.png) + +这样我们就能看出三个网络完全一模一样啦. + +所以这也就是在我 [github 代码](https://www.pytorchtutorial.com/goto/https://github.com/MorvanZhou/PyTorch-Tutorial/blob/master/tutorial-contents/304_save_reload.py) 中的每一步的意义啦. + +文章来源:[莫烦](https://www.pytorchtutorial.com/goto/https://morvanzhou.github.io/) \ No newline at end of file diff --git a/docs/pytorch/13.md b/docs/pytorch/13.md new file mode 100644 index 0000000..c0b4643 --- /dev/null +++ b/docs/pytorch/13.md @@ -0,0 +1,72 @@ +# [莫烦 PyTorch 系列教程] 3.5 – 数据读取 (Data Loader) + +DataLoader  是 torch 给你用来包装你的数据的工具. 所以你要讲自己的 (numpy array 或其他) 数据形式装换成 Tensor, 然后再放进这个包装器中. 使用 DataLoader  有什么好处呢? 就是他们帮你有效地迭代数据, 举例: + +``` +import torch +import torch.utils.data as Data +torch.manual_seed(1) # reproducible + +BATCH_SIZE = 5 # 批训练的数据个数 + +x = torch.linspace(1, 10, 10) # x data (torch tensor) +y = torch.linspace(10, 1, 10) # y data (torch tensor) + +# 先转换成 torch 能识别的 Dataset +torch_dataset = Data.TensorDataset(data_tensor=x, target_tensor=y) + +# 把 dataset 放入 DataLoader +loader = Data.DataLoader( + dataset=torch_dataset, # torch TensorDataset format + batch_size=BATCH_SIZE, # mini batch size + shuffle=True, # 要不要打乱数据 (打乱比较好) + num_workers=2, # 多线程来读数据 +) + +for epoch in range(3): # 训练所有!整套!数据 3 次 + for step, (batch_x, batch_y) in enumerate(loader): # 每一步 loader 释放一小批数据用来学习 + # 假设这里就是你训练的地方... + + # 打出来一些数据 + print(\'Epoch: \', epoch, \'| Step: \', step, \'| batch x: \', + batch_x.numpy(), \'| batch y: \', batch_y.numpy()) + +""" +Epoch: 0 | Step: 0 | batch x: [ 6\. 7\. 2\. 3\. 1.] | batch y: [ 5\. 4\. 9\. 8\. 10.] +Epoch: 0 | Step: 1 | batch x: [ 9\. 10\. 4\. 8\. 5.] | batch y: [ 2\. 1\. 7\. 3\. 6.] +Epoch: 1 | Step: 0 | batch x: [ 3\. 4\. 2\. 9\. 10.] | batch y: [ 8\. 7\. 9\. 2\. 1.] +Epoch: 1 | Step: 1 | batch x: [ 1\. 7\. 8\. 5\. 6.] | batch y: [ 10\. 4\. 3\. 6\. 5.] +Epoch: 2 | Step: 0 | batch x: [ 3\. 9\. 2\. 6\. 7.] | batch y: [ 8\. 2\. 9\. 5\. 4.] +Epoch: 2 | Step: 1 | batch x: [ 10\. 4\. 8\. 1\. 5.] | batch y: [ 1\. 7\. 3\. 10\. 6.] +""" +``` + +可以看出, 每步都导出了5个数据进行学习. 然后每个 epoch 的导出数据都是先打乱了以后再导出. + +真正方便的还不是这点. 如果我们改变一下 BATCH_SIZE = 8 , 这样我们就知道, step=0  会导出8个数据, 但是, step=1  时数据库中的数据不够 8个, 这时怎么办呢: + +``` +BATCH_SIZE = 8 # 批训练的数据个数 + +... + +for ...: + for ...: + ... + print(\'Epoch: \', epoch, \'| Step: \', step, \'| batch x: \', + batch_x.numpy(), \'| batch y: \', batch_y.numpy()) +""" +Epoch: 0 | Step: 0 | batch x: [ 6\. 7\. 2\. 3\. 1\. 9\. 10\. 4.] | batch y: [ 5\. 4\. 9\. 8\. 10\. 2\. 1\. 7.] +Epoch: 0 | Step: 1 | batch x: [ 8\. 5.] | batch y: [ 3\. 6.] +Epoch: 1 | Step: 0 | batch x: [ 3\. 4\. 2\. 9\. 10\. 1\. 7\. 8.] | batch y: [ 8\. 7\. 9\. 2\. 1\. 10\. 4\. 3.] +Epoch: 1 | Step: 1 | batch x: [ 5\. 6.] | batch y: [ 6\. 5.] +Epoch: 2 | Step: 0 | batch x: [ 3\. 9\. 2\. 6\. 7\. 10\. 4\. 8.] | batch y: [ 8\. 2\. 9\. 5\. 4\. 1\. 7\. 3.] +Epoch: 2 | Step: 1 | batch x: [ 1\. 5.] | batch y: [ 10\. 6.] +""" +``` + +这时, 在 step=1  就只给你返回这个 epoch 中剩下的数据就好了. + +所以这也就是在我 [github 代码](https://www.pytorchtutorial.com/goto/https://github.com/MorvanZhou/PyTorch-Tutorial/blob/master/tutorial-contents/305_batch_train.py) 中的每一步的意义啦. + +文章来源:[莫烦](https://www.pytorchtutorial.com/goto/https://morvanzhou.github.io/) \ No newline at end of file diff --git a/docs/pytorch/14.md b/docs/pytorch/14.md new file mode 100644 index 0000000..ba244ce --- /dev/null +++ b/docs/pytorch/14.md @@ -0,0 +1,109 @@ +# [莫烦 PyTorch 系列教程] 3.6 – 优化器 (Optimizer) + +这节内容主要是用 Torch 实践几种优化器, 这几种优化器具体的优势不会在这个节内容中说了, 所以想快速了解的话, 上面的那个动画链接是很好的去处. + +下图就是这节内容对比各种优化器的效果: + +![](img/7a8716c377832b032ee24276b7ddcc31.png) + +## 伪数据 + +为了对比各种优化器的效果, 我们需要有一些数据, 今天我们还是自己编一些伪数据, 这批数据是这样的: + +![](img/2fc34594dcb247d4a3414467eed4a109.png) + +``` +import torch +import torch.utils.data as Data +import torch.nn.functional as F +from torch.autograd import Variable +import matplotlib.pyplot as plt + +torch.manual_seed(1) # reproducible + +LR = 0.01 +BATCH_SIZE = 32 +EPOCH = 12 + +# fake dataset +x = torch.unsqueeze(torch.linspace(-1, 1, 1000), dim=1) +y = x.pow(2) 0.1*torch.normal(torch.zeros(*x.size())) + +# plot dataset +plt.scatter(x.numpy(), y.numpy()) +plt.show() + +# 使用上节内容提到的 data loader +torch_dataset = Data.TensorDataset(data_tensor=x, target_tensor=y) +loader = Data.DataLoader(dataset=torch_dataset, batch_size=BATCH_SIZE, shuffle=True, num_workers=2,) +``` + +## 每个优化器优化一个神经网络 + +为了对比每一种优化器, 我们给他们各自创建一个神经网络, 但这个神经网络都来自同一个 Net 形式. + +``` +# 默认的 network 形式 +class Net(torch.nn.Module): + def __init__(self): + super(Net, self).__init__() + self.hidden = torch.nn.Linear(1, 20) # hidden layer + self.predict = torch.nn.Linear(20, 1) # output layer + + def forward(self, x): + x = F.relu(self.hidden(x)) # activation function for hidden layer + x = self.predict(x) # linear output + return x + +# 为每个优化器创建一个 net +net_SGD = Net() +net_Momentum = Net() +net_RMSprop = Net() +net_Adam = Net() +nets = [net_SGD, net_Momentum, net_RMSprop, net_Adam] +``` + +## 优化器 Optimizer + +接下来在创建不同的优化器, 用来训练不同的网络. 并创建一个 loss_func  用来计算误差. 我们用几种常见的优化器, SGD , Momentum , RMSprop , Adam . + +``` +# different optimizers +opt_SGD = torch.optim.SGD(net_SGD.parameters(), lr=LR) +opt_Momentum = torch.optim.SGD(net_Momentum.parameters(), lr=LR, momentum=0.8) +opt_RMSprop = torch.optim.RMSprop(net_RMSprop.parameters(), lr=LR, alpha=0.9) +opt_Adam = torch.optim.Adam(net_Adam.parameters(), lr=LR, betas=(0.9, 0.99)) +optimizers = [opt_SGD, opt_Momentum, opt_RMSprop, opt_Adam] + +loss_func = torch.nn.MSELoss() +losses_his = [[], [], [], []] # 记录 training 时不同神经网络的 loss +``` + +## 训练/出图 + +接下来训练和 loss 画图. + +``` +for epoch in range(EPOCH): + print(\\'Epoch: \\', epoch) + for step, (batch_x, batch_y) in enumerate(loader): + b_x = Variable(batch_x) # 务必要用 Variable 包一下 + b_y = Variable(batch_y) + + # 对每个优化器, 优化属于他的神经网络 + for net, opt, l_his in zip(nets, optimizers, losses_his): + output = net(b_x) # get output for every net + loss = loss_func(output, b_y) # compute loss for every net + opt.zero_grad() # clear gradients for next train + loss.backward() # backpropagation, compute gradients + opt.step() # apply gradients + l_his.append(loss.data[0]) # loss recoder +``` + +![](img/7a8716c377832b032ee24276b7ddcc31.png) + +SGD  是最普通的优化器, 也可以说没有加速效果, 而 Momentum  是 SGD  的改良版, 它加入了动量原则. 后面的 RMSprop  又是 Momentum  的升级版. 而 Adam  又是 RMSprop  的升级版. 不过从这个结果中我们看到, Adam  的效果似乎比 RMSprop  要差一点. 所以说并不是越先进的优化器, 结果越佳. 我们在自己的试验中可以尝试不同的优化器, 找到那个最适合你数据/网络的优化器. + +所以这也就是在我 [github 代码](https://www.pytorchtutorial.com/goto/https://github.com/MorvanZhou/PyTorch-Tutorial/blob/master/tutorial-contents/306_optimizer.py) 中的每一步的意义啦. + +文章来源:[莫烦](https://www.pytorchtutorial.com/goto/https://morvanzhou.github.io/) \ No newline at end of file diff --git a/docs/pytorch/15.md b/docs/pytorch/15.md new file mode 100644 index 0000000..3e29533 --- /dev/null +++ b/docs/pytorch/15.md @@ -0,0 +1 @@ +# 高级神经网络结构 \ No newline at end of file diff --git a/docs/pytorch/16.md b/docs/pytorch/16.md new file mode 100644 index 0000000..07e2fb3 --- /dev/null +++ b/docs/pytorch/16.md @@ -0,0 +1,159 @@ +# [莫烦 PyTorch 系列教程] 4.1 – CNN 卷积神经网络 + +卷积神经网络目前被广泛地用在图片识别上, 已经有层出不穷的应用, 如果你对卷积神经网络还没有特别了解, 我制作的 卷积神经网络 动画简介 (如下) 能让你花几分钟就了解什么是卷积神经网络. 接着我们就一步一步做一个分析手写数字的 CNN 吧. + +下面是一个 CNN 最后一层的学习过程, 我们先可视化看看: + +![](img/388ca39bf710c8f053f533ad10872cd7.png) + +## MNIST手写数据 + +``` +import torch +import torch.nn as nn +from torch.autograd import Variable +import torch.utils.data as Data +import torchvision # 数据库模块 +import matplotlib.pyplot as plt + +torch.manual_seed(1) # reproducible + +# Hyper Parameters +EPOCH = 1 # 训练整批数据多少次, 为了节约时间, 我们只训练一次 +BATCH_SIZE = 50 +LR = 0.001 # 学习率 +DOWNLOAD_MNIST = True # 如果你已经下载好了mnist数据就写上 Fasle + +# Mnist 手写数字 +train_data = torchvision.datasets.MNIST( + root=\\'./mnist/\\', # 保存或者提取位置 + train=True, # this is training data + transform=torchvision.transforms.ToTensor(), # 转换 PIL.Image or numpy.ndarray 成 + # torch.FloatTensor (C x H x W), 训练的时候 normalize 成 [0.0, 1.0] 区间 + download=DOWNLOAD_MNIST, # 没下载就下载, 下载了就不用再下了 +) +``` + +![](img/25ed82d9ef8a8b1c9c60445c7c08c732.png) + +黑色的地方的值都是0, 白色的地方值大于0. + +同样, 我们除了训练数据, 还给一些测试数据, 测试看看它有没有训练好. + +``` +test_data = torchvision.datasets.MNIST(root=\\'./mnist/\\', train=False) + +# 批训练 50samples, 1 channel, 28x28 (50, 1, 28, 28) +train_loader = Data.DataLoader(dataset=train_data, batch_size=BATCH_SIZE, shuffle=True) + +# 为了节约时间, 我们测试时只测试前2000个 +test_x = Variable(torch.unsqueeze(test_data.test_data, dim=1), volatile=True).type(torch.FloatTensor)[:2000]/255\. # shape from (2000, 28, 28) to (2000, 1, 28, 28), value in range(0,1) +test_y = test_data.test_labels[:2000] +``` + +## CNN模型 + +和以前一样, 我们用一个 class 来建立 CNN 模型. 这个 CNN 整体流程是 卷积( Conv2d ) -> 激励函数( ReLU ) -> 池化, 向下采样 ( MaxPooling ) -> 再来一遍 -> 展平多维的卷积成的特征图 -> 接入全连接层 ( Linear ) -> 输出 + +``` +class CNN(nn.Module): + def __init__(self): + super(CNN, self).__init__() + self.conv1 = nn.Sequential( # input shape (1, 28, 28) + nn.Conv2d( + in_channels=1, # input height + out_channels=16, # n_filters + kernel_size=5, # filter size + stride=1, # filter movement/step + padding=2, # 如果想要 con2d 出来的图片长宽没有变化, padding=(kernel_size-1)/2 当 stride=1 + ), # output shape (16, 28, 28) + nn.ReLU(), # activation + nn.MaxPool2d(kernel_size=2), # 在 2x2 空间里向下采样, output shape (16, 14, 14) + ) + self.conv2 = nn.Sequential( # input shape (1, 28, 28) + nn.Conv2d(16, 32, 5, 1, 2), # output shape (32, 14, 14) + nn.ReLU(), # activation + nn.MaxPool2d(2), # output shape (32, 7, 7) + ) + self.out = nn.Linear(32 * 7 * 7, 10) # fully connected layer, output 10 classes + + def forward(self, x): + x = self.conv1(x) + x = self.conv2(x) + x = x.view(x.size(0), -1) # 展平多维的卷积图成 (batch_size, 32 * 7 * 7) + output = self.out(x) + return output + +cnn = CNN() +print(cnn) # net architecture +""" +CNN ( + (conv1): Sequential ( + (0): Conv2d(1, 16, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2)) + (1): ReLU () + (2): MaxPool2d (size=(2, 2), stride=(2, 2), dilation=(1, 1)) + ) + (conv2): Sequential ( + (0): Conv2d(16, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2)) + (1): ReLU () + (2): MaxPool2d (size=(2, 2), stride=(2, 2), dilation=(1, 1)) + ) + (out): Linear (1568 -> 10) +) +""" +``` + +## 训练 + +下面我们开始训练, 将  y 都用 Variable 包起来, 然后放入 cnn 中计算 output, 最后再计算误差. 下面代码省略了计算精确度 accuracy 的部分, 如果想细看 accuracy 代码的同学, 请去往我的 github 看全部代码. + +``` +optimizer = torch.optim.Adam(cnn.parameters(), lr=LR) # optimize all cnn parameters +loss_func = nn.CrossEntropyLoss() # the target label is not one-hotted + +# training and testing +for epoch in range(EPOCH): + for step, (x, y) in enumerate(train_loader): # 分配 batch data, normalize x when iterate train_loader + b_x = Variable(x) # batch x + b_y = Variable(y) # batch y + + output = cnn(b_x) # cnn output + loss = loss_func(output, b_y) # cross entropy loss + optimizer.zero_grad() # clear gradients for this training step + loss.backward() # backpropagation, compute gradients + optimizer.step() # apply gradients + +""" +... +Epoch: 0 | train loss: 0.0306 | test accuracy: 0.97 +Epoch: 0 | train loss: 0.0147 | test accuracy: 0.98 +Epoch: 0 | train loss: 0.0427 | test accuracy: 0.98 +Epoch: 0 | train loss: 0.0078 | test accuracy: 0.98 +""" +``` + +最后我们再来取10个数据, 看看预测的值到底对不对: + +``` +test_output = cnn(test_x[:10]) +pred_y = torch.max(test_output, 1)[1].data.numpy().squeeze() +print(pred_y, \\'prediction number\\') +print(test_y[:10].numpy(), \\'real number\\') + +""" +[7 2 1 0 4 1 4 9 5 9] prediction number +[7 2 1 0 4 1 4 9 5 9] real number +""" +``` + +#### 可视化训练(视频中没有) + +这是做完视频后突然想要补充的内容, 因为可视化可以帮助理解, 所以还是有必要提一下. 可视化的代码主要是用 matplotlib  和 sklearn  来完成的, 因为其中我们用到了 T-SNE  的降维手段, 将高维的 CNN 最后一层输出结果可视化, 也就是 CNN forward 代码中的 x = x.view(x.size(0), -1)  这一个结果. + +可视化的代码不是重点, 我们就直接展示可视化的结果吧. + +![](img/388ca39bf710c8f053f533ad10872cd7.png) + +所以这也就是在我 [github 代码](https://www.pytorchtutorial.com/goto/https://github.com/MorvanZhou/PyTorch-Tutorial/blob/master/tutorial-contents/401_CNN.py) 中的每一步的意义啦. + +文章来源:[莫烦](https://www.pytorchtutorial.com/goto/https://morvanzhou.github.io/) \ No newline at end of file diff --git a/docs/pytorch/17.md b/docs/pytorch/17.md new file mode 100644 index 0000000..5ee3376 --- /dev/null +++ b/docs/pytorch/17.md @@ -0,0 +1,145 @@ +# [莫烦 PyTorch 系列教程] 4.2 – RNN 循环神经网络 (分类 Classification) + +循环神经网络让神经网络有了记忆, 对于序列话的数据,循环神经网络能达到更好的效果. 如果你对循环神经网络还没有特别了解, 请观看几分钟的短动画, RNN 动画简介(如下) 和 LSTM(如下) 动画简介 能让你生动理解 RNN. 接着我们就一步一步做一个分析手写数字的 RNN 吧. + +## RNN 简介 + +## LSTM 简介 + +## MNIST手写数据 + +``` +import torch +from torch import nn +from torch.autograd import Variable +import torchvision.datasets as dsets +import torchvision.transforms as transforms +import matplotlib.pyplot as plt + +torch.manual_seed(1) # reproducible + +# Hyper Parameters +EPOCH = 1 # 训练整批数据多少次, 为了节约时间, 我们只训练一次 +BATCH_SIZE = 64 +TIME_STEP = 28 # rnn 时间步数 / 图片高度 +INPUT_SIZE = 28 # rnn 每步输入值 / 图片每行像素 +LR = 0.01 # learning rate +DOWNLOAD_MNIST = True # 如果你已经下载好了mnist数据就写上 Fasle + +# Mnist 手写数字 +train_data = torchvision.datasets.MNIST( + root=\\'./mnist/\\', # 保存或者提取位置 + train=True, # this is training data + transform=torchvision.transforms.ToTensor(), # 转换 PIL.Image or numpy.ndarray 成 + # torch.FloatTensor (C x H x W), 训练的时候 normalize 成 [0.0, 1.0] 区间 + download=DOWNLOAD_MNIST, # 没下载就下载, 下载了就不用再下了 +) +``` + +![](img/99c72d57612c137b62599837526f0e0e.png) + +黑色的地方的值都是0, 白色的地方值大于0. + +同样, 我们除了训练数据, 还给一些测试数据, 测试看看它有没有训练好. + +``` +test_data = torchvision.datasets.MNIST(root=\\'./mnist/\\', train=False) + +# 批训练 50samples, 1 channel, 28x28 (50, 1, 28, 28) +train_loader = Data.DataLoader(dataset=train_data, batch_size=BATCH_SIZE, shuffle=True) + +# 为了节约时间, 我们测试时只测试前2000个 +test_x = Variable(torch.unsqueeze(test_data.test_data, dim=1), volatile=True).type(torch.FloatTensor)[:2000]/255\. # shape from (2000, 28, 28) to (2000, 1, 28, 28), value in range(0,1) +test_y = test_data.test_labels[:2000] +``` + +#### RNN模型 + +和以前一样, 我们用一个 class 来建立 RNN 模型. 这个 RNN 整体流程是 + +1. (input0, state0) -> LSTM -> (output0, state1) ; +2. (input1, state1) -> LSTM -> (output1, state2) ; +3. … +4. (inputN, stateN)-> LSTM -> (outputN, stateN 1) ; +5. outputN -> Linear -> prediction . 通过LSTM分析每一时刻的值, 并且将这一时刻和前面时刻的理解合并在一起, 生成当前时刻对前面数据的理解或记忆. 传递这种理解给下一时刻分析. + +``` +class RNN(nn.Module): + def __init__(self): + super(RNN, self).__init__() + + self.rnn = nn.LSTM( # LSTM 效果要比 nn.RNN() 好多了 + input_size=28, # 图片每行的数据像素点 + hidden_size=64, # rnn hidden unit + num_layers=1, # 有几层 RNN layers + batch_first=True, # input & output 会是以 batch size 为第一维度的特征集 e.g. (batch, time_step, input_size) + ) + + self.out = nn.Linear(64, 10) # 输出层 + + def forward(self, x): + # x shape (batch, time_step, input_size) + # r_out shape (batch, time_step, output_size) + # h_n shape (n_layers, batch, hidden_size) LSTM 有两个 hidden states, h_n 是分线, h_c 是主线 + # h_c shape (n_layers, batch, hidden_size) + r_out, (h_n, h_c) = self.rnn(x, None) # None 表示 hidden state 会用全0的 state + + # 选取最后一个时间点的 r_out 输出 + # 这里 r_out[:, -1, :] 的值也是 h_n 的值 + out = self.out(r_out[:, -1, :]) + return out + +rnn = RNN() +print(rnn) +""" +RNN ( + (rnn): LSTM(28, 64, batch_first=True) + (out): Linear (64 -> 10) +) +""" +``` + +#### 训练 + +我们将图片数据看成一个时间上的连续数据, 每一行的像素点都是这个时刻的输入, 读完整张图片就是从上而下的读完了每行的像素点. 然后我们就可以拿出 RNN 在最后一步的分析值判断图片是哪一类了. 下面的代码省略了计算 accuracy 的部分, 你可以在我的 github 中看到全部代码. + +``` +optimizer = torch.optim.Adam(rnn.parameters(), lr=LR) # optimize all parameters +loss_func = nn.CrossEntropyLoss() # the target label is not one-hotted + +# training and testing +for epoch in range(EPOCH): + for step, (x, y) in enumerate(train_loader): # gives batch data + b_x = Variable(x.view(-1, 28, 28)) # reshape x to (batch, time_step, input_size) + b_y = Variable(y) # batch y + + output = rnn(b_x) # rnn output + loss = loss_func(output, b_y) # cross entropy loss + optimizer.zero_grad() # clear gradients for this training step + loss.backward() # backpropagation, compute gradients + optimizer.step() # apply gradients +""" +... +Epoch: 0 | train loss: 0.0945 | test accuracy: 0.94 +Epoch: 0 | train loss: 0.0984 | test accuracy: 0.94 +Epoch: 0 | train loss: 0.0332 | test accuracy: 0.95 +Epoch: 0 | train loss: 0.1868 | test accuracy: 0.96 +""" +``` + +最后我们再来取10个数据, 看看预测的值到底对不对: + +``` +test_output = rnn(test_x[:10].view(-1, 28, 28)) +pred_y = torch.max(test_output, 1)[1].data.numpy().squeeze() +print(pred_y, \\'prediction number\\') +print(test_y[:10], \\'real number\\') +""" +[7 2 1 0 4 1 4 9 5 9] prediction number +[7 2 1 0 4 1 4 9 5 9] real number +""" +``` + +所以这也就是在我 [github 代码](https://www.pytorchtutorial.com/goto/https://github.com/MorvanZhou/PyTorch-Tutorial/blob/master/tutorial-contents/402_RNN_classifier.py) 中的每一步的意义啦. + +文章来源:[莫烦](https://www.pytorchtutorial.com/goto/https://morvanzhou.github.io/) \ No newline at end of file diff --git a/docs/pytorch/18.md b/docs/pytorch/18.md new file mode 100644 index 0000000..bf5940e --- /dev/null +++ b/docs/pytorch/18.md @@ -0,0 +1,117 @@ +# [莫烦 PyTorch 系列教程] 4.3 – RNN 循环神经网络 (回归 Regression) + +循环神经网络让神经网络有了记忆, 对于序列话的数据,循环神经网络能达到更好的效果. 如果你对循环神经网络还没有特别了解, 请观看几分钟的短动画,RNN 动画简介(如下) 和 LSTM(如下)动画简介 能让你生动理解 RNN. 上次我们提到了用 RNN 的最后一个时间点输出来判断之前看到的图片属于哪一类, 这次我们来真的了, 用 RNN 来及时预测时间序列. + +![](img/f38868821469cadc36810cfd827511d1.png) + +## RNN 简介 + +## LSTM 简介 + +## 训练数据 + +我们要用到的数据就是这样的一些数据, 我们想要用 sin  的曲线预测出 cos  的曲线. + +![](img/22309cd02ee52b3a65e1f0022e8b964e.png) + +``` +import torch +from torch import nn +from torch.autograd import Variable +import numpy as np +import matplotlib.pyplot as plt + +torch.manual_seed(1) # reproducible + +# Hyper Parameters +TIME_STEP = 10 # rnn time step / image height +INPUT_SIZE = 1 # rnn input size / image width +LR = 0.02 # learning rate +DOWNLOAD_MNIST = False # set to True if haven\'t download the data +``` + +## RNN模型 + +这一次的 RNN, 我们对每一个 r_out  都得放到 Linear  中去计算出预测的 output , 所以我们能用一个 for loop 来循环计算. **这点是 Tensorflow 望尘莫及的!** 除了这点, 还有一些动态的过程都可以在这个教程中查看, 看看我们的 PyTorch 和 Tensorflow 到底哪家强. + +``` +class RNN(nn.Module): + def __init__(self): + super(RNN, self).__init__() + + self.rnn = nn.RNN( # 这回一个普通的 RNN 就能胜任 + input_size=1, + hidden_size=32, # rnn hidden unit + num_layers=1, # 有几层 RNN layers + batch_first=True, # input & output 会是以 batch size 为第一维度的特征集 e.g. (batch, time_step, input_size) + ) + self.out = nn.Linear(32, 1) + + def forward(self, x, h_state): # 因为 hidden state 是连续的, 所以我们要一直传递这一个 state + # x (batch, time_step, input_size) + # h_state (n_layers, batch, hidden_size) + # r_out (batch, time_step, output_size) + r_out, h_state = self.rnn(x, h_state) # h_state 也要作为 RNN 的一个输入 + + outs = [] # 保存所有时间点的预测值 + for time_step in range(r_out.size(1)): # 对每一个时间点计算 output + outs.append(self.out(r_out[:, time_step, :])) + return torch.stack(outs, dim=1), h_state + +rnn = RNN() +print(rnn) +""" +RNN ( + (rnn): RNN(1, 32, batch_first=True) + (out): Linear (32 -> 1) +) +""" +``` + +其实熟悉 RNN 的朋友应该知道, forward  过程中的对每个时间点求输出还有一招使得计算量比较小的. 不过上面的内容主要是为了呈现 PyTorch 在动态构图上的优势, 所以我用了一个 for loop  来搭建那套输出系统. 下面介绍一个替换方式. 使用 reshape 的方式整批计算. + +``` +def forward(self, x, h_state): + r_out, h_state = self.rnn(x, h_state) + r_out_reshaped = r_out.view(-1, HIDDEN_SIZE) # to 2D data + outs = self.linear_layer(r_out_reshaped) + outs = outs.view(-1, TIME_STEP, INPUT_SIZE) # to 3D data +``` + +## 训练 + +下面的代码就能实现动图的效果啦~开心, 可以看出, 我们使用 x 作为输入的 sin 值, 然后 y作为想要拟合的输出, cos 值. 因为他们两条曲线是存在某种关系的, 所以我们就能用 sin 来预测 cos. rnn 会理解他们的关系, 并用里面的参数分析出来这个时刻 sin 曲线上的点如何对应上 cos 曲线上的点. + +![](img/f38868821469cadc36810cfd827511d1.png) + +``` +optimizer = torch.optim.Adam(rnn.parameters(), lr=LR) # optimize all rnn parameters +loss_func = nn.MSELoss() + +h_state = None # 要使用初始 hidden state, 可以设成 None + +for step in range(60): + start, end = step * np.pi, (step 1)*np.pi # time steps + # sin 预测 cos + steps = np.linspace(start, end, 10, dtype=np.float32) + x_np = np.sin(steps) # float32 for converting torch FloatTensor + y_np = np.cos(steps) + + x = Variable(torch.from_numpy(x_np[np.newaxis, :, np.newaxis])) # shape (batch, time_step, input_size) + y = Variable(torch.from_numpy(y_np[np.newaxis, :, np.newaxis])) + + prediction, h_state = rnn(x, h_state) # rnn 对于每个 step 的 prediction, 还有最后一个 step 的 h_state + # !! 下一步十分重要 !! + h_state = Variable(h_state.data) # 要把 h_state 重新包装一下才能放入下一个 iteration, 不然会报错 + + loss = loss_func(prediction, y) # cross entropy loss + optimizer.zero_grad() # clear gradients for this training step + loss.backward() # backpropagation, compute gradients + optimizer.step() # apply gradients +``` + +![](img/04a6040ad4f06a69a92f440ea17dde44.png) + +所以这也就是在我 [github 代码](https://www.pytorchtutorial.com/goto/https://github.com/MorvanZhou/PyTorch-Tutorial/blob/master/tutorial-contents/403_RNN_regressor.py) 中的每一步的意义啦. + +文章来源:[莫烦](https://www.pytorchtutorial.com/goto/https://morvanzhou.github.io/) \ No newline at end of file diff --git a/docs/pytorch/19.md b/docs/pytorch/19.md new file mode 100644 index 0000000..9ab0af4 --- /dev/null +++ b/docs/pytorch/19.md @@ -0,0 +1,138 @@ +# [莫烦 PyTorch 系列教程] 4.4 – AutoEncoder (自编码/非监督学习) + +神经网络也能进行非监督学习, 只需要训练数据, 不需要标签数据. 自编码就是这样一种形式. 自编码能自动分类数据, 而且也能嵌套在半监督学习的上面, 用少量的有标签样本和大量的无标签样本学习. + +这次我们还用 MNIST 手写数字数据来压缩再解压图片. + +![](img/c429fb827df769a542339e200e2ea20c.png) + +然后用压缩的特征进行非监督分类. + +![](img/f790e22ee4be05f818e52467c2f13b37.png) + +## 训练数据 + +自编码只用训练集就好了, 而且只需要训练 training data 的 image, 不用训练 labels. + +``` +import torch +import torch.nn as nn +from torch.autograd import Variable +import torch.utils.data as Data +import torchvision + +# 超参数 +EPOCH = 10 +BATCH_SIZE = 64 +LR = 0.005 +DOWNLOAD_MNIST = True # 下过数据的话, 就可以设置成 False +N_TEST_IMG = 5 # 到时候显示 5张图片看效果, 如上图一 + +# Mnist digits dataset +train_data = torchvision.datasets.MNIST( + root=\'./mnist/\', + train=True, # this is training data + transform=torchvision.transforms.ToTensor(), # Converts a PIL.Image or numpy.ndarray to + # torch.FloatTensor of shape (C x H x W) and normalize in the range [0.0, 1.0] + download=DOWNLOAD_MNIST, # download it if you don\'t have it +) +``` + +![](img/ffeedc89cc695e61aa6e941c1c696a39.png) + +这就是一张我们要训练的手写数字 4. + +## AutoEncoder + +AutoEncoder 形式很简单, 分别是 encoder  和 decoder , 压缩和解压, 压缩后得到压缩的特征值, 再从压缩的特征值解压成原图片. + +``` +class AutoEncoder(nn.Module): + def __init__(self): + super(AutoEncoder, self).__init__() + + # 压缩 + self.encoder = nn.Sequential( + nn.Linear(28*28, 128), + nn.Tanh(), + nn.Linear(128, 64), + nn.Tanh(), + nn.Linear(64, 12), + nn.Tanh(), + nn.Linear(12, 3), # 压缩成3个特征, 进行 3D 图像可视化 + ) + # 解压 + self.decoder = nn.Sequential( + nn.Linear(3, 12), + nn.Tanh(), + nn.Linear(12, 64), + nn.Tanh(), + nn.Linear(64, 128), + nn.Tanh(), + nn.Linear(128, 28*28), + nn.Sigmoid(), # 激励函数让输出值在 (0, 1) + ) + + def forward(self, x): + encoded = self.encoder(x) + decoded = self.decoder(encoded) + return encoded, decoded + +autoencoder = AutoEncoder() +``` + +#### 训练 + +训练, 并可视化训练的过程. 我们可以有效的利用 encoder 和 decoder 来做很多事, 比如这里我们用 decoder 的信息输出看和原图片的对比, 还能用 encoder 来看经过压缩后, 神经网络对原图片的理解. encoder 能将不同图片数据大概的分离开来. 这样就是一个无监督学习的过程. + +![](img/c429fb827df769a542339e200e2ea20c.png) + +``` +optimizer = torch.optim.Adam(autoencoder.parameters(), lr=LR) +loss_func = nn.MSELoss() + +for epoch in range(EPOCH): + for step, (x, y) in enumerate(train_loader): + b_x = Variable(x.view(-1, 28*28)) # batch x, shape (batch, 28*28) + b_y = Variable(x.view(-1, 28*28)) # batch y, shape (batch, 28*28) + b_label = Variable(y) # batch label + + encoded, decoded = autoencoder(b_x) + + loss = loss_func(decoded, b_y) # mean square error + optimizer.zero_grad() # clear gradients for this training step + loss.backward() # backpropagation, compute gradients + optimizer.step() # apply gradients +``` + +![](img/9e1df524980c8f42ab4353070c2a1b74.png) + +## 画3D图 + +![](img/f790e22ee4be05f818e52467c2f13b37.png) + +3D 的可视化图挺有趣的, 还能挪动观看, 更加直观, 好理解. + +``` +# 要观看的数据 +view_data = Variable(train_data.train_data[:200].view(-1, 28*28).type(torch.FloatTensor)/255.) +encoded_data, _ = autoencoder(view_data) # 提取压缩的特征值 +fig = plt.figure(2) +ax = Axes3D(fig) # 3D 图 +# x, y, z 的数据值 +X = encoded_data.data[:, 0].numpy() +Y = encoded_data.data[:, 1].numpy() +Z = encoded_data.data[:, 2].numpy() +values = train_data.train_labels[:200].numpy() # 标签值 +for x, y, z, s in zip(X, Y, Z, values): + c = cm.rainbow(int(255*s/9)) # 上色 + ax.text(x, y, z, s, backgroundcolor=c) # 标位子 +ax.set_xlim(X.min(), X.max()) +ax.set_ylim(Y.min(), Y.max()) +ax.set_zlim(Z.min(), Z.max()) +plt.show() +``` + +所以这也就是在我 [github 代码](https://www.pytorchtutorial.com/goto/https://github.com/MorvanZhou/PyTorch-Tutorial/blob/master/tutorial-contents/404_autoencoder.py) 中的每一步的意义啦. + +文章来源:[莫烦](https://www.pytorchtutorial.com/goto/https://morvanzhou.github.io/) \ No newline at end of file diff --git a/docs/pytorch/20.md b/docs/pytorch/20.md new file mode 100644 index 0000000..c785c36 --- /dev/null +++ b/docs/pytorch/20.md @@ -0,0 +1,165 @@ +# [莫烦 PyTorch 系列教程] 4.5 – DQN 强化学习 (Reinforcement Learning) + +Torch 是神经网络库, 那么也可以拿来做强化学习, 之前我用另一个强大神经网络库 Tensorflow来制作了这一个 从浅入深强化学习教程, 你同样也可以用 PyTorch 来实现, 这次我们就举 DQN 的例子, 我对比了我的 Tensorflow DQN 的代码, 发现 PyTorch 写的要简单很多. 如果对 DQN 或者强化学习还没有太多概念, 强烈推荐我的这个DQN动画短片(如下), 让你秒懂DQN. 还有强推这套花了我几个月来制作的[强化学习教程](https://www.pytorchtutorial.com/goto/https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/)! + + + +## 模块导入和参数设置 + +这次除了 Torch 自家模块, 我们还要导入 Gym 环境库模块. + +``` +import torch +import torch.nn as nn +from torch.autograd import Variable +import torch.nn.functional as F +import numpy as np +import gym + +# 超参数 +BATCH_SIZE = 32 +LR = 0.01 # learning rate +EPSILON = 0.9 # 最优选择动作百分比 +GAMMA = 0.9 # 奖励递减参数 +TARGET_REPLACE_ITER = 100 # Q 现实网络的更新频率 +MEMORY_CAPACITY = 2000 # 记忆库大小 +env = gym.make(\'CartPole-v0\') # 立杆子游戏 +env = env.unwrapped +N_ACTIONS = env.action_space.n # 杆子能做的动作 +N_STATES = env.observation_space.shape[0] # 杆子能获取的环境信息数 +``` + +## 神经网络 + +DQN 当中的神经网络模式, 我们将依据这个模式建立两个神经网络, 一个是现实网络 (Target Net), 一个是估计网络 (Eval Net). + +``` +class Net(nn.Module): + def __init__(self, ): + super(Net, self).__init__() + self.fc1 = nn.Linear(N_STATES, 10) + self.fc1.weight.data.normal_(0, 0.1) # initialization + self.out = nn.Linear(10, N_ACTIONS) + self.out.weight.data.normal_(0, 0.1) # initialization + + def forward(self, x): + x = self.fc1(x) + x = F.relu(x) + actions_value = self.out(x) + return actions_value +``` + +## DQN体系 + +简化的 DQN 体系是这样, 我们有两个 net, 有选动作机制, 有存经历机制, 有学习机制. + +``` +class DQN(object): + def __init__(self): + # 建立 target net 和 eval net 还有 memory + + def choose_action(self, x): + # 根据环境观测值选择动作的机制 + return action + + def store_transition(self, s, a, r, s_): + # 存储记忆 + + def learn(self): + # target 网络更新 + # 学习记忆库中的记忆 +``` + +接下来就是具体的啦, 在 DQN 中每个功能都是怎么做的. + +``` +class DQN(object): + def __init__(self): + self.eval_net, self.target_net = Net(), Net() + + self.learn_step_counter = 0 # 用于 target 更新计时 + self.memory_counter = 0 # 记忆库记数 + self.memory = np.zeros((MEMORY_CAPACITY, N_STATES * 2 2)) # 初始化记忆库 + self.optimizer = torch.optim.Adam(self.eval_net.parameters(), lr=LR) # torch 的优化器 + self.loss_func = nn.MSELoss() # 误差公式 + + def choose_action(self, x): + x = Variable(torch.unsqueeze(torch.FloatTensor(x), 0)) + # 这里只输入一个 sample + if np.random.uniform() < EPSILON: # 选最优动作 + actions_value = self.eval_net.forward(x) + action = torch.max(actions_value, 1)[1].data.numpy()[0, 0] # return the argmax + else: # 选随机动作 + action = np.random.randint(0, N_ACTIONS) + return action + + def store_transition(self, s, a, r, s_): + transition = np.hstack((s, [a, r], s_)) + # 如果记忆库满了, 就覆盖老数据 + index = self.memory_counter % MEMORY_CAPACITY + self.memory[index, :] = transition + self.memory_counter = 1 + + def learn(self): + # target net 参数更新 + if self.learn_step_counter % TARGET_REPLACE_ITER == 0: + self.target_net.load_state_dict(self.eval_net.state_dict()) + self.learn_step_counter = 1 + + # 抽取记忆库中的批数据 + sample_index = np.random.choice(MEMORY_CAPACITY, BATCH_SIZE) + b_memory = self.memory[sample_index, :] + b_s = Variable(torch.FloatTensor(b_memory[:, :N_STATES])) + b_a = Variable(torch.LongTensor(b_memory[:, N_STATES:N_STATES 1].astype(int))) + b_r = Variable(torch.FloatTensor(b_memory[:, N_STATES 1:N_STATES 2])) + b_s_ = Variable(torch.FloatTensor(b_memory[:, -N_STATES:])) + + # 针对做过的动作b_a, 来选 q_eval 的值, (q_eval 原本有所有动作的值) + q_eval = self.eval_net(b_s).gather(1, b_a) # shape (batch, 1) + q_next = self.target_net(b_s_).detach() # q_next 不进行反向传递误差, 所以 detach + q_target = b_r GAMMA * q_next.max(1)[0] # shape (batch, 1) + loss = self.loss_func(q_eval, q_target) + + # 计算, 更新 eval net + self.optimizer.zero_grad() + loss.backward() + self.optimizer.step() +``` + +## 训练 + +按照 Qlearning 的形式进行 off-policy 的更新. 我们进行回合制更行, 一个回合完了, 进入下一回合. 一直到他们将杆子立起来很久. + +``` +dqn = DQN() # 定义 DQN 系统 + +for i_episode in range(400): + s = env.reset() + while True: + env.render() # 显示实验动画 + a = dqn.choose_action(s) + + # 选动作, 得到环境反馈 + s_, r, done, info = env.step(a) + + # 修改 reward, 使 DQN 快速学习 + x, x_dot, theta, theta_dot = s_ + r1 = (env.x_threshold - abs(x)) / env.x_threshold - 0.8 + r2 = (env.theta_threshold_radians - abs(theta)) / env.theta_threshold_radians - 0.5 + r = r1 r2 + + # 存记忆 + dqn.store_transition(s, a, r, s_) + + if dqn.memory_counter > MEMORY_CAPACITY: + dqn.learn() # 记忆库满了就进行学习 + + if done: # 如果回合结束, 进入下回合 + break + + s = s_ +``` + +所以这也就是在我 [github 代码](https://www.pytorchtutorial.com/goto/https://github.com/MorvanZhou/PyTorch-Tutorial/blob/master/tutorial-contents/405_DQN_Reinforcement_learning.py) 中的每一步的意义啦. + +文章来源:[莫烦](https://www.pytorchtutorial.com/goto/https://morvanzhou.github.io/) \ No newline at end of file diff --git a/docs/pytorch/21.md b/docs/pytorch/21.md new file mode 100644 index 0000000..925b615 --- /dev/null +++ b/docs/pytorch/21.md @@ -0,0 +1,112 @@ +# [莫烦 PyTorch 系列教程] 4.6 – GAN (Generative Adversarial Nets 生成对抗网络) + +GAN 是一个近几年比较流行的生成网络形式. 对比起传统的生成模型, 他减少了模型限制和生成器限制, 他具有有更好的生成能力. 人们常用假钞鉴定者和假钞制造者来打比喻, 但是我不喜欢这个比喻, 觉得没有真实反映出 GAN 里面的机理. + +所以我的一句话介绍 GAN 就是: Generator 是新手画家, Discriminator 是新手鉴赏家, 你是高级鉴赏家. 你将著名画家的品和新手画家的作品都给新手鉴赏家评定, 并告诉新手鉴赏家哪些是新手画家画的, 哪些是著名画家画的, 新手鉴赏家就慢慢学习怎么区分新手画家和著名画家的画, 但是新手画家和新手鉴赏家是好朋友, 新手鉴赏家会告诉新手画家要怎么样画得更像著名画家, 新手画家就能将自己的突然来的灵感 (random noise) 画得更像著名画家. 我用一个短动画形式来诠释了整个过程 (GAN 动画简介) (如下). + +下面是本节内容的效果, 绿线的变化是新手画家慢慢学习如何踏上画家之路的过程. 而能被认定为著名的画作在 upper bound  和 lower bound  之间. + +![](img/febe7e5dc5d5b9a5004d15c50d3228c1.png) + +## 超参数设置 + +新手画家 (Generator) 在作画的时候需要有一些灵感 (random noise), 我们这些灵感的个数定义为 N_IDEAS . 而一幅画需要有一些规格, 我们将这幅画的画笔数定义一下, N_COMPONENTS  就是一条一元二次曲线(这幅画画)上的点个数. 为了进行批训练, 我们将一整批话的点都规定一下( PAINT_POINTS ). + +``` +import torch +import torch.nn as nn +from torch.autograd import Variable +import numpy as np +import matplotlib.pyplot as plt + +torch.manual_seed(1) # reproducible +np.random.seed(1) + +# 超参数 +BATCH_SIZE = 64 +LR_G = 0.0001 # learning rate for generator +LR_D = 0.0001 # learning rate for discriminator +N_IDEAS = 5 # think of this as number of ideas for generating an art work (Generator) +ART_COMPONENTS = 15 # it could be total point G can draw in the canvas +PAINT_POINTS = np.vstack([np.linspace(-1, 1, ART_COMPONENTS) for _ in range(BATCH_SIZE)]) +``` + +## 著名画家的画 + +我们需要有很多画是来自著名画家的(real data), 将这些著名画家的画, 和新手画家的画都传给新手鉴赏家, 让鉴赏家来区分哪些是著名画家, 哪些是新手画家的画. 如何区分我们在后面呈现. 这里我们生成一些著名画家的画 (batch 条不同的一元二次方程曲线). + +``` +def artist_works(): # painting from the famous artist (real target) + a = np.random.uniform(1, 2, size=BATCH_SIZE)[:, np.newaxis] + paintings = a * np.power(PAINT_POINTS, 2) (a-1) + paintings = torch.from_numpy(paintings).float() + return Variable(paintings) +``` + +下面就是会产生曲线的一个上限和下限. + +![](img/a577eb2dc81a64cfc4f6d04ff9a25873.png) + +## 神经网络 + +这里会创建两个神经网络, 分别是 Generator (新手画家), Discriminator(新手鉴赏家). G 会拿着自己的一些灵感当做输入, 输出一元二次曲线上的点 (G 的画). + +D 会接收一幅画作 (一元二次曲线), 输出这幅画作到底是不是著名画家的画(是著名画家的画的概率). + +``` +G = nn.Sequential( # Generator + nn.Linear(N_IDEAS, 128), # random ideas (could from normal distribution) + nn.ReLU(), + nn.Linear(128, ART_COMPONENTS), # making a painting from these random ideas +) + +D = nn.Sequential( # Discriminator + nn.Linear(ART_COMPONENTS, 128), # receive art work either from the famous artist or a newbie like G + nn.ReLU(), + nn.Linear(128, 1), + nn.Sigmoid(), # tell the probability that the art work is made by artist +) +``` + +## 训练 + +接着我们来同时训练 D 和 G. 训练之前, 我们来看看G作画的原理. G 首先会有些灵感, G_ideas 就会拿到这些随机灵感 (可以是正态分布的随机数), 然后 G 会根据这些灵感画画. 接着我们拿着著名画家的画和 G 的画, 让 D 来判定这两批画作是著名画家画的概率. + +``` +for step in range(10000): + artist_paintings = artist_works() # real painting from artist + G_ideas = Variable(torch.randn(BATCH_SIZE, N_IDEAS)) # random ideas + G_paintings = G(G_ideas()) # fake painting from G (random ideas) + + prob_artist0 = D(artist_paintings) # D try to increase this prob + prob_artist1 = D(G_paintings) # D try to reduce this prob +``` + +然后计算有多少来之画家的画猜对了, 有多少来自 G 的画猜对了, 我们想最大化这些猜对的次数. 这也就是 log(D(x)) log(1-D(G(z))  在[论文](https://www.pytorchtutorial.com/goto/https://arxiv.org/abs/1406.2661)中的形式. 而因为 torch 中提升参数的形式是最小化误差, 那我们把最大化 score 转换成最小化 loss, 在两个 score 的合的地方加一个符号就好. 而 G 的提升就是要减小 D 猜测 G 生成数据的正确率, 也就是减小 D_score1. + +``` + D_loss = - torch.mean(torch.log(prob_artist0) torch.log(1\. - prob_artist1)) + G_loss = torch.mean(torch.log(1\. - prob_artist1)) +``` + +最后我们在根据 loss  提升神经网络就好了. + +``` + opt_D.zero_grad() + D_loss.backward(retain_variables=True) # retain_variables 这个参数是为了再次使用计算图纸 + opt_D.step() + + opt_G.zero_grad() + G_loss.backward() + opt_G.step() +``` + +上面的全部代码内容在我的 [github](https://www.pytorchtutorial.com/goto/https://github.com/MorvanZhou/PyTorch-Tutorial/blob/master/tutorial-contents/406_GAN.py). + +## 可视化训练过程 + +可视化的代码很简单, 在这里就不会意义叙说了, 大家直接看[代码](https://www.pytorchtutorial.com/goto/https://github.com/MorvanZhou/PyTorch-Tutorial/blob/master/tutorial-contents/406_GAN.py) 吧. 在本节的最上面就是这次的动图效果, 最后达到收敛时, 下过如下, G 能成功的根据自己的”灵感”, 产生出一条很像 artist画出的曲线, 而 D 再也没有能力猜出这到底是 G 的画作还是 artist 的画作, 他只能一半时间猜是 G 的, 一半时间猜是 artist的. + +![](img/7eca2f8318f254b17ca0bc215ec4f5a0.png) + +文章来源:[莫烦](https://www.pytorchtutorial.com/goto/https://morvanzhou.github.io/) \ No newline at end of file diff --git a/docs/pytorch/22.md b/docs/pytorch/22.md new file mode 100644 index 0000000..2c0e24b --- /dev/null +++ b/docs/pytorch/22.md @@ -0,0 +1 @@ +# 高阶内容 \ No newline at end of file diff --git a/docs/pytorch/23.md b/docs/pytorch/23.md new file mode 100644 index 0000000..321f188 --- /dev/null +++ b/docs/pytorch/23.md @@ -0,0 +1,61 @@ +# [莫烦 PyTorch 系列教程] 5.1 – 为什么 Torch 是动态的 + +听说过 Torch 的人都听说了 torch 是动态的, 那他的动态到底是什么呢? 我们用一个 RNN 的例子来展示一下动态计算到底长什么样. + +## 动态?静态? + +对比静态动态, 我们就得知道谁是静态的. 在流行的神经网络模块中, Tensorflow 就是最典型的静态计算模块. 下图是一种我在强化学习教程中的 Tensorflow 计算图. 也就是说, 大部分时候, 用 Tensorflow 是先搭建好这样一个计算系统, 一旦搭建好了, 就不能改动了 (也有例外, 比如 dynamic_rnn() , 但是总体来说他还是运用了一个静态思维), 所有的计算都会在这种图中流动, 当然很多情况, 这样就够了, 我们不需要改动什么结构. 不动结构当然可以提高效率. 但是一旦计算流程不是静态的, 计算图要变动. 最典型的例子就是 RNN, 有时候 RNN 的 time step 不会一样, 或者在 training 和 testing 的时候, batch_size  和 time_step  也不一样, 这时, Tensorflow 就头疼了, Tensorflow 的人也头疼了. 哈哈, 如果用一个动态计算图的 Torch, 我们就好理解多了, 写起来也简单多了. + +![](img/1b292936f4a0c3be1d04e43a994fd48c.png) + +## 动态RNN + +我们拿 [这一节内容的 RNN](https://www.pytorchtutorial.com/4-3-rnn-for-regression/) 来解释动态计算图. 那节内容的[代码在这](https://www.pytorchtutorial.com/goto/https://github.com/MorvanZhou/PyTorch-Tutorial/blob/master/tutorial-contents/11_RNN_regressor.py). + +``` +.. + +######################## 前面代码都一样, 下面开始不同 ######################### + +################ 那节内容的代码结构 (静态 time step) ########## +for step in range(60): + start, end = step * np.pi, (step 1)*np.pi # time steps 都是一样长的 + # use sin predicts cos + steps = np.linspace(start, end, 10, dtype=np.float32) + ... + +################ 这节内容修改代码 (动态 time step) ######### +step = 0 +for i in range(60): + dynamic_steps = np.random.randint(1, 4) # 随机 time step 长度 + start, end = step * np.pi, (step dynamic_steps) * np.pi # different time steps length + step = dynamic_steps + + # use sin predicts cos + steps = np.linspace(start, end, 10 * dynamic_steps, dtype=np.float32) + +####################### 这下面又一样了 ########################### + print(len(steps)) # print how many time step feed to RNN + + x_np = np.sin(steps) # float32 for converting torch FloatTensor + y_np = np.cos(steps) + ... + +""" +输出的动态time step 长 +30 +30 +10 +30 +20 +30 +""" +``` + +有人会说了, Tensorflow 也有类似的功能呀, 比如说 dynamic_rnn(). 对的, 没错, 不过大家是否想过, 如果我在 Tensorflow 当中定义一个 input 的 placeholder, 这个 placeholder 将会有 (batch, time step, input size) 这几个维度, batch 好说, 随便什么大小都可以, 可是 time step 可是固定的呀, 这可不好改, 或者说改起来很麻烦. 那 PyTorch 中又可以变 batch 又可以变 time step, 这不是很方便吗. 这就体现了动态神经网络的好处. + +经过这样的折腾, torch 还能 handle 住, 已经很不容易啦. 所以当你想要处理这些动态计算图的时候, Torch 还是你首选的神经网络模块. + +所以这也就是在我 [github 代码](https://www.pytorchtutorial.com/goto/https://github.com/MorvanZhou/PyTorch-Tutorial/blob/master/tutorial-contents/501_why_torch_dynamic_graph.py) 中的每一步的意义啦. + +文章来源:[莫烦](https://www.pytorchtutorial.com/goto/https://morvanzhou.github.io/) \ No newline at end of file diff --git a/docs/pytorch/24.md b/docs/pytorch/24.md new file mode 100644 index 0000000..fa1e729 --- /dev/null +++ b/docs/pytorch/24.md @@ -0,0 +1,66 @@ +# [莫烦 PyTorch 系列教程] 5.2 – GPU 加速运算 + +在 GPU 训练可以大幅提升运算速度. 而且 Torch 也有一套很好的 GPU 运算体系. 但是要强调的是: + +* 你的电脑里有合适的 GPU 显卡(NVIDIA), 且支持 CUDA 模块. [请在NVIDIA官网查询](https://www.pytorchtutorial.com/goto/https://developer.nvidia.com/cuda-gpus) +* 必须安装 GPU 版的 Torch, [点击这里查看如何安装](https://www.pytorchtutorial.com/1-2-install-pytorch/) + +## 用 GPU 训练 CNN + +这份 GPU 的代码是依据[之前这份CNN](https://www.pytorchtutorial.com/goto/https://github.com/MorvanZhou/PyTorch-Tutorial/blob/master/tutorial-contents/401_CNN.py)的代码修改的. 大概修改的地方包括将数据的形式变成 GPU 能读的形式, 然后将 CNN 也变成 GPU 能读的形式. 做法就是在后面加上 .cuda() , 很简单. + +``` +... + +test_data = torchvision.datasets.MNIST(root=\'./mnist/\', train=False) + +# !!!!!!!! 修改 test data 形式 !!!!!!!!! # +test_x = Variable(torch.unsqueeze(test_data.test_data, dim=1)).type(torch.FloatTensor)[:2000].cuda()/255\. # Tensor on GPU +test_y = test_data.test_labels[:2000].cuda() +``` + +再来把我们的 CNN 参数也变成 GPU 兼容形式. + +``` +class CNN(nn.Module): + ... + +cnn = CNN() + +# !!!!!!!! 转换 cnn 去 CUDA !!!!!!!!! # +cnn.cuda() # Moves all model parameters and buffers to the GPU. +``` + +然后就是在 train 的时候, 将每次的training data 变成 GPU 形式. .cuda() + +``` +for epoch ..: + for step, ...: + # !!!!!!!! 这里有修改 !!!!!!!!! # + b_x = Variable(x).cuda() # Tensor on GPU + b_y = Variable(y).cuda() # Tensor on GPU + + ... + + if step % 50 == 0: + test_output = cnn(test_x) + + # !!!!!!!! 这里有修改 !!!!!!!!! # + pred_y = torch.max(test_output, 1)[1].cuda().data.squeeze() # 将操作放去 GPU + + accuracy = torch.sum(pred_y == test_y) / test_y.size(0) + ... + +test_output = cnn(test_x[:10]) + +# !!!!!!!! 这里有修改 !!!!!!!!! # +pred_y = torch.max(test_output, 1)[1].cuda().data.squeeze() # 将操作放去 GPU +... +print(test_y[:10], \'real number\') +``` + +大功告成~ + +所以这也就是在我 [github 代码](https://www.pytorchtutorial.com/goto/https://github.com/MorvanZhou/PyTorch-Tutorial/blob/master/tutorial-contents/502_GPU.py) 中的每一步的意义啦. + +文章来源:[莫烦](https://www.pytorchtutorial.com/goto/https://morvanzhou.github.io/) \ No newline at end of file diff --git a/docs/pytorch/25.md b/docs/pytorch/25.md new file mode 100644 index 0000000..bb75711 --- /dev/null +++ b/docs/pytorch/25.md @@ -0,0 +1,121 @@ +# [莫烦 PyTorch 系列教程] 5.3 – Dropout 防止过拟合 + +过拟合让人头疼, 明明训练时误差已经降得足够低, 可是测试的时候误差突然飙升. 这很有可能就是出现了过拟合现象. 强烈推荐通过(下面)这个动画的形式短时间了解什么是过拟合, 怎么解决过拟合. 下面动图就显示了我们成功缓解了过拟合现象. + +![](img/a545e4a49909bd7a80e042fd6d8267cb.png) + +## 做点数据 + +自己做一些伪数据, 用来模拟真实情况. 数据少, 才能凸显过拟合问题, 所以我们就做10个数据点. + +![](img/761c210ceb0fdd69c7e0f8bd85e39698.png) + +``` +import torch +from torch.autograd import Variable +import matplotlib.pyplot as plt + +torch.manual_seed(1) # reproducible + +N_SAMPLES = 20 +N_HIDDEN = 300 + +# training data +x = torch.unsqueeze(torch.linspace(-1, 1, N_SAMPLES), 1) +y = x 0.3*torch.normal(torch.zeros(N_SAMPLES, 1), torch.ones(N_SAMPLES, 1)) +x, y = Variable(x, requires_grad=False), Variable(y, requires_grad=False) + +# test data +test_x = torch.unsqueeze(torch.linspace(-1, 1, N_SAMPLES), 1) +test_y = test_x 0.3*torch.normal(torch.zeros(N_SAMPLES, 1), torch.ones(N_SAMPLES, 1)) +test_x, test_y = Variable(test_x, requires_grad=False), Variable(test_y, requires_grad=False) + +# show data +plt.scatter(x.data.numpy(), y.data.numpy(), c=\'magenta\', s=50, alpha=0.5, label=\'train\') +plt.scatter(test_x.data.numpy(), test_y.data.numpy(), c=\'cyan\', s=50, alpha=0.5, label=\'test\') +plt.legend(loc=\'upper left\') +plt.ylim((-2.5, 2.5)) +plt.show() +``` + +## 搭建神经网络 + +我们在这里搭建两个神经网络, 一个没有 dropout, 一个有 dropout. 没有 dropout 的容易出现 过拟合, 那我们就命名为 net_overfitting, 另一个就是 net_dropped.  torch.nn.Dropout(0.5)  这里的 0.5 指的是随机有 50% 的神经元会被关闭/丢弃. + +``` +net_overfitting = torch.nn.Sequential( + torch.nn.Linear(1, N_HIDDEN), + torch.nn.ReLU(), + torch.nn.Linear(N_HIDDEN, N_HIDDEN), + torch.nn.ReLU(), + torch.nn.Linear(N_HIDDEN, 1), +) + +net_dropped = torch.nn.Sequential( + torch.nn.Linear(1, N_HIDDEN), + torch.nn.Dropout(0.5), # drop 50% of the neuron + torch.nn.ReLU(), + torch.nn.Linear(N_HIDDEN, N_HIDDEN), + torch.nn.Dropout(0.5), # drop 50% of the neuron + torch.nn.ReLU(), + torch.nn.Linear(N_HIDDEN, 1), +) +``` + +## 训练 + +训练的时候, 这两个神经网络分开训练. 训练的环境都一样. + +``` +optimizer_ofit = torch.optim.Adam(net_overfitting.parameters(), lr=0.01) +optimizer_drop = torch.optim.Adam(net_dropped.parameters(), lr=0.01) +loss_func = torch.nn.MSELoss() + +for t in range(500): + pred_ofit = net_overfitting(x) + pred_drop = net_dropped(x) + + loss_ofit = loss_func(pred_ofit, y) + loss_drop = loss_func(pred_drop, y) + + optimizer_ofit.zero_grad() + optimizer_drop.zero_grad() + loss_ofit.backward() + loss_drop.backward() + optimizer_ofit.step() + optimizer_drop.step() +``` + +## 对比测试结果 + +在这个 for  循环里, 我们加上画测试图的部分. 注意在测试时, 要将网络改成 eval()  形式, 特别是 net_dropped , net_overfitting  改不改其实无所谓. 画好图再改回 train()  模式. + +![](img/a545e4a49909bd7a80e042fd6d8267cb.png) + +``` +... + + optimizer_ofit.step() + optimizer_drop.step() + + # 接着上面来 + if t % 10 == 0: # 每 10 步画一次图 + # 将神经网络转换成测试形式, 画好图之后改回 训练形式 + net_overfitting.eval() + net_dropped.eval() # 因为 drop 网络在 train 的时候和 test 的时候参数不一样. + + ... + test_pred_ofit = net_overfitting(test_x) + test_pred_drop = net_dropped(test_x) + ... + + # 将两个网络改回 训练形式 + net_overfitting.train() + net_dropped.train() +``` + +![](img/c2914d88b6f17b84982e162cf6930a88.png) + +所以这也就是在我 [github 代码](https://www.pytorchtutorial.com/goto/https://github.com/MorvanZhou/PyTorch-Tutorial/blob/master/tutorial-contents/503_dropout.py) 中的每一步的意义啦. + +文章来源:[莫烦](https://www.pytorchtutorial.com/goto/https://morvanzhou.github.io/) \ No newline at end of file diff --git a/docs/pytorch/26.md b/docs/pytorch/26.md new file mode 100644 index 0000000..c5d0464 --- /dev/null +++ b/docs/pytorch/26.md @@ -0,0 +1,187 @@ +# [莫烦 PyTorch 系列教程] 5.4 – Batch Normalization 批标准化 + +批标准化通俗来说就是对每一层神经网络进行标准化 (normalize) 处理, 我们知道对输入数据进行标准化能让机器学习有效率地学习. 如果把每一层后看成这种接受输入数据的模式, 那我们何不 “批标准化” 所有的层呢? 具体而且清楚的解释请看到 我(原作者)制作的 什么批标准化 动画简介(推荐)(如下). + +那我们就看看下面的两个动图, 这就是在每层神经网络有无 batch normalization 的区别啦. + +![](img/6730e1145d2a40e8ced1fda4d453d9c6.png) + +![](img/cb2138c3f800c7ca4b5ae38076d09429.png) + +## 做点数据 + +自己做一些伪数据, 用来模拟真实情况. 而且 Batch Normalization (之后都简称BN) 还能有效的控制坏的参数初始化 (initialization), 比如说 ReLU  这种激励函数最怕所有的值都落在附属区间, 那我们就将所有的参数都水平移动一个 -0.2 ( bias_initialization = -0.2 , 来看看 BN 的实力. + +![](img/fedaa24e2fcad876c77a2038c2d8d14d.png) + +``` +import torch +from torch.autograd import Variable +from torch import nn +from torch.nn import init +import torch.utils.data as Data +import torch.nn.functional as F +import matplotlib.pyplot as plt +import numpy as np + +# 超参数 +N_SAMPLES = 2000 +BATCH_SIZE = 64 +EPOCH = 12 +LR = 0.03 +N_HIDDEN = 8 +ACTIVATION = F.tanh # 你可以换 relu 试试 +B_INIT = -0.2 # 模拟不好的 参数初始化 + +# training data +x = np.linspace(-7, 10, N_SAMPLES)[:, np.newaxis] +noise = np.random.normal(0, 2, x.shape) +y = np.square(x) - 5 noise + +# test data +test_x = np.linspace(-7, 10, 200)[:, np.newaxis] +noise = np.random.normal(0, 2, test_x.shape) +test_y = np.square(test_x) - 5 noise + +train_x, train_y = torch.from_numpy(x).float(), torch.from_numpy(y).float() +test_x = Variable(torch.from_numpy(test_x).float(), volatile=True) # volatile=True 不进行梯度计算 +test_y = Variable(torch.from_numpy(test_y).float(), volatile=True) + +train_dataset = Data.TensorDataset(data_tensor=train_x, target_tensor=train_y) +train_loader = Data.DataLoader(dataset=train_dataset, batch_size=BATCH_SIZE, shuffle=True, num_workers=2,) + +# show data +plt.scatter(train_x.numpy(), train_y.numpy(), c=\'#FF9359\', s=50, alpha=0.2, label=\'train\') +plt.legend(loc=\'upper left\') +plt.show() +``` + +## 搭建神经网络 + +这里就教你如何构建带有 BN 的神经网络的. BN 其实可以看做是一个 layer ( BN layer ). 我们就像平时加层一样加 BN layer  就好了. 注意, 我还对输入数据进行了一个 BN 处理, 因为如果你把输入数据看出是 从前面一层来的输出数据, 我们同样也能对她进行 BN. + +``` +class Net(nn.Module): + def __init__(self, batch_normalization=False): + super(Net, self).__init__() + self.do_bn = batch_normalization + self.fcs = [] # 太多层了, 我们用 for loop 建立 + self.bns = [] + self.bn_input = nn.BatchNorm1d(1, momentum=0.5) # 给 input 的 BN + + for i in range(N_HIDDEN): # 建层 + input_size = 1 if i == 0 else 10 + fc = nn.Linear(input_size, 10) + setattr(self, \'fc%i\' % i, fc) # 注意! pytorch 一定要你将层信息变成 class 的属性! 我在这里花了2天时间发现了这个 bug + self._set_init(fc) # 参数初始化 + self.fcs.append(fc) + if self.do_bn: + bn = nn.BatchNorm1d(10, momentum=0.5) + setattr(self, \'bn%i\' % i, bn) # 注意! pytorch 一定要你将层信息变成 class 的属性! 我在这里花了2天时间发现了这个 bug + self.bns.append(bn) + + self.predict = nn.Linear(10, 1) # output layer + self._set_init(self.predict) # 参数初始化 + + def _set_init(self, layer): # 参数初始化 + init.normal(layer.weight, mean=0., std=.1) + init.constant(layer.bias, B_INIT) + + def forward(self, x): + pre_activation = [x] + if self.do_bn: x = self.bn_input(x) # 判断是否要加 BN + layer_input = [x] + for i in range(N_HIDDEN): + x = self.fcs[i](x) + pre_activation.append(x) # 为之后出图 + if self.do_bn: x = self.bns[i](x) # 判断是否要加 BN + x = ACTIVATION(x) + layer_input.append(x) # 为之后出图 + out = self.predict(x) + return out, layer_input, pre_activation + +# 建立两个 net, 一个有 BN, 一个没有 +nets = [Net(batch_normalization=False), Net(batch_normalization=True)] +``` + +## 训练 + +训练的时候, 这两个神经网络分开训练. 训练的环境都一样. + +``` +opts = [torch.optim.Adam(net.parameters(), lr=LR) for net in nets] + +loss_func = torch.nn.MSELoss() + +losses = [[], []] # 每个网络一个 list 来记录误差 +for epoch in range(EPOCH): + print(\'Epoch: \', epoch) + for step, (b_x, b_y) in enumerate(train_loader): + b_x, b_y = Variable(b_x), Variable(b_y) + for net, opt in zip(nets, opts): # 训练两个网络 + pred, _, _ = net(b_x) + loss = loss_func(pred, b_y) + opt.zero_grad() + loss.backward() + opt.step() # 这也会训练 BN 里面的参数 +``` + +## 画图 + +这个教程有几张图要画, 首先我们画训练时的动态图. 我单独定义了一个画动图的功能 plot_histogram() , 因为不是重点, 所以代码的具体细节请看我的 [github](https://www.pytorchtutorial.com/goto/https://github.com/MorvanZhou/PyTorch-Tutorial/blob/master/tutorial-contents/504_batch_normalization.py), + +![](img/cb2138c3f800c7ca4b5ae38076d09429.png) + +``` +f, axs = plt.subplots(4, N_HIDDEN 1, figsize=(10, 5)) + +def plot_histogram(l_in, l_in_bn, pre_ac, pre_ac_bn): + ... + +for epoch in range(EPOCH): + layer_inputs, pre_acts = [], [] + for net, l in zip(nets, losses): + # 一定要把 net 的设置成 eval 模式, eval下的 BN 参数会被固定 + net.eval() + pred, layer_input, pre_act = net(test_x) + l.append(loss_func(pred, test_y).data[0]) + layer_inputs.append(layer_input) + pre_acts.append(pre_act) + # 收集好信息后将 net 设置成 train 模式, 继续训练 + net.train() + plot_histogram(*layer_inputs, *pre_acts) # plot histogram + + # 后面接着之前 for loop 中的代码来 + for step, (b_x, b_y) in enumerate(train_loader): + ... +``` + +后面还有两张图, 一张是预测曲线, 一张是误差变化曲线, 具体代码不在这里呈现, 想知道如何画图的朋友, 请参考我的 [github](https://www.pytorchtutorial.com/goto/https://github.com/MorvanZhou/PyTorch-Tutorial/blob/master/tutorial-contents/504_batch_normalization.py) + +## 对比结果 + +首先来看看这次对比的两个激励函数是长什么样: + +![](img/7345448d48d8d6c6c1b03fda91334e3e.png) + +然后我们来对比使用不同激励函数的结果. + +![](img/4d69c0a49be83a66f774caf12e64c3a7.png) + +![](img/25959870b2b1e7d6fd61229cb20bed29.png) + +![](img/03f4667f9aae4918338a56b74865a389.png) + +上面是使用 relu  激励函数的结果, 我们可以看到, 没有使用 BN 的误差要高, 线条不能拟合数据, 原因是我们有一个 “Bad initialization”, 初始 bias = -0.2 , 这一招, 让 relu  无法捕捉到在负数区间的输入值. 而有了 BN, 这就不成问题了. + +![](img/bbd3ae66e0235fac8745c37306e74a52.png) + +![](img/90e1ab65f286c889d94c9f6c57d596c9.png) + +![](img/c42f3cec435a83431d5a1737e99b8b8c.png) + +上面结果是使用 tanh  作为激励函数的结果, 可以看出, 不好的初始化, 让输入数据在激活前分散得非常离散, 而有了 BN, 数据都被收拢了. 收拢的数据再放入激励函数就能很好地利用激励函数的非线性. 而且可以看出没有 BN 的数据让激活后的结果都分布在 tanh  的两端, 而这两端的梯度又非常的小, 是的后面的误差都不能往前传, 导致神经网络死掉了. + +所以这也就是在我 [github 代码](https://www.pytorchtutorial.com/goto/https://github.com/MorvanZhou/PyTorch-Tutorial/blob/master/tutorial-contents/504_batch_normalization.py) 中的每一步的意义啦. + +文章来源:[莫烦](https://www.pytorchtutorial.com/goto/https://morvanzhou.github.io/) \ No newline at end of file diff --git a/docs/pytorch/img/03f4667f9aae4918338a56b74865a389.png b/docs/pytorch/img/03f4667f9aae4918338a56b74865a389.png new file mode 100644 index 0000000000000000000000000000000000000000..d729375e7187f474ebda2c882499e419b90ebef6 GIT binary patch literal 4914 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 literal 0 HcmV?d00001 diff --git a/docs/pytorch/img/04a6040ad4f06a69a92f440ea17dde44.png b/docs/pytorch/img/04a6040ad4f06a69a92f440ea17dde44.png new file mode 100644 index 0000000000000000000000000000000000000000..5792acb410b9baf85280329942e1df435cafd218 GIT binary patch literal 20412 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 literal 0 HcmV?d00001 diff --git a/docs/pytorch/img/20e2ebdf112e4aa3202e951e072c2dc2.png b/docs/pytorch/img/20e2ebdf112e4aa3202e951e072c2dc2.png new file mode 100644 index 0000000000000000000000000000000000000000..af1af4c027da8817c5330085f99c1dcfd289f0a7 GIT binary patch literal 14528 zcmb7rcQ9Si*LD&?^oSM&5j}dl2!as36E#Zoa*y5x5xuwQEn4(`?-4Gp5}iaZ_Yee; z;37ne_IhW&cjo(MzCV8NKWEMC*=y}H>+HSubDp(UjJBo{2_YTfty{N9RFoBTZ{5OK zxOMA};a!}Y5pToTz8fK+t*-y_`uduLNz#BamaTC93%b|XIRz~!o|PSR@7_HE0s=xp zLLwp}Vq#(v5)x8UQZh2KgHpWMTerm3R21a&{V>=d4bLB+Pmq)3e_#bYZzQK?%+Nqp z>NNbNlA@_p<25|(DWko!9r4w_ZykoIg5h2i4Jrez3|N-Z2e% z(ZsN{DgETq(5Aiw?8Ji~a2zMDkC!9`G|L3!1fh5O6YBT^H%7iLcll_sfHX|o?Jb4> zu6{O8@mfTmbhf#!@m*;Baqu6Nh21xn!JSJn zVhf#EJsPw`*=J^8S<*ezV_7)eV4$gkJo&GfNs1T;Wy|RO^L+ZfK=!MNzo#_{m*H4z zeh+OxK8O-b`t@s}w^#nSVYAhj?7S&x4i6HmZw^8r#s+N9_Y3%#WFrGTICsB)#74p9 zJA<&PkM@uz4M?W=-I^IZ`ac7%-%g(#D>tdpm!;Etxi*pfjU7*kd2Q~}m@v>c zulH6_qwi1QUjvu7qds8=EiwCE!KPPI`qGiWW^;n@X16muitvn02>*-C=OLJfsdJz@ zZziwv`M>t1Z`UyLg0HTH%NP2KO8S#`Xg)3^zZTVP1VH{6`Hc_NATr@c9kQchBiItp zCoXS0a1sWrg&jzW6W_&O`brL;dlLSw9_H~O0R6ow7$p(?L`+eCs{?d$#5VH|1>^K- z&XSmRjvYrE@i~Qc)M6WofO)lxW9Hk#wGGyvPd;KzFHZLfzFqRO7tOncbd;1{%)ZDW z8R44Gn|Um$#0XCZ6jf!xr3-{Wy60xMu`I6vP`x)m0Dmzn5><1@c>RxUo zOHamip;-$vdnpQ*y;ALXy!N)?+}FI@_-6v_A|kTrF+e7?%x}UcQBhK=kqS#kZace+ zA$apf%sJ{Pe8}rSu9o%E;F8dZ}O$V zLu;2wpSSicda8p!VU`I%(J|YEYTm6ug0Fjb&1!)i+A1P2X&*zSYhEYq`{r;D0OmrC z^~GEqpsgk6z*Ql{Y7yV|tVRkx$aSX|&&sqo9Y4Y1JUd{(@x1$N8--u(QaWS!LHY0< zR5nwECI9QWxhO6OACpU{oIAc+<3%g0nb5Cz!%gMTRzv)ADs%47fe^gx-Ogi%yf9`gtrTm9xHj9@x3{BH;t9p8-6q z(Q}8XCFdWJF&2Lj#S)jiFn|hUIXrZk|3sK$Z#rXsQ3mot2CMcNQyPHY`cDLJZaITf z@7?=bmtb|XkxYl(`Dc2Va!eYnZrSuo_qi!zozsEtz~K4U)GzgAy7v&fv0t0IrH;e1 z%vGv_-8Ou8sPG5$mM9JLMtoA}bS|FYumJd?5T(D8l_?Y#3F0FOI7xS=TLwWd__AK> z1@)TeBKgBw@+oAWq|mY=)?5;)HN>nHgj^m@OI&V^4zm2_(Ve5we9=xF09Gl^_@=ru zWxL=zplgdqFwU-yP!nA^Nz_Ff_${Yu&!BFILrHdi;tb8)y)<90yV zIyVMv%yJG~a^>IJ-JcbxCDp2cv;Vyulh92vnFZZq@#~f-1Lj*@OEh=W{WZ7Dlnf^; zjkWE3HUmOMr-PrzILL4piTRYGb2^Vt9KbjTIw(Pt#&9MzJuh<( zgQHV$&c|dM&B)0#y~rfpAGF-(SH9qe>HlV&f4FL+^FREUawWrncDx8U!VY0!I-ycDgLuGV0PEy%}`hFN=Fw8```a0ZNJ} z|JdH-MU2m%b3$k{cyr%$ynPF0fWkBh{(#J>2dyKdWmRHmi)2GXP3xMF zYxco0wR~M-)5E&r9|ND&>QD1Aq_e^_vlvaJ$_tC2m%E{^?`xU&EiTn+r}!n+Tpe zoa=rTz&mF8+bR<@yT3W|D|m(HE1#s@c^e79Em<>DkqT(N=te%N(osV-*B3pjYQY!W zfXpwR<;WNE1&G^ZY7sG&I{6`#U#xzh{88ex2$%Xye#uN7FXUh~fO7NEgknO*NBuMO zh@cQv$2m+N9VS0RWF^7cQoNwd3vR2)G&+CA`#F9vDRkAi!QQ@@bm#k0Sgy6JQct4L z#%BIf^ovd~K$f#?i=5?pXKzVypcIanul*;AU~2Cx$Y<&TpP4{>$DgJH+6vl)*d~^3 zLm7dD(8qngC9g>FH8Kg*EGQz)eSLRoLXJ?3?8gjw?iR<@b=SJ)E?{n!vs2 zS6^kOX#Bsset*0-wefhR_Ne^y*A?O7TCMH#q0Ggg*sVKjqIzF5*D10OoI6J{WlKJE3$e)-mW9H`+6JtIXHxHW-(zZQ`NA~|4ApW02_Wxie6Uir$*!muhZX3QY zPDrxlRQ_3|s8J&3_ivd%L(k6FOpj<3{yv9~NNtWBb-&@t+bO|bw2FomtBp1G1U~dA z-nS}rmhp#gUQfTOEQ3)U1_j7#el;rCA2!4^n;#s7(0~NPFTZ2@m#Zc!Dr5#>cMc;< z*`|ViTvXdZ4x@cl7qmI*SHyy}cem{l8KtwdesVk9rIFz>tm19T-qo|-Sm?|OBMbS` z1+9Df@l2GAyf(Yl=g)jd0DBSkS^TL1^mKjjJ(oBal;q9M?r9^H`33B8xV&=~MEvW% zsJcgH69XM3wTwNw{4*Ne(Tbi6DD(`gA(%-4Q!K1oK@xh;gxWmtvqqo1u%3`Oc-s z-0LT0VC`+ceuNt1*zqoB*{KMIdeaxRfH#2-#ddeYC9n8Ccu%-2D>?cMRDWx(CA%C) z`HL1RK}Y=~0=ul3{yai?PYt-MbKv`hjLxq6@~2sgnRBEKEcLI6jvNuZd*%dFUt2Ey z#W0{ebU(@%7$HFep4(QboBBr0XUD5Mzr<9o%mgax8;Qk8S*Q4rmk&@2vja}KKkL-l zol0I&BAFxRE%AG=Mp!?7h+1Mc$1T3>k6wD2#PuSQl>6kRM zl!82HBl(!KTZL-(*7*F?% z$X>;(9jxy*nipzi`<|igx=*0O4iw73o23?@?h9<7(lR?D7#9?$7^dD$DA-> z^Ox!uG^HTI&ulFoc1US9kbl|b6Cha2cveb2Hl{Nc=TDEzPalW1K|!_z9!b_D;Dj;R z3(5e7vhE3MB(^nDb`fa=NP_v`?|J_**u!ng2h0tE5nigKHDDah0!(5|^OP3q`G8+; z2GJb<#gMuL$3g&@GS}sJp88&dgr+S&tNl1_lgt@lxn6H!RzOdTZN=8$KPMV!Nak`p z*9O(BOf`f1eIyN+ntA7nLYqiJ-`{VR*w(3+jMP04$1YzRUS6gZqC>i2Bw{qY8xZok z-O(Yi!~Jl7g}18*cew(n@g$}b%&snD=mEc`EUZ|?Vf_u^YSB+^Q&sn4gt(adr-zic zOJ6I_cyRu3AaD`pq*;+va?;_o8&RV$nE7=NyzV^P>n>d79X=0wI4%zz=P_+j!Tb)wsIV3-&_K4o#rj7Yi zW)%DJewdoz`(BTGfR%fA!(T0TlpXy)W<^K&b`ZJT&r<7j&UogfW3uFO2uxn|K4W)n zSV{$nei#?#VQ;@i-)>|eE_)h-y|utd916sT^Y>AbIg@)cA=k=8RtiF~a?uh#wb;^k zW7J51y9C03ND&7#y7ACd3YuboGnHU(g?Wrf%&a?uY;_ys`=BtP1c zlbQ;aPm-ElTbA;%!EL4(G!y6~PYXl`1@k&BoM$aQc*eIiwk{5=4Sr$;Ll=iU$6zAk z3LcWp?Kt2-W+K*|c8z01_ic^cel!jx6106d)^>pL86>0Bd-cHvZ#Et`C7BA=TbEs_ z8dG(H{5QeqpGYjEvYr9_A{aI_lq!mAYkQ(J;7Ct%|1M=j?>AgNQf3fKe4r##UxWjO z4JtZX3B2dt<~fTt${4bhhX#xe&T}oSlve!~n+}bf&%YaJ@A^8O&mJYTW&9j2voe$D z8}a%8c56G^m_C4#60t;9=dIFUkhks10`<^noUfBiq=FhLJs}h9;<%gkWGn>z#iu^} z!-(1XY?VJhf~4p~4b3p0$g#~y@|w;YWohJEY>+s4{PHSZnEK~_4TmU1fqHfqC94KU z4Rbm9$Wg?(7e{-Ko(lBD6E85X+UY^Rs-}k!3>Wa2{?HLh`rzCv8UJQ(c3*D~pJ(0)h^8RRn6Ft$L<68q$CLf}*Kq%F951isN@6PzCi zY1ehAw)qA^>(bY1;OZp39#tL@H;;QoEeT(`UCJ&QvZMP3xH;Iz6IQS8u3 z15@`K(#ucTuFJp9ouen+Ud)g6*803kH;p)qM@}Y~&`B$0k05Bi{?g|46?gNj{yus; z)wsF#nGOA28@eY|9e>R2OkQw=TKMq^hVwO0aE5hz(ZlVHAMENCNRO6?=qV@2Gfiq; zH!C4fPu)fn;vTM<>#}7RMi|*npOo=+Q-->YLVIR<^IRKzs;13A3Bo@PK4mX#g3j}3 zHT1zDecaphbk-bC{*mW%`qT|Ald7`5qF>Ugk^@;n4fgS6pm4+NJfm!s{-@n<&>yJY zoJ5L@la)b_@A)UyXZ_n@g}LESV8^B2bv3FWKNBxkO*fU93iq!=OQv4f(Yts57E?1` z@i$vZTw20erjjy%X+Ld4Lv~Npd$cG>V#G9l+*E~#jr%z1kkZJ9(nqim=hzGP2H;WM z(-T>;tkGCq)7^;M(EvC2U;pHHGfRqP#nsS!Iw<@@nc+Def|pu8ko7&DI9E>vS3Gql zQ{0Y9ouEnNG!g8eRY!c1B=B2Ta{;Bug4|l;nzcuMDx1YGzlv{^UpDY;+U|FINu_7X z@*{4Q*hQ~BQLb!%wBj~z`IO6r|E*)clO%Zo)`C?A{Q?-m{d!;J=+5^p<$)r?CjejH zlc$+(UgQZG_bJICl?Y^~O)1Ulh7xQ$ml3%{KkrDAg9i?nDA7H{DJL?XdpKXm7YaCz zJbl5J;?|JY1+s!fy8O0|q7VzBXwc`hdY;fDf9`tbH`u%$Hg2HdUj9&9tLKh{*E`&= z2K2^Ylo8nr6u%4%%0FghNCQK$xQ!&oRyEuL^J@2>(IpYiQRCTHb@?xKUE981(e`!H zOD!Hc);0;`>#^`wX~h}7{o~$=hYh45Kwaca;Ff?Varh^iowYy$q&mL6MMThinZrB) znWeI|z}K_~KC8>AtrR#eTF2<=+X(1(fp^dn;q8wQ3_5r(ys0gGBFdY82WPy!eoHSR znb^cr@&}OoxQEXLSC7qf@w%L8NF_{Z1|%eU&>|USH?f8 z%0hQIV0U4=eT&t6s5{?|@t1t*#eCgn(i=PG2vQlTMcUOjKJbD=ogvELQEbMa>{oO0 zgO(x_AJRajK_9|OiUu>{PYT<&2GcT+4dUfbBgDTpkqFXhy7pHht!+1jMdu@BL|nqK zx&tEFp&3;r^_t^p9OPUJ-z3eOI~tZOE!67n6xmdIaTTG|ZqpNT^X-Sdq&$s?R_v+o z5>+Wn#Uqe@ON0|b0iDmMM{=fDlPNpx z*QShf@0%!V6U)6&Tn%_~Wpq@xcA_?_@>4`++=K0{Mwp&Q=^FFcV!EJOjEhyazjpbL%tRE{SOV0GY*l)#)N&e*b)l7m=_@#y zZVl5%&>0N7BTboj-M6p(9vqo>g8H740KG)zYU!%g*ia$B@tlL3ukmA$`$ure@}SD2 z!J0K~lH|jVqOnuQ@~xvr!F3;W)1~8yzw?fS82NmLymcOkPo>Lgr?$V^RP%98U(Q57 zOf|h*r0#D;xE?bD5{}<|2NNr+Wlfd)gfC1ey_xXh_zi|HSo4oh<&i9qhDa|k%IRRc z?h<<;;y`jtY{gkR`xjo1YK} zM2vZzYOQK>PtBhfR5VFO;`a!FJtFO%uPjSbYSd_9$TIslII!ug6m|zkReI?j+Q6m8 zLSk-Fxi7TY!3mwvJjMRk*;UK@vt)*R;ByO|t&RCly{_KNNRVTHKkt>lME8yH z)mObrUaM`ghR>t01a}J$jAP7YUno$?e#O%&`?#n2l)1cL0{NyCja~T1H z@djjC;JvfB9*ir{xaY|6-T6rMzQ5}uxXkP{>{N207vtf>`ti&Ws$7~RZo7)wmUwpd zy7H-J^IS7*d_H}*IzQ;q;^Kk>e&(vx#~Ocp0JJ4N4W*PSa##)P3bYMx?-lrc>G&}g z$H%thp2XvCteN~zR^?Y?vh0Ww=F4M551GNcS&j!G0UmoE*?bW(a!_T%5#`&bY8dsD zH_E+_AQAbhWIc>5Xis>LX2FBdktUCVQjkOE8-k5>|AI~20`s4b%rKZGxT@_=Cn%{?P zmJPk+seRL&^2Ivk6@Q*Vo@5WiNOvxaFUkT3VG*;q+1w~P^Elc0h(B~>s|_3gJ|cq> zEJIPJ{&XzX-#_|HJHDu1mC$~v+X@Ltxj5uz6^P8wig22QSZfClwkSv#r=?TJ`-Wat z5mdq!3dXI9lw4PF?JN&Pp)~nVk5CouWy7$wE~}j4;ypZw=5MWF()XUY^qy}1^Gof? z@BDiL?%bw|*6o>kLx+TeUsTo_B<8qBYd7-Z+hNmn<4ur;X#xQw*}p;rZ-(%~p2|tx zed7g|Z8O#6w@|1Bnu|*z?d_1vL(=r}5AV}2Z|f2E+po6SSYP-H43SubYklzwF*e`tO?CX~@Nq_{GpP!@GTP0caG~JO&s3 ze?=D1F9^413)Twghlkt&OFUG*3FiwyLH3eDDxW_l2$%^#()OlNZ=~?5Sp3u}>`-&? za+R2zf{0#LqBpqfOZ^CPll?cJi0tp@8IJn6E+qCkJYr8Vw-fFt9e?}bW&zv4tOVxgYPHP;-FhFw-Ou4PGBTGI zcIT|{fnGRy!VgT0{1d$X4sUSgo7Q#I!gE|`LOixw@u8-I(wd(0Iev2xAsEHECqkeE znlMJ%KFszT!tAm^YWF>1iK)N+DD6^+X(p_);v;LY<~RS1BzBheeMV7J>hb+=M2YPu z-XoXf!IIK=ihYa;ZkSue%WTvi%Zni$J{b*fDf#>-`M(dlzWfT`TPq!Dj@o7 zPT!e|$bKku)oP*)q++}RSKExCa!bi6+6EF#M%9qdL!S!Zto-ynT#U;WC{%=sW_+en z`FmM+w4pFp&JEWv_Oco*MI%XY;D=PU%(A$lDWTumkW453c=8p_!EP=XHf(*JxqfzG zTP?ypBd2b@MQnB8QPrI~M>{XRGwB*~$>bJ?UJl>Vg#Jm-*C7Vh3hI;3JPXjQvpY^w z&zCg?kc@!If%_v~)JO}y1-b~adXk&xQ-)P3km(FVj6Blr-fMPz(4y8sO4FKpmU#S% z10E*G6xAy-++_U7p0*D@r0r{@cK!z$9#rc4Zx6u&;4GX4DhD3?{rmS(Z9&07RmJZM zE~wg`IX1uWBN3<+Kra75(O0SW+1aS3#&(0|)!y7gn*?{0_FWvTlj+YrRxF1N%*1TN z@UV(m_wX5XcF28sRD}aJ^N`rT5y=^|`#sskVq?*(^T3k?ga*&8#$edEr;_u%a5Y@2W%UQQcp%nbpoi-_x;bxE9Sz4fd(_GP7 z(d@)IAF8Wa^KNe&w(4X6Ck6(6HDFGE!pn#a_gdtu73qiMYf$!0yQi5S?S{O>$~qB*bs=-v$l+B|=LcsJ{q))ivR9FdYL%5%{@K z`s&+KJ;j8_O%#tHpB&s&vsi?Dp^t2*@%ETJZcgmg-$a5s9k>$-NffxGXA=P%?_R^6 z-~Ht;pobdV6ly8=(KQRrA{N?F&Tuz+s^PnFZ%t?R_p=5jiz6Aq=rh!oBBYBh1P|ZF z$j53q10x(l3pC0?pPjb{xqh(IC&4K?XvTxxU&)?o4jFRjm?#Ttjr-dWsCx_WO zMERbKCcuukY`M|2YZ?1Y;OxaatfOQ|;c)ESu@FNzi`Sxm+13jJWop~)!9q#U&@j;? zb}$-{QqfhMQ0df|CKVOnQ#YvG2zce1c{uq4E}8b&xop9v@po2sQUOg0kgezQ? zP5ul}8%NI_51V>y6+8$Nmx^f@_lj_tXJl{Yik6rev7vTRMR5by^TZRF>Em-1$ccUu z_=pIU4p0uGxgsy zx`uaZG)ZeNtxXC#$>tIT;_IU+` zeD=9I1mZt2Z1vU$H;Ly1xY&h{QpTfGZ)z!3QO!=}o;sukMLcT!xX-k-R&53Z3k$d< zNT+n^ulXEsr?;{n@K`;Y{|hB#T}(KcroOT8wjJtaUT~3t36Y}aj)_3i$z%G`rQlC? zhgcy37PEAUlNSEPar`qZk!4#E;5x(sTRsj&aaa2E`H1jQFcqX|TvuR%;}D0l1DbGN zfL3w!p0aPqMe%-95aPCxwvywQr>_j_woEWA5o?EhNQO_@V#_JJzpmDEF;|lb;Nj&_ zz(g>4lJz;FCOhLN_1{heUp%_2*q>3COM&xU~=J^#>$IbeH zQJt&dw0OVU<@SPAZ@B$Oei`DpTC?>yRmr9@au&F2eDH_Q(@Ig{K zAAGfq`ML~PqL^J6I7G;P`Of*!`3(DP-h?4Z4bi3hzPOGg;f}vrLY#pl>fD!8E_FKx74slio%aW?xVx9C=Yk|xz%|Y#8u3*k6AlPOg z>GHF+uo7MM4T0sIc=20^#5HQwNe!AuZ-t`sTM;@OwvtcN()!ka1VR{>eg{~tc`c2h z`8sKVRp6)B3paSX>&wG1v3sN%)K|-&z%qslH(trGq4t~X;!?2E-mLu)X4a=UQE}mK zsaz>X?$=}_d6q~nRGD`Zs91Zxl<)%e?<{}Q+{U(J@4%`$8#<2U?0B66Sr!ztwdk56 zuxD?-&j-Fvt5wK_%W#y*fz?l!|3Yc(P(6lYMh}R~Kz0Cw?(gKzVUi)sjjw4maLTu4 z`;~|Vq((TNO;E8fN+N3=W-=#Dif9HHcvop*D~_+6mNESQt+^z!&S|@N#C~3Ex4;Da z+-%YSEH(`9S2!j(2NYT~0g^_^G!$?3_YEjX-@nl&NVt78spRjsdCr3|$6uVS*c1`# z%H3rjDR?a-h50VqBGB$dH}XerfP^55}KUb^<>;h9$jmg#THL3eU7cr76TCb<2bwg+iD(Y*E-u$Y1@ zM6yr;A_+Bdl!008ZGJ)o#s7>GM12zdEVtQLhzJgO1sS zGsiZ3o9~gAYAs72j@xMis}+M8L|5>REW-T`Wo_Rp&rdi0E{ ziI+>X0n_P6%4iIsy`ZFG9c4#F+bS-sCAP!aQH-ZtafwPGsjv<}$6*EISEAN^JE z{qb(|EK*L50ywIp4 zfwhTV^dS7vj1n~~#zOtD;Hay*;HGlL8u?29D8@!WrhVkbcuh#p<_un9qv?A3gDUHuX6M7W(`d zehdP+ziBHKvce=#e(*5tg5N`vP6nvaS~7OP%VKJEzz(wV94z5$Sfzeonw0K0$CI1* z?{vuN!Dfs#?Zv)~s7`G|{sTzmQ88P+)$3L@c+}IzlQre%HEi_~6v!6jY``wxk`3}s z8}}=+u(lKcX&3li^X#ufjRH5EY(h>cPS7zB)(>$QgL=Lv=}FbVDuLr3ZHiSr>wLnF@Mc2 z30zQQuXHtD(&5EMO&yD2E+T!U05vFn*+pOB84%LvZ7GYsz!ZSAXtVqarfOit=-IF_ z)G-4Ss@|EqhzY5cum?^Ip-D%29E8kVWd6c#8OU}1&nk`oB`vKpsvg7mvD{$${PC3~ z;M?a@MY04SUq|Xx(!6n0f7!yDi0BVw>Pbm;Q6!^JA8H#vrV;pgZ4`h$7dC>-8l)o@ zP1xU*t}y43rn<3b(0=#B5q58%vDLq89E;B)I@lz%D+^f&2sC39QO{3@F}so2H@C<# zapvz2!kivPy%-kYaU-ucnJ?KI&8Mz%$H#!X|KeB<@tsjDU`)I6%HI4^vdOrZtCH89 z2k~gV9ZEf$Ku*bVFh5tZ{p#D8Las@SwQ<6NOAJ<-wZQYSm$C)Ay22)acKk)q>cdQP zXqSrDId@Ss<_sm--E^6c20C7X`MTxy$~C5GuD@BCDOyA!P$fZf99H(G6zjTsH`hDF z8Z@;zpKMHcVbHiij*wQZDQ9;XN+oLtFGGEh8rhk1$1;gWOh=~=o0kY7h33qC0JL}V2GdjY#83M+mbRc9|4c;%$Z4R zlT|S-K>dY|rcVCdMe1Qjk5}PIJl((IqSgjY_80^u(#_jqhtR)6uxZE@lXDz8^hweU zlv*|)ztG+8<9gEk5;i=}sY>sg>FO)F`C+1>Ok+TEHKo4b8DMH4NM25??qjHC4Qlnn zvOP+r%=`*#sDnSV#=D8!U0~l$!B$*8lV}bS0(+;&4I@kM4CZtB@kDrK8|5+oVPVT? zV4)FavrkWyw>w{JVz8qM+OW(Bb!+D7=4~N#Q0&E|NPbvR%m^PnRvZ zCj~oICMJOJQis@@F>>^&NsmeBVDo!^m88bIO={NfJpJw_*vHnZxC-71R_hR9hi$0i z{C+h|Q-)p@&vG^E$9x&760#hvW{X3$Fk^_Z;tr_E5nH@YdbmU!sy>?e5q{#D2i{x5 z{$!lZkx9Leb9k}Ho7x%Cg?J5ri>2cl)g}!dJ2lOofZULdFY)|pt|f@f70%jv0Vq;x zBsG>_P3zL<4uRo2oJ)&~ns@xu4U zGQ#1X>_?(+^vIRmX$>n=bqU$Vh!=hm*Pv-1I+$i>KT!60YG()L9oYT`vhXklclQ>yx8ht^>j^Gumxh zmLxw0cvsR3`tMjBq#~Cjxk>A2-|qL7xxkW`a;FRu&{iOK!mz&~Ttg^T>ir?VT zU3I$e8!c+HUB;?({GB(HnYI@K3uErE?mca_ZHl!!PN+eLl zHanTI@eD_P)iZ0B0@Q&p&XU~u%P_TiATSTPl$*S$8;jxF%6k28xKjEnO%)T|)d7|5 zN^( zN({a?2|9h%_b|T+-zDG}@n#;(j+t)Or~bu(ojR$MntHe0@Z6+`Gs^HcSce3fJ`5TR z+tg{g7(voP>&|oWn8b_`V{ml8K$WE$2sshyG>}dPU&l$Be){CDWO_fqV0O|DJYV~) z((PR|{mrcDaMB36Y})95>SqVr^K_Ek!t6CbySNJ@aDK|Sl>w=)dpNVO|7j(fc%{vk z4$8O;!1U;WZ1^X?OCPO4((8NIO)`4S)W<5(O!ErMQu{0y-0>nI1adO-iPwbJT}^%u zuVR)TP(`vhU2zbzx2W!urF%?!N=03pxm$3Yf6jKU`NwPXFyH0l^3$QpeeOc_f0}D z*j&^D2q9G7})sIAACs+=FKeeqZveyyjSnXN1J(x=RHVg z{!yjz(_yIX$Mu_eZ4Q(k9(Zr*sXupdqSxCMgGt`JgCJ@xd_KzSk*554YkTH_^`MDkCQbBUMPZqc4+bn| zyzZW>WO`_s{~?-pOG&@YI=A48?&cM7-3ZT4s;aK~REQriUN@XPu`mK}K5Y3qT8d|q zrk>&I$nbQ4=}k1n5c4EL3IBiU+k)=YQ)PeE+n zqrBHapD5!Ot`s;$*Ue5TILRGwvorN|xe2h5ol&w6Pgft+aGZgZ5tL;-$$-eVVuh@O z&f~fCWL!k7>_Nm9t}GaFUr!J>jd7)A;MW~=zut$kaZK_r+?z9mF_0C#uZdCAedV~o z7tTlGb8FTo=>pU*YhI7#X(e1~rF==yPLC=lR@#-G0Fx#ki}adOskLj+DLC$z{we%o z&>1Bd_NP0|wexP_P|YFRuOM|kHJT(nZ(K7k0xX`M>wH%|OEKimUH+} z;0y2|*a??Dr%E;6&7zbja!AZfar3E@3Q$e2EC0U~MAbNU_|zRQ ze~m)|e`JOsP2If>CPt)uGkD(STuZZwQRH>fLq_MF)=!W(PS^K5u7IsPF`~dU)roHl z&c-a-G)+ohd1-nJ=$BIndG~g!K6n1vLB2wjol6>9Z#No;D|_Gl`q{F2kMPH6y&}5D zodn;gXfYDiYKl0qYQA{J)#=;r+RpHuZ@=TJF1cKbCj60G{`qQNl=JM0Rrf~U08 z6cR(EA5O#Lu*u zOAlwOst8j0Wn*sHn~py_V68_<a5L~mow zR_xEVUg{cB?U{wwyZ|Od*w;6woX>h}`51b7(Mh-3bHdMdWzEqNObEAcGtU_qczL6b zB)(b7cugo)Uq?Rr%r^esYbA5q#&=#G0(4P3y(x554Yu*~K&*&eY*T3cZN(s9 zZb`0r7N>ZekwAp?hV;pKq)t_G6$&zyg=4udOt3Ld_-H9mW;q^Z{91$!7iB*YWCr<| z(n#;#uiefOViuT4h{?tZCN}u6(K-1p8H3IvVh5M$FrVKxuUZm?*G>LdRltkuuD_DA z*ms&{vuQliGF6=@v|eEQ8Kk{G2vj5st(&mdy#r|zsB8!wi=nl*@Q&Z+IbL@ee}=12 zggGl11yN*Mz!lKQdA2dVN@mzxnW%#?TPnys75Vx2(q}K>8;yrXA~3PIQ35<&*Wg`Z z2Fq;G>J+7IPdED3^D`H*7+1qvb@Li%fzr1iQS@GbDGw3;t36`r+jLCB`o?9TX z-@lgJS*F5YJwO68LVpirV-e$TkHdO3pF(3}f`Di7 z523NRiti}TUtVKc9>)J0!iTazerZ@@^bJ^VZ93ujgkoCpXAaNmgL;Sf-?&Y&F9vRH z7+|ptng7L0E+_29uZ%zQ1LgunO|a{yx;>5xAErDCI(CSELyw1Z6ux*O|9M!8XUso$ zC)f+3AHP{aE&0#aDNnRC3?p?7T#eAPj7W6Cg5oMiC_9`e>H7oHHkyNA>PQK7O)HT= z6K9I+0Vs zL<&1MiSrwfmjQu=%^=&eNmwDUKTFDiKM z&E&-~Tp#UJo_bB=EuQ9^Q8!G%I|Ze$n}-z?{@j^Y3yaQxwu+7WI=sd3P``A%_jSh^2Kd#ZVf9nsxNmZRPNnoWq<(}rnw zI@WFH72B{UO$;})-BrZ;E?|hti?BH3@nJ2fR16o!lXpX`dcOv*wgjX5Yx>BoNO9GC z+Ff6*6O@EByJ4dC$Wv>cJOy9dLRPkt6AxI+5@p%d?GGSKAX#=7v?=9%H5&N)*PC)V z+MT@G3t00{t-15w3Y1uOjjB_Haci#8s(6(QKVVQ->v(?78|Z>IaqV`sGT!t%!3K~F zGp)6gFz7HNum35h*$@#{vTS1=ce2g9xC_N%&J35)&R@_)t5#b+XB~QK&H1V1FgBTX z$y-YXU7sLtOiRd_P64+=xrB;C_aFX+nYME&CB7VEJx|I_yGGYKV#(`YoposmxzkZ# z_)e`T-t-5-5MW%&GwGV6`T-2x>Z<`OhNsbP)UI5X=2L5qPg}JpCEfY|*x?d|H*_m) z^j?i=)8p%F+=JluNw|zdm5}u*icE#ddxonn^%%#P{v~3OR#FrN%E{~`3`Cn~Qz*{& zxbUX!1XVz)OHU{`M}9wfivWL83Cr=RHM^%ZFJf&dz)`@E4fE%B3fI3SJRXbBW&v7_ zNX)g`V>Oqq?dQT7IK?H&uYu>qD2^xA%S5)n!XYuoA~< zqV8n_JMgr4-u=GAsF?{4Pi0FYEh0|(aL-LhTTEah0Zvpbb zb|q|o?^+L{-N37)z&RZpdR?TwpGnz)4PLZACLCBRS!jFXlei&)AG~>IUL6UwK$LtS zbK$bWLBex*Zb34{i5|ixj&JNF2mpZ^fMz^znt&lRug8@(zG^%RZkm<2<4t{U0I+ud zr;%7y&Ci0CR)vuEwnT0}!gt<0x1uA#7KocCqY$_@Pw+2%?wmRmf^+i_dMguIBVq{4 z^PiFrvOwSsk)&m%HxCB?h4G@?98c_Q;AEpP0uLNbBdcVNT-DN}?7E)!UchQoc5fzp zALIOe1<6L)O^3ANrAKH9CDZF*YAXY}AHGw^0=YGv43>m0=854xMPF8}#`-;m$MWM7 zKMM{taOzRgIJw$iaz@O`(hHu$V{eX1$H}tDFW>t99OL|Z1*u0VQUk~E(m$UjpfKgz zN@u$~GKJoAVEoh&!e=PlvQyyLcJ%vxkBh!q8Wc_A#|}Cllrys7>D&;Qla4_T!4s%( zO0OA<4FW16k6Cw}dyC^FeX_Q`dFq?tf5yKq=k<&CjnITwW1OL*2oW5C3nb0ntt?V@)Nfi+db`};1-t74|Yt`;8)san5y;C=H4zhP|J_kF&O57va4>6 znXI(SJ<}JW3>$udT(yV-J95Zsg)KA2HgNu5GNdYOK{Ls2*IW*rro_+1NoH@4Y2;%5I(}H9 z5VkY#?|WM>L=_|oXxg@Y=@RX|%mNBiZFO?eMMqwj_W8_Sbqb)Lh&j$(5J#})L`-yE zd?2ePad43wGcB8+F0x3*$!DVTi+W%f#x29;)8p_&8yzX<;(h%&Vs6-V1&DNBR*JW) z+COaVTK-ROwZeRW^Nar;d0ujr}NnbgIz;!(Jo3ATBB~2+Y>W^R%B#D0T z%oNM#7-@bV18gP0B9<`o>8{Qp;Lm5lS{WJ~xt59?oz)~lMwK(s)<_Ak22U-BTV|1# zRWi}5PIAzO?RQ}f8`%h?|3VafARG^F3ZIc1zQBnd+Df)5KcfUX;;A+tUO_x&W%Dyo z&ZL*C$u_R|;0xfU&>7qe!kKhqH95(eT?y2Tlg)emduG4=ETWdnx*%`zGYTHY+47+^ z@P&_6)WP*Ctao9gC=g!#Guw(>&V$PuumUb<6V%^1A3zq%w>>)qpB5ves z+R1AlreKD;mqaw=iO?K-;=O0O$KZwo4CeQ#TpnZ@-)N1;JRY`ycS@+@x(s?h3(ypO z^a?7q!V*WV^^quFbj81x^pVbn@~7U1oR>wnY0I4OuGIokDpT{*9mUY*_1^;csaimk z_5sC%c|~x;DN{$~-dY<#&%A}OaaRK%(7pwp8kSbMa!f>T76vt*iPc5t5)J~9``+I}z9vpRC&*4Bo zCoQn9^eW(1aY1-Beh5^n8$P)Sm|kDb-!+0EHiiNoo~eiufBmfMH{tQUZ4MD+dGciV zHw7+AHHYUpQ^qC5nPdt-$xg#*6!w95OtJbqJDX}TZ1B&FBt=XJRBlrK6&Or5nQe5r zT=Jm7nj?A0j; zlr%0Yu3Tl0d{TEJH53mwDDgl34?mcrPG=I-k$|Imz&D#0R{_WJ=xt7(yU@r^?axnz zY3z~7qKm{8QA#DJxW99eDDqnso4>O+Xsucksjk$CLdd9(TX7TNADD;IIt&NFdS*MhBJb_z=6Q{J)!XgMj%H$Gilm0TSqSGs7y+2m*7R z9PyP_2f~!^kco^EIBYPqAyfD&2W)ofjY8Ze8DeTY@Yr|A4{9@j{Uof*c3TDd-gtFpi1{yov@PrspD~rZ`}-($W~L zKDx%^fRxlG`F(5*l2ZhNetC0WghOC5(yAE5Vdf)k%PqJy))R-+qNsg*&6XC!q@W2v z(-9U|`oj-c?7b*7#6XB5ilpotC{hq;pP*ChKZeYoc;AbZ9DZ8^;Pt*#mj=(+KYy`9 z5r$a5dSjyPY?QYLC~g_tJ!@-MFO?QG1+mFwysGQJ0!QRhX{7l*NZ|-a(r;>((&<3v z>T49`Ru*1`zCMkrV5&iS2g6odX}yrxxk6gv7j8%tj}K&#UYjS`zxRcMLChAGkj@W0 z1pzLn>edod9gZZ$)A7z%f`xMHSqEu{)%h55C0R0;0~h4j$Dcsj8vAelAw^=s=e`O^bt!9{Te z=>?+T3FVT-I;Rz{t^t9tq*K+DHsQC!Ww%p2xu4WF9SmM_R7vZ+KBrpGCg2h|42hTc zo^Fd6?;$H$tLKUSzBa(KE9ajXbi(QSooc;{C%3y!;0bt*`UnWd9;>07mw0Yw@{KfL zcGJD%2*BrL|AVRVM+JFlO(U?%zRZNc@r$Ta+BU(+cUp9M$-; zj>aY7f8BxP4TaSrFg|$^1jzWR%e%%0C>NF&3EzuO@d~~?*R#KlJQ13# z4C-pCIjt9b7iz<|#?H*V7ryNmR3ufNxO)URNA`y%;=oQTY$shq0n_WvbWM4z7$lRt zc)VHkl&M5i-A(eG=|f>bSu&zdfMgef%a@u6ivF`m38%)FT=RTw!LznVDGkwS`pSaf zEJwDWC$F6K@&mwK8YVQU&PoHUO5c<#5nO6IYWpI2vCeWQC&Y5hU>akM)l<%Ra6=oE zw79qtLD*KHe*RqZKKPDy{+`<2a#$Kj6Aus2*`-db{f-_Y&oQ=_`7U@wx`u$PNr(8h z7xw~7e#3EhvR)s~Uf~Vzcq4X{5`XJfza(X7KcN%l$9-zWzGQ};r{7)=i_qmuX%t0M z78u8O>x z(jPtaztUe#h=Rn~B>G*w8MDD#RJ>Pck;2k_<-doR5tLH5?-}p;*-PHFK$9jf4=p?Q zly#ygb$T=Bs+1kNEV|CkY<@vGiBbBqUGH0*b8_rdbK&8|sedDOG|~JPdm+8PO|-2D z;T4PC8lP;1MkTPJ+)qLI6U5+ke_LQ7KhC9+IM{XeCiAIA4T^HoDz0fYml6a>6*DKg zb0}tfosW!pFjR@3OHRN_*;QT#Tsr|#rw+2N4AqLv0DpC%NeJfVgvn#dVpA*1J$hS9 zU_}BQ%#M?p-?+GCgUY+cCXn>t0Gcf5Eg*fgS<6W(Ou6OF;fW^^K$)@vAmpRn?$&LP zjP?M7M3W?AYJHt2H6H4a)>}ePu&1rPPg3S)HrMIYK6~-_YR!(GuLFnMVTC;PKg3<7 zhqHt48FXI7X*x+Q1ot>-JiULW@^;fR-u=3SaG-~|E`{+<%g;==q7LDbiycH6&8u6b zrkAUN4l9?`5yrC0f^RH|`}|bA;Hadaz0~KEMfAP-I@j&(lRV^sa+Yi zvs9T`U3_cH88xyY^(1Ob-u#C)VP|q+|9fIDirT_Gs#7Xm^!Db4c)9XLQr=tN-94JW ziQx(lt);?lbnj|*hxv&B!Y#n8YS8uT(*zAaz^kX>`qcF%{j4MO3~dxRaPfJ?^Tw~J za6@YQ4^$sY;Br)@{(NI!f0vAoSW#ULH@w z-Sv)Io;Xe#D2;*?Lo6LQHh(Bjm2fxQ9(mo40<1t*{QL`Pk{xz;;(Zc;6^wKJR#NSdsWtp@!V1N3LN0$fqU9adOwm?zyLY7 zK&{okv%5R1Uk4jqcYg%*q;Bi~JbVbjd{o`MtJzIyExqp%vw5`He6H0!j&FywU9?1L zYEED1uRZ^QrAM_Y@cZKTm}A=p-rGrU-KPUi>G5@sE^HlsmICEnkm6oPuSCl;4okO0 z>Mb#z{aR~#OqE@5@vZjU&1d6$Lm;i@l#w%lAD__| zj*Hz3e>?B~F)q;rml9($!Zf<4WEFq`x}GTP92~~Hue_#mVQo)*==npK=dyZhW%y^f z!0~1eaN7a5*>mZ=&kh+ez#p-kHlgXJ+!~+*Ksh+3d|qeokl$@^_gbymv-2z>_;I8c zd{BY0%X8aD;#h)Dpu=rjEra6*esb^IES#iN3|zazD5h?aq=(_re}1391-w*~IA_!V zBhHaFC-m#-Zpi&hUjCN_3!%jCx%>CFkN%+YhAy|9AR)@oa~-QqMlc%^n#${F8As9? zH+`HuxWVoZ9ealG!JSPIN-I9IJ!x!Pv!*-u;kk?Uw=Mh4J27gYe>Zd@GC%@-Ioh)N zY?jbjljf>5$7PYY0_L2HR`Fa<3_rvZ%J%wPjI1Ix{r^HDkvsaPZK8bvZ>wYWf5kz} MjIFWdhVGI713(TW-2eap literal 0 HcmV?d00001 diff --git a/docs/pytorch/img/25959870b2b1e7d6fd61229cb20bed29.png b/docs/pytorch/img/25959870b2b1e7d6fd61229cb20bed29.png new file mode 100644 index 0000000000000000000000000000000000000000..657eb7ae89c4ed6874ca92304a4bf5c23079ffa3 GIT binary patch literal 8331 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 literal 0 HcmV?d00001 diff --git a/docs/pytorch/img/2fc34594dcb247d4a3414467eed4a109.png b/docs/pytorch/img/2fc34594dcb247d4a3414467eed4a109.png new file mode 100644 index 0000000000000000000000000000000000000000..5b51f0b655da8fe9c7180feacf43f81c3f35507b GIT binary patch literal 12358 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⋙Y`(QhOyN6=IodimBOn>?DJ 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%0DR50_mE=$;{7f&K**{stO$!|XS5N|Xl|8*aVDUo8 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 TOvfPEupM$oLsz|2%_j7JkxK%H literal 0 HcmV?d00001 diff --git a/docs/pytorch/img/4d69c0a49be83a66f774caf12e64c3a7.png b/docs/pytorch/img/4d69c0a49be83a66f774caf12e64c3a7.png new file mode 100644 index 0000000000000000000000000000000000000000..1e7de9aac509cd240b1fb5fd908312e5531c855f GIT binary patch literal 6857 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 NV+))rx4v}q-vE~R-B17k literal 0 HcmV?d00001 diff --git a/docs/pytorch/img/5a415b795ebbb116db6d4a2394d93b27.png b/docs/pytorch/img/5a415b795ebbb116db6d4a2394d93b27.png new file mode 100644 index 0000000000000000000000000000000000000000..d405db743ca47fb6089f557d72a1027a4f06ce37 GIT binary patch literal 7832 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 KU%&V4mHz-nBok-= literal 0 HcmV?d00001 diff --git a/docs/pytorch/img/68f39521fc6853acdf26440e7d5a2861.png b/docs/pytorch/img/68f39521fc6853acdf26440e7d5a2861.png new file mode 100644 index 0000000000000000000000000000000000000000..1c4e6a0f5ca3a6d9c003449cb0612d1daf12b24d GIT binary patch literal 9357 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

rZF0S~1DM%vlngcyS%_@Fz#y`QxgonqyTT0B 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

&a%QY0wv{pZ3- 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 I|onX9>gZI zyRiCZEdnyl!Jm%TYVQO9b=k;l!A0?%Eh2n#EO~CxqC|X$mExUuPGr z1n`gXlJn6IoQXjeem9e8axD87Eo*!$)Oj-NPCKyKzUom!;8N2ev$258lAcoETnHhu@Ph6^2t+mptqs z+``K~doT~Ga2dq|^3GA?a_!;1*=BP%zggJFR@OQLTmqri8dY~qlGuICN)I|u2A*-%Y8o$|Y*51SnF~*yH-=2E^xhJh`g);ZHg3#Q&>U{~$ z${KvNyY_dTeYT>=C-1$;9@Ww2Y(HPY6AJvaiGo!N8rZD$kx0vOz`LcrOiI!H%Q8+v zrt>Xn2Ss5%^JdRj)d}%F8S4&|ss0wNvEX~@-)?_We_PIX>)KCUYe+H|0O>rf{GcWO zp;cqm#TQi*nc)*1islYk;q=4R+3~(SpO@+?qf@qsheE2#QzCaLi?<#%o2a6Psw$>+ z;#l)^zfCah>0WS4T}%nz+bwA6W(cbMaPIlVusvI+}WRaAiisR{)w zkZUv4=S{b=rc_i#Z(Od4B?$+4nnj898ZcjL8ZX9@J~i-{mulonoS8IWPusP<5%#Rn z%Az97@0GCluk<2Tyjkj<4?!ZmSbg`1XR!m#R?2bqTH%Yc$Ul-&+k9O*i)~iS5sxzc zdGgy|*4Te?xfkd4vZ<=+EAGgE87VTe;ORLlKEB5WI-C2$Vy#tcLch4`FAug9P4!o# rx<}Skv1F3Dhya}Me=pCuS%!&nI+v>j_odkfuAnQXSd$tfSHgb)vAE*< literal 0 HcmV?d00001 diff --git a/docs/pytorch/img/761c210ceb0fdd69c7e0f8bd85e39698.png b/docs/pytorch/img/761c210ceb0fdd69c7e0f8bd85e39698.png new file mode 100644 index 0000000000000000000000000000000000000000..14ccd41bc3e65d43a51b9e92d442adbe2fe3a5f5 GIT binary patch literal 3863 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 E3r1b3n*aa+ literal 0 HcmV?d00001 diff --git a/docs/pytorch/img/7a8716c377832b032ee24276b7ddcc31.png b/docs/pytorch/img/7a8716c377832b032ee24276b7ddcc31.png new file mode 100644 index 0000000000000000000000000000000000000000..925b6190f715d3885cfa248d2ebf33a05faa057c GIT binary patch literal 19259 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 BJL>=d literal 0 HcmV?d00001 diff --git a/docs/pytorch/img/90e1ab65f286c889d94c9f6c57d596c9.png b/docs/pytorch/img/90e1ab65f286c889d94c9f6c57d596c9.png new file mode 100644 index 0000000000000000000000000000000000000000..6d2370970c93446f531c821f765240d0d6ccaa52 GIT binary patch literal 8307 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 F{{V5oHpu`0 literal 0 HcmV?d00001 diff --git a/docs/pytorch/img/94268b7d9687d039d872da203453c97b.png b/docs/pytorch/img/94268b7d9687d039d872da203453c97b.png new file mode 100644 index 0000000000000000000000000000000000000000..d405db743ca47fb6089f557d72a1027a4f06ce37 GIT binary patch literal 7832 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 literal 0 HcmV?d00001 diff --git a/docs/pytorch/img/9e1df524980c8f42ab4353070c2a1b74.png b/docs/pytorch/img/9e1df524980c8f42ab4353070c2a1b74.png new file mode 100644 index 0000000000000000000000000000000000000000..32b9b2615aaddd07b8cc3ea4e9ef8384284cb22d GIT binary patch literal 4857 zcmZ{oRa6s>+sE-IV}u)xgrgCpJ4Q*TgiK11kW!>a_mGs37J;!bYIIHYZ--i!DAZ=Ub-Ts(K*i_iI_TUi)^=(*{ssHi|D#`<@usIE}{-6yE8 z{yV>`fLH$wSu1mx!IdjlE-x>qrl!Qj#bGd5b#--YZ0z>-HZ3hJ9UUD#Jv{>h!?kPI zKp+qp3}$3x?5mQSp`v1WYND?Li+I0RZkDsv&76?cn%~21PsZQTUo505)KW2QpHa`K z?x*oLQ8P;z9;m3V2g^}y{DtVwe?(o@GP<-Ts>i_)%@Kf!u z7!!DrVlQ{=4#XCfSVsggLG}$}@WW2<8E(|a7jC}K}z0rn&YD+`Tkluz; zsQW3bM29?duhMOoA`Nlhj*^FeqJf`#SH0b{ksb<^+8T2^QpiM~9kJTH1BMU?OJ6T2 zJ2t(3qmqM7JO8UvnW7wRxt+}Uv?PeM8kNo4WLn zG;`hg`Fjod=|Yt+JS|(n*>+)-JL=auwy#q^#MKRkQnhnlvICPC%eGFl1{;2}Q|#6O z^*KrX{@9tP61#Nhd zTYmly0%_*-1Xef_1wJJ<>fALC3QGqE(N2kT3l-7wKmoz$a=s0Y6E@uy=nk8Kga<8X z6&X~>P$qa_^>CbxcfXHe7A)0!5qfWOp^6>k&RH$5_acCBDDY$Jv*4*?!4dW8`chGq zlG^6%r@0t9f7T!L=h(=VT3@oHT5^5Mx;;W~-~()5OFGg;-(_;*_Lm_YK~)~n-~YIa zp%)%{f#V*-#7`|o(Cq&_D?M#DWYc>X&uMC$R**?{BH`z&5H68zE%W8>fagcvs z*Vb=ID!nd6sgi0gq<#gc|GW`9pN(`yfGt85x8IV5782nSKWa!zEgj;cqaj?xigiM5 zhnY#Bo11Fgw2l?;JuE;oo~tA&Ah8|w@Shht84%z*CXWZFwEJ9>f>Bh12Yw(`1ZfJd zn=0#Y*jwa9so_ye{Lu8gHypE%V+6wUdn1aY39mdRp z2`yKnT)LFr^oYHwlw55jUpzE3)G6k7X?j9-b+4?Kbg$-LJCB&+puS1B$sb;Z+LqZW z#AWgxF?(E^>MYyo7TvOtAlpNBb8N8#dN^7^J9?JISHQjg1l!Q_+ut8jhL_*ye8n*h zS5Q`JkVzv1JKeb2M)G&|i(jvCXv_oZ3?mWl6C-qzOqBK2HcO)Vp`{#K@%veYSG}JB zj<0YQk61xQ4kX4jP;VwhoU2i2=E`@8w+MVG7d%Vn)jWymJ{{P z-rg-?eX_K%N0yun(&l49Z*Of8SB}xA)5J@qDT@E8|B63#PdILAZO~!%uA$ywH2qlr zvyBSl(@D+L_t)3fpeaX#!)iB->3t7|nG5zf=n&FtMX1e=}L+lfS97%Eu z06EEAfnW5@=7~gqDztu?#(S^iX3pck>uZJ-jg-lYHog zKVpge>(jy@ZfP!qG9Soow>ZQc_3JN@vHaa_4#u0zk(>(>rBj)bLkeCq6@rH!bkq!r zrN%v*4MoeRqy5WdrihlP@Bv_KpfLduH77=KFmR~dCCfMLg0{x0y%?ZXfB~T9Eo8$y z1UhD;lDOuV(f~f2ofdL9QkdU-A1vQoGPOE$LwCn-`VjZsrg+7dFjD z17t^F818R9SzRUZdq9KB`G=p~+UCP4GHW$kmS;cz3pSiy^5Fw&PT74!T)G8!|HBmL zzGwzq_Q;EZ;Uqx|BCxcsB4H*Wy-vDm+}v2+q+PN{Nh}00qt$__EAo8#Da+ifK@$%o z;g)k|=gR!5jCqJ9=0BVxFOTnz|2;Ck=Z#HqG@RSJsBEv#lKPV(+Wxc`+YT@hKIkbu zoz|j)Y(qR&oSON0NFqvoHW@~*w50NbsG_?#KLsoMop zXy1z_^%?xzaQMEp2FF0Bth6DM)(Nl~z5AwB$tF3V3-eC0=9nW5T%8@|WCeD7Py9Ld zbO&#-33%}=C3~Dsk@MiG`K1X*5D3y=xY05rmBre5qhr+_o+h2|lpj)nS3J!1w2X-1 z^;pMVgxPorhIZO}NRXHZ#n&ns*r40uH-mpWilQah$J-W9 z)SyCY-g%$PU5B%AxTD2rYC0zfudAXzt*=cEQb(Kz~~fib1@h8y4A(D!+z zjWrvrrEcjbFvbM<=0YR1YSf<`dMTtLt{l|ddgdNzIZE0a6J9!nVe08^6jMP?1sU}m zr8z^x(rD4hW|H*}N}pZOOLnbzyUmrkR=O7MB&|vTX$WT6Q4k*GRWK|M{SY%M@tkWt z7`AjDg$d#;>r_mX*9k8eUTUUfaxB}~>`jx(jJavi@1d!5d~48P;ZXa0RLKf4ToRqs ze{B6st3m2hT!pj=WW>qF#dm0S-?E3?$w`fmK-azMB#w@Wo&=(FlYQa#D8KuOius!> zXSblkW&`vA$pj#5Am{4^9|cH~t0K^H?B_X<4j)V4XXbS6CT>je;G#{|Fwdx~*IDom zJK^YEi{K^SyO#4~D`IWt*f-BCh8;8WOWA?aW7-+yRF!g=byj)zZ)tF$Y zRTk?Bf4f3v&8CKtQAh$w)hb_pS9UsMCQt9iRJ7p*bTRxIWYZ{BCEXciL&X^Na??>o zLId}wXFW{0(q^9}Lc`UYqP=fHblr3a-rH1S4Fs9~2)XV-5+&u$trL>GKk?ZI!{%~5;;@wAPI`ZlQ)Rrr>? zJjYW^{m^k|o}H8--Pyl-I-v{@&vQNa(o7Pt7+FjHbx#P2IVeZ!^f>l=Y`R%l+JYwu z1h?XE?8%n!(qJK|kA;cL6(m2e@<>Rcbln-#!$sTDY70&IfRcK;zHaI*^A4L@m^yR@ zta6-d5N-YO3F6bks(s~0o~NN#HN#HiyS^l-8i_X< zGl5}a;h$>n&hi&wU`*Q=WL$J>3}Am%q9EGSaDd*~$GXh_jmnK;U#yVYiJLBC%U1$1 z3uT?Jm1INdtxBL-yZK@m1II76ZM~^hNBzul?wl8h8K8x^>|R8V>$E{yneD zlS}^}oq*}JRxVt77jfaDeP~H`G|?9>TW;^tJou*6#kS^)iJ=ARy#FsQcb?HFy$-5Z zxR-K8U7WK-&9ns;I!_Ap zF*e;D=K{@|eV|S80yk7M1L0k>YvR3Cj^2os6D#yso0`4a6J6nE!nPpvZ5tx-kB0D4 zo$0bwbDTmE50}zvM;K$xV4J8-l`Q48-KTP6=N;hIyQdQPzRgj~JAWKas0&DirK*2uy8ievlDNiVoQmfO- zd~8o#^6;K^$+}1})+306bK%nkOr;}!ErO-HOR|nrcUpdw1z%-Q*6zDf#d$*bsruZ? zI(FoH50Avz7#4RdI3Vu9jwW#kc4POP&4pTgmeKhf`(V z!s@hrnnxWP9lJl4=Ok^Y@cs>9$+TKMJlY@et%F*3iF8B*&-l`rqTu|Z?=NCgb#3gC z$w$9;?y@RA4Y-qkgkr+;?bQ*tXJ05iUK_aZCY5yiU&W+nq;kMBn%%h6-uFzGrf4m* z^X-!C^DG>7RZKMr$G2~Y+}DmJ(4LO~1Q;Zv9Gzp$OcX?3D|ypFNHZ9td); zrA%z-F+g8uMf%o`*5%+M4W&skTIJ5B7H2+n6Ygj_1*Mt~-(!dU+-lhi70@8sm=Bx3 z*Xs_Ls7Q;$G}zt9j2p`CbDz6^qMm)v#ljNF9-Gy+;cR$Ww)W1$!T2msFVDE$=Ij%d zqg(^ZoCtKUhsfbj6RyssV1HtN>wOF{ODR<;D}BC=(@f&(1vRDA%*kg2j&;b8BCAiZ zmmj5yK3j7qesDK_6myl9Behi)r~vrv<`K*KiqlqpTD`7w{%xd$f}X-cS&xCYeP)x- zt|C}8K!D3Ar0UD_b!&OsMO@!&9`!zs9c6e5(gi1}Vp0x?*zZ)*0!(nm=rr@9h@e^# zYh3|lo6)g3So?CY72BSX2b670%)EX>nOEv5sc-e-0IzzFEka*dUd6`KB>m1Gwti{0 zzgF}N(9%i;o7mXE1TTiu*I^Q&Q(e->;g3V|VLOs5$>^cum->e|4!o{A;(yuGBB8&p zC6U2;FAF^_=#YiX~rEi`)+c*5ig{3^G!~TF*QR0Rzb}nm{0!0W6Z=C5D;d9hsltgGWI!VW1o`S*4E z9Wv+00Iq8@^BOYB`Gt{C)bQ-H7Q!j^eHprKdoEXJGHjJJDFT{#WM0+JaK;Bus$rrQc!0fI9DXDfZN>p7AW=zv!UgcyZjgdg1R6gTbh%sNiroH8nL2 z4Gk?V?Ii|*K(O8IdI|#ZjOc2r-SwN<${Bk0Mj`D(=f@-FIiI14eA}l zf@ZrarUt9-rdwqv=VzlVtgat))Vmn6O?L#E6Tv#F!=-e|Yx%GK*C<|N45nr0^U;q? zA~xJL0leF^*VHGuv6dn9M0IAPpA#8rYSym=_z&mE>$ddNj+TJId{3ZVK3M?5CV=F|O_5{HqEN1oW$q+ck09{GVU!Ga0OglU zG}8$8Yi*m0trbVn^?gSNlR~l>0O{#CH;AK+S_Qc}@^5|<3yRk|tU_NDKZN=@i7dI= z4&GI5>x5D*`}JuDckHLV<(2WD={u2I5c4IO`-To3`X12qm~(v$FjFQ_O1a^>(tpqZb}^C z)*acq%CcOw29|BqxozyU)3Hspd0Y_9fS12h_;1ibrj4$tJmYiCeSFKm{0ku(n%Qqq zbc3|`&$Zt4q9T}O5-E8gk%aBX&zA9w<~XKbBxo?qnBZ&q zJT*uG7NKK_$!Ow?3@zkYB8LU9olBrFOcCrA+#_m$5`xEgJgO^SHC+aiReM1VBz@Ar zF!38pT1;RzBFJUTMU$_j$wZtcp4o%^ZAw&#rbw;ltII*8m30XN<*jZ9dCHzg^kIjY z$4bV!YBra?8wkGTCY2?-(6Yfiujva(!!#QYb>2||Zbe3}Xy%}nUjv}6$4cB#2T%bK&o`u)n?9NM%pa26@D zef-0`c}t0X&k<Tkx*)7|tBj{jy@~}k z<>r*%m2%Dk+FmlkH@{z#4w+!}Sx;XE(|6W0i}mqk34GDLU@7fS8HO{-FBZRe@A&D53ye-r-?osrTQ}%7T)mz1$9$vQ$+Zh<}Mo!QFmQfn^ ztT5PHQ=_Lp0SvA_)^N)2b~rTOQjV2LPf^um zl1lHp&grbTVHRC$#KroM#!uIj>2~pKhl_f}oldP}=24aXVtZ3(sqtv?t z{`Yg*!4g#D-1tLPIp(9>kxUz8xi+_DIbS1GaeDg}1rGi8+*#5>7Bp=G-JJ;|IJ^N# zPK#N-X_EjJ0v9Phg|lhs(&nSo!5Bm3lL>yp0&SYi(1gErU;-khdyhEUqq$p?zPb%T z|8)jtXwt-oCTP(5DOwk;pk4nyVM7|WHf1TxAA3lu=ZDL*WO$NBW3D+dnqU;GlFs2_ z8tbBNH~XXbN(pO4h$98bRp?PoTPKJI4o?nBzE$6twPz(Wykezc2a0M;AM!>esJI+%|*lIpUK0TQG*R9cGZ8s$`Foqf?2_BfdF!9JNwy|4ABl(5fWU?NxH@MBsA5I z;znG(7n{cysvS1~wY(K_f&!8beg=c-%WHX+-hbgV?8l7umIqH%qHwNpRdRti*1bzB z)%#2r7-05E3-_7AR)mwJ?KV+k4n!#h*rUj(cJ;prKOrS566Gih>U4`J02ME;`4pWU zY7&dkuGtcn9HZW(c};pn0yXi$U;P1B`y<*it13|-aANGlh;}!>Qt+cvz=+DqKvSG= zFFD~`Cp*OUs4rV*hZg_zJ6MnAjY>}|$Wp~ZxVNO71s2AEL+Bw3&*UtnT^0E%)=%^(A_P zgz>sb+e>6-tI*A(pCM_y$S>F^4l&iZd%_S2QB$fUE=}XN>VUS^KwH4=4`zw=MjfuT&Xx)mr=yo zG$fb%T60iH$|#5*UIToyD!D;q?}Y3ENpF_li-RD}joaKLu$RqATct_Zi4h!$0<4qq~rJIFfsulQK(46JQSuc!QW@^{_DYY%Fg3vnT!e8~~K54kd*R>_WO{%Ub%&dH4Cmb1EN!V|Mk@5SM z$KFPumAOc=8@ffz955VwZyL@&CZj(kM0j`W1xPY*vkGvzL~!C+4h2o*(NmUcFS!UC zKNl0AwZ^DVgL66Q<)NtZ&6TBVxUgJ@R%@SX?&GR2o7&n59=R^!$j^MaVKK8--^XQG zWhGtoT5(~r!b+klxnCM$MoF*#yCo+rXbz4(0)bpO2d( zrvP#!JA8`GNgknTt0p$2Ax6RQ(hR95kpYs=y_2 zON)>;CYyA5A4plgTAjBRf`>ldys=J?CiG_Jpiu3qZtyN2s@t|u$@}$JWFfeN^S2@} z>v!j$WPp!`l_FBF!cPIhf(`l>xf;+Ce7T060+K@~SBc5YIQ>at z5yB*D$hweebj6U~g9SsfvA97%_joQU!00+5Hh->(z?qtO`z8I1p*D1{r^mJ})wj9`0N6L=qa1_^MCO{-OT((N=jekcm-!N{c6 zB1sPziym+Iq-s0Yd9`|dOA~LXE)~3oyV{Ic|28%~fu)aXf9b~jO<7;c)N8-@X(TEj z{n>N9N7hHYgoWZ-jyMq2W*BQ?yEdYzb~<7!H1minkd}p{_{(i*-a>ekV7pU0>3|zd ze0B1!c)I8wOMIW*b8^T_U5_2^%6;aK532JaU~!?U&kk-%N9-a zjyq~f>lB+&Q`ES*CJTZQIzRNS%8@$YtIu4t)ZVDPZIFiZ#}^ER&-LzGr-y{TL`ogn z)gScTDdHo{728iTagV!%qxSe$W{RIUf9$fIamUaGE%p|(JfFIXo(ztqg!M!ZUI|z& z>-q%vP>y*E?SLVfxQAoPJ06j}Ei{h4++*I=CtwKf@Z3+ubA5dX@JXyoxhKvcjkMT7 zgleyCK13=uiSi<~$al|k_?;R^l(kP5qEYTP3ZF}_#HA+LOsZ*ekFg(gF-BNas7B^& z$l+O?8tj;5GedZpMJXAagQO|v9wXY%sTMPF zPW8UNqFShkl6=Ji!GFl7I%6xqGa`wqb4_)EX{xEY=reDfANZQ6A~R5S z8=#I;ieS;jaG;?D+)cFYR@B!Y42@f|8BaLMC^0gyT8cYk8pQ57r`ww3{9e_vrdV+j}BmS$>(xL)!Uzd|U zM@tK?*MRN~Im+aGO1-=*@{Y;tq8eWk=G10+cj#7mJei~0FP|H*e?}LD9xP;!B)vm7 z^<|ZxkT?$N&t_v25{}6kT-&~tnFA^oYLeEC#XqmWj1dL=?F!z`HCIl}lTW!J{(reG zSx>$$CS#ZeO2S~8w~}}{ZxdJYMhzO#;iw{PSL=84+pOsL)JBN^;6S=EIOhA*>Ee$? zdyT>rlRRRPH%}C0WsoIFCDAsi4y4y<7i;j$rFJF=jbyj8e)!uT{j{y)*9bXDT9>!O zt!>@aLrx9|ez-x28eM^`WVbDNrP_h13YQ+ElN!W6Z)`^*c$hakW3`ItU$R6^;_&BgnP{D=83i6ufX_S;iWt9DaYpR#{xPDGRVdbsu zetL6}jJLO**%H@bMV)ypVCKPX#rw6K6w53_+aE|Is<_pg1aB}|nxfc&ehDAJ>Ukqk>|!Gur*qIZ91~C&Tm0WLn|wDPp+pO@=wQ-)b5QeL=dAe{KISK| znEPewv&#mYwHD7w<2PJJm6q0Gd$CtY6)vgQ6AS&jMwsGO1qqw)qj=xC&?u>%$B)PneGOPs!33-MPqCwY9n``RQNdSw2ax{ z?Zp&bk^4Nn>$}F%-C@RnN(z&vIz4Z_?bacSe;hWMFY7qa^D{d2b(GDmDj{|g;dk^c zR~Bs{CR71CRY`d)AzG8O zVBy8J&4;DcaDu``u3@!CGSceNfiH|KH+rt>n>mHa=3?)G!cR6bmw8??2qNfoHvaQP zs#7zf>~P01;OYSlE@D~7-+ z%V?b@BpIhg47#_n2X*neEJAZy0;U*>GNMVj>xHs-hGq?GG8&uD2&uzi6UbOHpTd{X zO*%q}ygK{WAGU2nW{genb_0++=gwX2wnl|Q>qtA6FzFHcPMn!Gxx z{_~?hVri?WL~*ymKjzdKiZZ^NWQ1v5INXUx%( zhW}SUu#k9KJ8ELbwmR>fb8Q8A-MvkAZzZZ)7TD5ge_o(Ln*J|x2F|1$h@E?_9TMMY z>T6CY%VPdy2VC`+vy`o6B~^$bZV{29xC)J{EWT1ywe%#lReD04jn#s^GFidWc=Y#L zJ?)GUGjW>+i$<`es7eY^PbF*9nZZ$rK&Mjl)Ay+~RV{*4@hyKmljuv<{4!#SvZv#> z(Yoy?Ty{=_#f1FfoL!l+249$5R)in3YE9t*O~P-UVL={dsIkpZtd8ZSC<`^V9*SM% zq4u?H8A6TUt7j13;ew2AX^flKziiElu%IdGCJvaUi>LJ>f<;s{p7~4_D>f=!8Fy6X zBjg&+3kpRO32G4C>_&@j=&~2XG7Kr~i}jJG@`R%2T|%My>T@85Ag7KxPktVEkfoF6 zE8W&vT|5V>PCB-yP7s-X9*=S#Zcft3K{+##!+Li4dl(6SjZxXY>m_$4&ei@C+(Eb# zLXUU)HW|T;8C)p#$F}7PDqLF6{8f?dgS7Lk>~fcLX5IbZo7aKjvKL2|3<=kBvNzaC zZ4x2RA(`pP{Ma4-t`7|DAp)i6`gX^0N$mgDlX5#AuwC&VqbVw4-rC2rKUjFYcczaU zWJ~!H$4r}#%=HKp`-xCpPGwPW5jrM*EDA`6@;vnkkg0CB)+^M@`|+p+^!S-Asxt6Q zWz8e!OPWg5TK4Hb6;mKI_==+L_M_wXi;v>;@9A2#Hh6t(lMip!222Y&;`Vg1O@aMA z(Ur;bFXO1@8CF80yLe8d?-i86-OYjf-@>h?27ZqS6Y9^=5^-hol8~ZiYdy&ywl`S@ z^cnUiJDP=*+r^S6rRsN9dQ8))wgLMfLIL$R$N!;F&jm8aDGFxv&9w`in{ zZaAejM-7FslH6kUr&z&b6O{sMV~<(2z>;_`40bUfK(`8aQ|P4GfqAWGvDfA)Imz}t3xv%wd z^6WcQg$W*e8$xH3O?@)_|Ms)&9(8hhQNjL9ss3Ua=OcP7u89Jw=BTL#;+pBw2`N$u zf^mQS&B2ko`-hU|STRvG$KS#yo%rJZuw$qDR@ale-3#(x2#-`sgoeLCA_82?puh? z>9iEBBboCTn4|Fde5H-Ypt@^eDLY5uNVYBVq=vTH<-UZdr?UM|`s+U{t?V@KDbQ** z#`oerd&)g)4IL2IW5Sys@!08VxZrM@Ev1%y(I9*hl%75po%_OM4FZs>gu?_K_(M~wb<1Txx+f0N1e0eB(swD z$f*sP9#5ix{YMd{HKl*uri2j%!0x$eH6n1Ig^ci~_0*=)i3*kq6($Ismt|8F-1N>8 ziV~ChBwD>tz=h6d?L`PZ>~LY|mQPCkk=NwwZ@jhI9U9Pn4X*r~*dEEuVz2inIt#`4 zuw-vccXSi2C)CmZxC+-66uP%w?r*8Vt|w$_C7D0E!+kVTp2@h+!->CX_Ye2X=d7o2 z_0MUcG8ca4f$442CS8?a-(|{YPeP$9n%$9FWi!_00=X`+ai%IeP1gjS-$XU6Og%f3 z-}N2V;?mUCPmvb~75sI`9~&I!HJmST#QYpT8cFD1-v8FYMldNE=F%v;8>nm-l6PUI z*V1a0Z>$ch&*R5}Yad*=q9(Eg!)G%91)m=6D$&8!~eAGf$MD$17dP)PKC1yU_qG( zE)z=4AgbGex$-pp->A(upRV`dqrIGyJO(51Ze<7$oW-x~zgDp!N5eW#eZ+k3JEHD6 zvQT2@bV#=9QxN{>cf+{9#Z8Jd7%g0cf{j8P_I1BPh!Ka%mG?)#1w($5hc$re-n*J= zQ%>G!#$ey&o%{-9@3MoFVkioDymD4{Y@5UKt=?zQ-}>~CFt;>X^}B)pS^^zSkA$sp zsnW?e)M+>6ekTNdz6sqOq8yM)xGWS#giz5=n+2Ue4fA@sPN^{E#jlAx{%EgYB<_&C z(EPYxW@R9HrGxoF=EdGqMia`2T&ur?TUgG%Z;qAvd3Z{D7QB|Rr*KjEcpqV z3BCJd>E7PcN_rBHKx`inb#S^uqq&4Fm1gB0>nyIPcjD{Re&EAca%S}Rsf5WPyUD4- zBq2#DiU~^_@ugt$?A5@opi0kdO+f{nQ$?7(v%;yX^pvwHI=V>|IAq5z_1gZ6kF*k3 ziRchsQ8;*UMK0(aT~TthS7s&yYQY6Z_LMfi3RqQ}JW&R^hF{d=C#TBM7A2SEDPY#k z*|E-KSRD;kdWm5V79!IG^geWlI#8bGzca0pop(vYBKGffhAigNkX`HMEp{$~fs@$M z_~MSjVIVt}?N25d(&MsZB$M^KrisDnYjnE~J@;i>d|!NRVaT9;oNDM zc!pwlsuizl4TKO`qk`rN_ku&oBSdoZqT3^H>_*cc1t<(y6p!gv@t7AAP23{*>FBeL zv##=8G#F;|*O_FF<(^z4^Uj4sp`B>Xk16ubqbTaKe z*fZ3+@IE*bFnTlHMq%3Q0r@>gRuDwZUTh+eQlRozrjr|!k3x{ zc7MWX?9@1+k_Q=+@<9KG2X>QTVo}wAJ6Il}{KK1u^o^)K85XamW&@FglY3H;eiPN3 z!e}~NmRSj&*YJuc?E+xC;h)iw9-8)>}MDkx481oDt=>fGw3mu<3s7 zDMDnrNMmK_XQr{5D4K>eGNMKWdWL(m4`Jx%9vG zfCy&Vm_DY6poH&NMex~WkN(t$q@NePIDE(06OV||2rlJHr<6!5doSGyj1Ys)+pQ6SDIcc@x;;Xma8HYRa5sXFg zk*FVhm95s)m$4Ecs=sO=9X%03MhlH^buJRX7U}b`9=W!Z8PMM>eDY zITfSI?C|EQByJOBaA9IZi0OJX>(_4ca9M${-eIRi=17z|9YH{9;b_CqLp08n@3E!! z8RtG`OUF7B%FuHSUMIt1Qc54&_DhNJ|4~Y#7-l5BtEltFL5A6TZI{8MR5^+ew%z7? z44btSr|p4_*nG!W8s^2~z|S1_IAJ_r9a@T)I^=;Dij@Q4v6r!WcB&brBoGD)!sS(Pxsm zPp!IkwNd#lm|+0&q9sw9AQop922vfv2!)|;T-jGuRHcJOWPTQ#RqcmNi-2CVCW;~5 zb&A9OVo}&oXzL(3Y|3yIrSzA_3HX$=B7vR6_1q2`iFLfQ6KI(CRbE4wb}3zWe*LD< zyqboR;ey&5XZ)NuC=dU4!5c_f#HoilIi)q z0tIb2jCdT)xZT5mRBg_?OHMA9%Ngzck8S>cc>hN%<;B1Sbh(?4c7*uW^zvH>NLR~1 Kvr63|{Qm$FiVkJ~ literal 0 HcmV?d00001 diff --git a/docs/pytorch/img/a577eb2dc81a64cfc4f6d04ff9a25873.png b/docs/pytorch/img/a577eb2dc81a64cfc4f6d04ff9a25873.png new file mode 100644 index 0000000000000000000000000000000000000000..3a34918c891f439da3e7011a36e808cfdd82116f GIT binary patch literal 5743 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 literal 0 HcmV?d00001 diff --git a/docs/pytorch/img/b708f231f544bd7bcefa1d55c82653dd.png b/docs/pytorch/img/b708f231f544bd7bcefa1d55c82653dd.png new file mode 100644 index 0000000000000000000000000000000000000000..661d17aff7492c48a4e5eabf3740e1a606f13370 GIT binary patch literal 13767 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/pytorch/img/bbd3ae66e0235fac8745c37306e74a52.png b/docs/pytorch/img/bbd3ae66e0235fac8745c37306e74a52.png new file mode 100644 index 0000000000000000000000000000000000000000..cf4e02d07e677036ce5f87d9f977e8b77aae70fe GIT binary patch literal 8738 zcma)ic{o(>`@dGDq_oH`dz*c!(O4?XFhiTAY#}7eyk&%8Oj-zGtYc`X9HX*@keP;e ziODu}CTR#2(y`4OCo*Eb)8})2e&6f*Ucc?1xv#nJ*Lj}nxzBT-=YGA;Njl?TD=8r- zAtoj!iAJ41CnmPxhnUzpc;g0<$9=P$lE~46E zgBuL9RN1*@hEok@pG-O9x+ZI-58-jz##tiH}c~z@G zGW5P``=^LFk1=~sQz`So0EEOS>(%iZdW?2bMtR1uj}#L{bb*p)`&kqDZ+aQ5SxvOG zx-7GUyYEtf;852{-jxLL$`?@R+FY(B%K$`2)>N0B8GvcACQ+#PEY*JXk(S}Gj0pPZ z1KGCwV@0o^Yc_VWr%!^x+qq6Y8ZCi~mjVzsG|kg}1!4C;^=6qM?Km~O=jNdf5_C2j zos~AS_Lnp&L1^2KUuLg3HT@A(3fT0=of} zc>9M3ouA+%A%e;2wi@I4{WMe50RCyLw(mLlAif=Nm|8eH?u+D=-jYXvbo;n}I)dMg zl;1H!H7U9DWvyagDsYih+lSY!b%eI9cw5n0E?A|GO@+PaP|w=skM%0MFm|B>FWVb9 zTcN%p@z?RA@6WiH5G$@QFi3~HPaBPRfMo!RVnobQ*S7<(kr^jV-WBNNn51A`pa*C5 zJtXkw9LnmT5@o*mY<5=9W*0_~Q{^sabF0O3{l-@bx0nadYQJ}Wjm%G~MUziA`|p~{ zm7yg6RA+jpEU5${nquTM&k_0R@;tqyC3Y4WAUEdN=<{wkX zHwPsD3%+9WOv5$c_Ju*_y_~70!@eOwHUGVbV#YT~Bg)vGM(j}9S>KY(dPURDuC1mo z#P=R#6Ht-U(H}lth%6`M%6<@JD(tZE+L8Ec^dH0Wre2p;3UTjYt5dR5Hu14XW}nD0 z@ROZhO9`%-FJ^2DWoeX|Pc2{n%Cyh7%cU9(HE(|X9l6Dmw6RCGPe$SJ>386u!AFYk5?23w~*I zd3jmeO7NY%u<#Jl?dh>7!3uvJTL+~dK=!aKlVMBCGa&@Fg!i;?J(Q1LB6=mjCzi%g zQnx0=3w8if8HN8OyQmO90!-!C=|z@;Hz@vNF`%aqj`UpH09hi)JAnUb7Sx88Of3a9 zC?QoHy&Xt@R$4n6WtM^(i9KP_ye0-p=7+9>_~W#ja2VE$XH5vxQX!sbZS5LVBR8po z++*8Y-mU{>TbzE3^{n{Wj3#Zzw{;L=%xp2M z>GAC-OGZNS17EuBtT||k-zX=QWVpzVUeD=!-WPg{4*m-n9)N-#PGQ3BYYT zzBbc;-9&+0`4x(*uV3VJJ@?p)k*WQ96OP$i^odQMd|U~Hj9sz=MR(B}wvj{Oc7ApgFv721SB8vz}U)F6|bTg~ffmfzx`FmozkfVXMl}C2(X)XD1d|iL-PNEiFWY zHoLJc-$AL@l)QFHCti)hKR_d0+DHz)2TxEYCW<_`?e6vRDAG~N-$`ix?D53Nzt(~5 z12k#(M<`ndS?*B!!@SNL8=wkGEXa)EXpC=IkLq_6Bul$zdG-)5qe)dH*VZQHtJkth zP^t)H<_kxiy7jI9CVmFMy$k-ZFK7I-crM-!7x9Q}b}ZZwnyHShnb<@&Uk|M->hPJp zO~$(~S}5D9(q^OA0qK^6UfXfU=7Fv0j)=AS6Vgyup^PQtIEc2lM-l#>VsTF*YDHJ; zSPPg&5b%B2etba%dJ$cbgQwfx{8J80JKdK$YuAsxRZcAO{&~0QP?KJa=l7G!(^7-F zNf|FYY)J3i`2l%C?Lp6Z3l};0l*;I1ei!RZ71EHsDSnjsbG${u!^p?gKW>s@VxZMi zK4IYS0xq^UD9%WyNa*c*x4%p1KE?9BZ57g8kfy%pe>}spWl*tuI^QDPmR*+~A2$iN zNzFm$+f7Se-28v&DvsoK^#`**|BaifSb;SwOhxj}{!b3JW$iXyH6V@~Zf#6+r!z}UhihwOQLGN*#29PweevGut#xL^k_ zIe~cko1tXCLz(uPtoIJhb(jg6mP=?Y?RQiMKA2pxw|x$Uvw;2W5i$-H!0tU`N_<$S z+qFK-d>=$hEKCLX9nFzBQ0y`O0ao~ftbHJLCEc2^^eEr}q=N_{n42R0H0{GfhoJ8HyD^(e}LtLDeBJRTPic~oB;1H1YGU)|(f$^Ca3eKt6 ztSK_lRo^s0wTV_UW+#4LF%<}BZqGeU(CI{Ljl8!dbj%p&p$GvtsNUdE87_ueNrSTo z{Vu1$v(IE(0QNf^=DzzzXyjFc&%a%@-YxK}OP8n)Izl~=*>8ljorQw^(-g=$FX<5P zxnsax-g8m6AUgcbtwEO+EeoX1V~kd6_+GGcZG@LG`=z9VBaPA;T|NX!_!APXi+o7($kD#1DeiaZ2|nGR@>z;bS3THaS(~`s9Equ1?*elVF@45 zh0Y*a{`F;QT0yYXWK2LDHVwXhwCoe?&%Lx8qK!f7tb8?}zlK*d`fsB|(Pa3ALdKqg z;owV-x9|d$m=w)H-qy|gf6(iu= zaOF@F?>$0XNF?g)QgHp_(+Gb%OTyfs4@l|{eizQdMCI9 z;lm)B|0ob_xEp&LFq~@9KvnhA&>5TycgInbVvK-3Zh#JgtbNuwB&AIrRn`v*`uK1({f=qh41H!}jSrJ}P9=j3xweXoi zO2OA$$bIXqJa)B)$e#zeKfj*!SPN985d=HIV$Ld)?gH2vVN=v-*(50q8s^J;OTxt3 z5IY7-V8a(F5T1DKs8Goc0aYMJH0|C3SD1u!N`D>m-%*Bm>R_R#tNsvei z@=O1G)DIEL5)c8&%tCO7%wBM0Xfc*yh8E72L8FyU1D&cWNZ~BW8W_!%(?^>5@tit! zdRKwO<)gm~(2mfj;`NZVMf=$Vc-~6Yir`hyv|p$E&lD4Pi^=eb5*J@T!slb0QzWYA zm6;j9)T<*?iB&hj{rR~$mi*a)VC-X5IDHg;nu69=dwYnu}tghF2KCq;=7tsC*v5K~#<3SI0%z4|K?JALPrbJF+acksWQ_SC zsPx7o_PIGviw(+F1dpVCv?%_!X2ao;oM{7kSV_Wd{ z9r!(9mbR^i#}$N9uwp#y1B0dAZG0x0|KQ_iN5W}peHwoE4E!X_DQ@#BBLnuI_(3<6 ze`bK}s2K|dxtzdmRq!xfSXYHH?Oig*5L)niL6>gMd#9!OIO5O>+R?1k*f9&go5(i+ zgfa3^!S^dGslD(Dnh!&rml(U112~u zZ|LTd8rsWPGowHi*$k2TP{O^&-;ow?;CImoGYO`p@SF1aoyI12_1)!QPzuaoA8P@VW#u0f1AM)@}W5j191X(>=+c;i%AydSZKjsnww#(R5#hMF!pFaKgoMO*%FY?WdgCZQ_;Vj}e>HS{Xl%efWAuA;rh3=Jk^kRzfkQn2}LZ^+}^&TdU6N zotx&W><=UA%l|7}c;h6uC{6v%pd>N4e`@laZ!6t#Lw4f|qTuK~Cv?6yH~l2H-`3#$ zcjy>gEjiWG<68Zd8>+4Uu3F1kBhY_uQ7hf0w#+Bsi!XDa@8JG}CM09ai_&ay)yq#s4lHU>j|J(}| z=ZBsz8Yc`5d7@AhwYy`DgV^HA3sARS|zp|M*KdloA`3=Wb<4GDSC)P zzUs3S`+*90cAu8i#KG5i6-AMW7a7$5#?bUxC+v2ky!JrjcpVkuS%7j-43x2EDANCz zfRTWWoV$ZlAzlPVCz0ePJuu~`f~8;@H6m_x$YAyF{Yez-^^gx3m~^!oirRI%9C~cM z%aXu6{o)fIlV1*<@?Q@HCtYoTs-#Sao`AhOCf#|N8JT|Gm>3Gk8>~Xpz2Ur@upc=M z>os!|*2suUZBe(f6g)f7W%a`)yv zD-qzES*fsm2e?GL{-;Uak(4`2r0BmJgAZn&0TiYV3{_8@^*ujSJ$cdp%%J7Tfbl;} z_{P+Ixx+axW}f_Ch;XUiVySe@djmW6=-KAH95UJ*&FU{JL6ehkD2{lQKho!V$wjM)S3`BE#iZh2s-a?$Z_@P}Dmw z@k6(#H`+X%8s2G^XGC?qu}<8Vam8f6@#@oM;TZ0EEi~oucpQ`NJ2rR~QJB4AAwf?p zLW2g#o($SudIL)MTM)y9ii+AL>4{!mq;ezT5aOjzFI;tKVe*K5=9K^osL0DJGH=-7 zMLASWqid0bZP)0eI!sUaTN^Ht28>)|D1pK%_qEC%xTlRhw+}pOJVcd*oUHB2AkrSR zZvPJq2Ok2YmdfP4d_vnh?I8TK8J5vN38guddCmkm07;rprqN|#X8bQAyJs+?Xp zm@<4=h4_pA>!FX^eE~KtdYrCeCjZOH?0!MAC`=4 z2!B8HTl&&yNZpckCg<2OU#>_=6;0Cs!p2hE$nlYJveHj%zuOMT^9OS-+6oZP&?>d8 z2_M`$P2Ov|b@3krcHPd~3$eIA0aR5k#bFR{ivC>*wZ3{EojDvMQU~U?yD&cabG%$j zcFYa$@`x9?j$lcV?kb{wH~i7e15ESdcN?K$7==6fg63q+DUP9}S|d0t65SeMzSzJE zH?7rlb9WkHt0FO(pBz9p$G`F=qiS#q6I~gN2*We>z9HNLDW9_=y|Q06~Y*UA3?@*iqB|4fCUzV zVCTev6Mh8V^6zc7XR=6EqW@nDtP0KOkJvOs3atCXJfaJvQJG4VyVN+a@lD)#VpS{Bom-i*b)K$-NbeI27lU*=jOj?l=wZvqPMNo{z+h7V>98?9~z zJ1dGB22e75*TCsHC4h2y10aMVV zI$YOa*wQo<^LIrLwuDd9Se3qDr-9aWPMuVtdBk;`KyJ?%o_UMwdXCFjqu_lwxACWc zYM>EW!lew(r@_e>Lp#E0LDKSXLzXygtPvSAcgcb9p5CfFcWc-i3@mXGhcFh$iG(~& z)?^H1yz030^lwkrjmiwqbR* ztscFBP`w-K0gY#IcodH`*ptiFV#)R7s1KE-rhSxMzi>ct>H3(%g7_;25UJIB53PGR zb1*T}(}^>V@-j6^6XvTyVNRtX`xq=yyiEdKbtp4klg828nU!Xt@QWJv)hNpUG((%a zT&)07_2>0Eb-I{G?OJUz=5~TDgoOA!_}a2z)ob4mc-#e01DoFBpzC#}s>GZ9ZqB|m zAh%@{#V?BFsjx!F|B*XkgC*6Zie9Js#+31*QuXIuTk#jcIse4byy2!muUuJUqMs}j zahz6c*=hF?zFEN%Nh*!pJYdj=5dj#E;{!~T++tR2wVx%LbEkA$^u;#9y|x6Shd(pr2g9R_+P;ri zMKynQ2!5A3!y?6Y7)Td@u2%E0Ci2qW^Z6HZ@3dU>2l48UP{%)>V)*tHx6v8CeYIT= z>*McmB&yl-?+Nb}m|<;6LxPjXr?9^4+M9LDvtRwV)F6Ej9mWTD{lR==FY*0PvuVcBA`^;WJQPk z6eSC?1i4z@gbWQ< zwPWq4eCr-4Vv5qCxr@O9Sxiw8^llxO;zQ6ME&p`Q_Z@6}k$u3IgR1T;$kF#O7Y%gS z84*aw>Lzq5x|=C$a~lG)zqWQ8*o4km|71JkoICK)r_b*)d`hwwAF`QG=6BRBQFEcG zV#5y(j*n>OhFoj6InA)^<%F?h;g+fwc5m)1x9;+xj(|JuaVMOoFN5l;_g#il22g!V zo;WA2+nL@?_taX=lQv6a`$D-YzM_nDN52g$`%e!4L&pE#-%pSigi*1$)bcaqPNI)K O#L(6brz=lhzV%<`o22>x literal 0 HcmV?d00001 diff --git a/docs/pytorch/img/bce7313d5ac6f2600b62a4962a6daf3a.png b/docs/pytorch/img/bce7313d5ac6f2600b62a4962a6daf3a.png new file mode 100644 index 0000000000000000000000000000000000000000..a9f9d1a1583cb52445e1341ed6c699bbe3daaba4 GIT binary patch literal 7465 zcmbt(cTChz-|d&(r7mUZMZu*vk*dhjmL`i71*9xUFA4%m@3J7hF1>>wN=JG}l-`^4 z4lW=~l-{}i-kbZpPoDRmn|qT_@<}FVW^&FXGm~?|o@ywQkuZ?}06?aKQq%$fFdP6t z`VjEnk(c_}3V)l>Q?+MGH#aw*z&!XbB}NAaAP~ruqrb=ds2g%}A|fJUVqy{!5-1c( zN=iybMn+CfPC-F2tSsjM0Jp1E6y=_I%_4Ita)g35OB=|Fs^Ah`Or|I0J{J z_j#%r!vN(*JJT0422#*I-3?f{+p^_CmXP$F+&(DZA;~Ug1lFG6wW<&;qiBTiNXWJp zrtY7SXX<&ujYL5LeTrmRvTh`&?nYj{Oph7bhm9>yDr~!#r7~WOq6m?>YFB3fd>!bu zMFZxf*!4OBSUcw7Kar5X z$bWzJTDAJXT!GpBz)H#-rUAGlx%w zP~0EZ;S|D9)W%=7|4{REfy-bRjw}g&6hh(aC?S@Ze84<9Aktz6FO*jVg;4`KXwaO< zPk?zGGz@}NixtKo75>eenI^_kVp7&7i~!-sN~AqdygZJ|o67%9@IPexhu}XV z{d@hR)PL&xk6!;mb+E}`QaH99Ukug&id@HUxv%;WJGUWl5tjSARl3Y>zCT}%zg;{h z&vRJv8ZoP@a(EPFcR`+4R;4iOt8vL?)6~$Iu6b+dg4|N)yV<=UPM`Q{hm^6wf))>7 zLaixg9o}6?}}<;J_~pYzJ%tbix%`eh-;U|vEDCi zEKjm3>P4`a$joQG*g9%ip7Pc!(_5Et?I*n>e|$klPdLGSWj^YQ4|nx5=r5UZFSfRu zWqZ)Xi;aHm>w9F8NB?G}ud`2_0IS-N*`?78wk-#bW=?qn4Gi2i88z?2e}OgU)34-# zLf`lIhYX(L$0Nml;m7b|E(u^oc__urM}=^9ppaP36`Y!6@=K8dId?rhf+b)Qf!WBv z?=)X%)poDBlF$RC8UR}2nElm|Eu6bb4teM+Jd{xiqVSK9Bx^oYqc`ykrmoyJFAQs1 z_veiJ2DMG%nEfb6#ry6PyV)<#oOy#^V}z@x<7Jst6eOiY5R1>7936y44Ls;I>T$!& z+@B86RdMwfK{9aIYEu#iyb+;g%q^yZzdsJba+P(`(r51X9EZ0Mbf_QpS{5M;hVwatZXvu8oyc!9cPVE#u8$4+s8Icfe*Vxi?ShY-9Hs}plD-YQwqu0& zTIpT*0p;S}W;$c^E~3fW5P&k(r4SbNbPryS0dARvvX3E+8Kr^b3Bh6jv-I9_SW zk5yQ1%x%)X2~u|KO-ZCQAqKE?NYo?K#9a75DAjBjF1U~R4YDgTC>=n>gZie;**S_m zCg`oW#2y!eI!bZ-Koq}4d9 zVambSW8vgCKK-k!(N`;!Rgtfx7N5A&Jm(1BmDx-&{%xqfiqD7j;UD8m(5RN6G$~*M zzhw+ZDtsFM#YaQ$`jJyo^=BU8C6p6;36h**Ar zXm~s{^_`cDbu(!MlP-H(ILcy0;V|q?z`LzK@yEdaR8R!(Y>I>g*_UsiWi(Lr8!umaTuf+m z)Pv;d*(z^`-2bQY*$X><;}zQuA0r`1;xu9=fiF zw27f+Wy5Cs__Yj2>PpHa&J}OlA`iLqV7-`{tfC|tePd0^9acz;EB2TcvQxw}^F7em!& z$XoV0O3(~2y*-3$Q=Ar!mr*TGf*B{c`6Sr5IP+KV?~M&erHsMyuWJ_}onkLWj{G5PUr9TP&YbTXoYy%s33nKFQo( z`UTC9Yi@NLU@q1!9G=^eL!BXZy0%O2)Xqv4IJc~6($m1$p1~T?Pbo`FyQ5A*rGB|V zSYeWky*`XJP1Ybj1Ep{Q4!Jc#uFVK`zy=f;6-323J@dS#Na)GLvGuF5xI05?!+Te`2GL7^c*Xw&+0I#J%Nqlh;WOCF)m$g!3o@amZ3;SRcR)4pe zH?wIEPz>p0LhIQQ*#`trJ%#^LBai>cP8_DXd4zo2o%u=$UMSjDC=L->F=nkncF|_| z5LF$D+8sA({Xh5K8AUhvoQ zGwc^dw4}_JO3*BNufBkP384e9j?EMRol5tK>l;-Tc`|n58_#5TifR*R=xJdDUgR7E z*goR8MBVf4KUpz>`On->Zoi;O$4?tZzFmHcb|8bvmFeFzW*B*#bC&Qsr1bb#>L-0I z`0AyQ=>_+;R4Lho!cVirkB3q)txY9SJS@2_Z)Id|T&3Q92(po=>5=O_MJ*No-mM{P zV)LnQom+xAEyG@WpwI_wjs%tW_8an`KK57c-T7i~)7NAHHsR-o6|6_dM{1bk&JtNX zELY_jdiQdlv+HlP`Y*EIUIh1Akg$Ne`Exx|=d70cn9)!2dz9$~b0W3_zI51Gj#wiquT zcQPz9y@Wb6y6G-m%Jg9yfeHx)e5wgX4D(99MG;67bB%DEyZ70-5wsM7&-R%p`HhjX+7bo3>$+j zdwRa_(&-J{?klC#_cc*0E2OQnIv|!!l1E1eS>}sPV*~)r8Z^2YXJWB1FG9y)#3%%W zhEMAav&CZUTc45F)ZgDjDmR?q6}ONGDD=+KGP0{2YymYTCim)vq%ZSiA@EkRj--bP z!Wfs68So?*zDqExB-`Hu6e!=ZWMVs@6+$mq#{>`3GImmfQrxU$J6l7bvhB+VghJ?nt|>gt_HM zQjHStwhn5!cPwQrM-}B9J~0}B92f6y{5VD?+~*jnpcz+$x7Xon>&U%z{9)>b4g+AS znc^PX1%&W3jS2g!QeS{0v0T&qWrU#tD3mMxQS+aeV%>( zoI8V+Ql*WSFU2n%1&7QKvBZfMP=o8IMUT6D8ooytlvC1^l}u1s?fOPJ(nuxp0cG-+ z*%}TjD|?Wh#8*rj{q0u8Iy^ngbe1zv zAURWc^LKy+^H49TOsbP=iUG;Av8G4st`qSU7;7^(GK&b^YNl1wRY*0d+u;T~wNU$O zza|WfsNypuPV|TG*c0NudVAfY(S3l%(FK(@O~B-MN~Efq#%2^QS27S#MH-TjKGCM_ zKgsy;J~jg@Hjj94`q)Y`_xLsdJI2f)J%5kC~2;P#VW z!6;QYAtja*u%GW&-?#WBht!;&4{0u<6k!w0U;?Tb8m2=XGBckvB!) z;O__MpKF@0Ep@k-YZhwB;Zp$maRd+HgTod#c}gS#pc2{hD6~H0zq47YJ*)<63d%k@ z;kY6|BASn^hY+rA#v?0Qa#UR=V3d2^y{ZVianXY{5tTkQ%e7^N>LtWj^qV1F#|AM? zQp-@D;&?+zX9KztWr=aX(MxA+ivp`9nH2Q+jc_viJ?`M1amo7oYch15ar|XH8XZU? zTQu|h?8+c5wBzIbPx2hmQR4aRn3oAF_mRP4d9i`gn(>PO?~4qc{6TPRVQ9g2HU+#9 za~mSq7`dIT!WO`I5DtZVsU`hX(tVLcMObaB2@0jl*U0zqDb%cNTlm2r*D);-cOBH? zn3u}#lf)M2d|QvP8g|=@7c6h zOEJ&j=d)yg`)X-Zg;x8n$z|wLU@NpS!~bn+WLl+I1}|(|lkn4%{fx4F8ke@MB4caw z3V2|7-7d3lpW{GEoR3)jN=7_mF;&7JyXtzF9GYNv(4n$8)mjrbpjyRc}Xpzmi(@uB! z%~b(S%DsKj+w1Qh^LCE8@*#cX@l7K{=3Vg=N3Bep>e8t*HE?V34T?#5UtvtG_rE=a z+eRHSwo>+ml0r$Hf6xyy5-Qr~ThCut>hCorQ1bT0bzGK?WmYrY%&?>_ragZ-Q$^_k z6k5M2Iw(hG$vm0+ROhx872bY^1V7R?fm{yWfV3(2zhCk z!_9$^yZ8|@$*SVY>_bVu0=G;D<=r*|V@T!i^&JWsQ@ z0n+{UdJM5UFzkX@!%kGq`^X350$tR!Xb%Ug=+|m zeu{h!*f?+Ja6I9r4}bRDGj@y})%)}9Gxzq@&FKTf(PGyL$G+<*pY#0QBPBLd@!Q~O@ruZAD`NnOK_ zpS(JV0dhaMXboVTgJLaPXSpuowt2Gz6`8H+_>CJ}w=}D*=H(?mj}d#y$*+{f42BKL z(xD>;6y!u7Q6Jx(7x9z?Q3{|e>CL|r_XRAdpyJ}HzSr?t+`;s?DLE4NvC)wF?hR3H z;=$w&RL!DZ@fIZoI-^DL0GkZ1N){s$#Z%F{k5|E{Tg1hw-TUEbeQE?9!oITUlt_&O z3*WR9*%QV0YzmxYn+i35){(a9+Fan&CR@!I{tYVFYzXNEwt0yuRQpz37urbJX02C4 zn|3#tP6=&%C*z{j-y>N;E5@Gm&1l%&&If}vUa_o;Og*$0;QauLQ7s#1#Q01}s(uii zuHdH<2QplmoH;k1QH*Ax7k*CI8Q|nA@^*CiHuPp-m*@A`$4KYey60!m)y^)~mN+PK z7MS7a!ya??W;7)W6by-wMiPhsKBLbPT#Xub*H8#8U3J_2u@EO+xgKT3DOfc_rooR!TS2`18NL5jf_>nE113H z6zfD{=}89rflk50IYkfE2GZ)yFCZuq9S}Rcd0u`PT&Y{geQh{-dMIw^`Da3ER$pLM zsLFSBLCa-+=gnlXi(I<)6Ay+(NW3QI>BxDUfN7A+YF+AyJ^oV)jE5LDx4nRri1K#( zY`%hwHxO7ZBf0&JAKZ4klS@Dx6iUDr5D*R!Eo^+-e6t2M_3-FY|mtisN)X%2Y zv;La}3fOG1Wfi-f@pNP0(T30D0i_8ee8cbhL}G1Mv}X^DTKv|!;2@ z6Tj4hsO+CFpIJZ;xNAlJ_I5eanet2N8DPR zKD$=+=+HR5Pq=?B{#N3xDC6$5X2y?*db2X%Ot4AjEN8FPoglBhmMqp@WuQO1=d8>k z>Y?A+=*uJ~s+M1dOD5L{76T`li|xIieh#^Y|7`KIE9{QSA5f2L#b~R`?bfOiR_`4X zRd~}rH}vH8%`=~wY-cV>pyF_cC(>S3>Lp{Sj~XvoPNbo5a&6aPn#J%$?9416-}MdHKJN{1tE%h9 zU2*Pp-SA?3Zj$l)sq(MqJbPYH!%Nps_$U*z4qAu&TG=FSx+Pt86|OTxw{=gWru;Ua zp!_du#-5(Li@0u-;=u-`m&NdAtcI(2cCLo}^Rj|Tyg$4ylDP`5`TID5;n9odA$0H= z*rOi$;uBg%)9IIg<6`x72%70^4Yc9-rZ zSCeM%lxGX2u^Vpb@~E0OPIDxt@f{;JrWK?MQYhnFf;z%PC_9U2G6tsl2Y=>$Tr)K% zjC0RRD9DUjydA!{6f7OEn#n#fZ}NuU`zNpXYIy{N62h(V7>^I1e`vy&Kd+;>`r`l6 z@CP~keBR5Xu}_K!7NJk~H*x3y{U1~Q|JJnsCrJ431mj;(#=klF|FZNU$p3QvMIS{; zz5W{;5cLf2y8tj}40gDy&aGsrVcm2`c^l^vSl3m@V$kY5I4~VEiI2@6K0Sp2!h}7? zr#=8IUaW)Z3tlKOa!lb{mdxD^_T$|zl^)l7&#V3hH}=(_8IF(u=@!n6Oo2RqpDl58 z`!j`-4-}fo@7}^Wj#yz9xU)l_uRIJKLv%XSM36CA*5SRaA)NC4SM0KeolE=F*%QU* zl1v%5e%K`n{%H*L?w6G+Z0En;G}M7V$>y$+^*LoMLNu5iN44puYNWT~CoHOMmv1U~Ji$ zcheL6?sSGIG%i@N{czP_LALn`p%r{su;}{fCitVPhf=96NOAX@mtKwI=HAmUxNa?i z%B%TiccMHwvb9coAh6(yG71Ab@;|o&a3fI@=3Bp~9_dxoJJWv0UZ?%MdA$Jk)N%`r zh3XKlKG0m`mw_6Ev}&!YYT(-a&^*^^p&xT|999*^KP)DHxGC`(byh}-}DmaHhVi{>zmU%HUwsW4xA_@Ko+O2!{OmZs3WX8zM&^QZ0$Uq@!G!)C^O#}WHi1c4t literal 0 HcmV?d00001 diff --git a/docs/pytorch/img/c2914d88b6f17b84982e162cf6930a88.png b/docs/pytorch/img/c2914d88b6f17b84982e162cf6930a88.png new file mode 100644 index 0000000000000000000000000000000000000000..a5f3e1714868911670b776a1cac6fcfb9073182d GIT binary patch literal 8800 zcmb_?XH*nT7iP~4nE^(ENRkGTpadC`D4~@!@+xMPReY?Brsryv4k%1Ny12+Qz08H8# zbrS$UfB*ouq(Yop?ptQ7ois^R;s6;GT^G9UUD# zJv{>h10y3N5{YDDVq#`yW?^CBu~lRT0D%Q<^&4h^BTJdOzEhaNh>H(Wi=U;J6dUV> zG|0UHhk}JE^TnbUunSoqtp4OE9Ue&;+7bJy3D2ma53~Nd-TPodV3|!*=y(EwC^{;5 z*#ED_UhV98VxxNI+Cw-7k?Kc7${IKc#%&n*c14zXc_=M0W1hZ^9CR(Q;yD<60KicH zitAA2z08?3@=%TQITRfpCkMXM^@b63`nKmxY&f9;AT?9xMixM1B_t@u-~OLL{|!|X z{d&j0-rzAKKpBJNM_Fhbzg`PMfSSPFWNUg93)Ib|{`VOi&hK**>=up+Jn<4-xP2v{ zcyiOVk^afS=$1K(s^-QO7pdzNUSDY4J!RrtfL<{|7fwdxT>rusf0?R?jlJ!QLz*=U zcRw5vLpNEm@y7L;Ub8?i9HlBUVqfMtUX+Rmm>C>+{g}_>SJE~6fO+OqpL-|DFw8qB zqA1jBrF1zpuRKf8hi6mo3^^kU3|0f?*y;Kh7Ur|I(D%xRJ!{hMUzI>KU$H5sXT(23 zQnI$z`m+*(AKcHFL!oG)Yku=L)hvI~3btQV`c9C6pHU$N@81d0S853I`Hz=G03*F))16akU;ey-Yza-;K-}zp%-u;Y9?t$x|a`t)5t}|9PwPdjlMhVjrZ2ma>Z3Re({VQ zP&qs5(a(S?@sb%7?{cUt;v6w;e|uMg`H%cO3n6)_nh|s$=O{C!cGOA?d8)eJtMq{G zHKtch>rG$&PBnXYJzVyCTF{yXqU0 zp+@Ra7HOWpPIuQ_Mg2d^sn2Ty;6VDVrAR$8L1MTkveUk78M&MZI>g!RZ_6-$bL zw1H1vf*QIZ!|4mlYPBsU8w&vO453B|C2bsQsLd`PGc26+?FzbofgY7LjI*48Q$Nco zdWozO1YD^oReEY9GZSXV_LJynZ-*Eg=BS6@4OWYu5@$o?SRXeu(ubPgxV+57j&kQG zyu;=TJeu2&?&+i<&_LV5TUH=ejr*;x(6VIM z=lmKvbxkWXq;^ixWez84>&hgF5B=9%(>3l1N>eT#zuS5k^P$ETM6()psH7q4WgNq zjKqJWuj9J9gE?cKyTBY)l)k+&oZexCKY?B9!}GENb97PEAOQcr$XkHR07mJA`tK;> zGZ2`zHd`w&i4hc`LdX7Tfq|<6?_g-*fe)Nn3f%#t!gS6x{OS1(^d!fRg>n-RBUDF) zwj;P*&2qsOl`gFbE-9sHhtv<3MEa)HLC}*uXBsdQ{;EKF``jz)NiHe0@Phxh*xT zu%kGkI_hQ*jz3cjl0?zEh$7d-9{K@w zr-@*Q;%l`I5L3D&LlHS!uBQwq^bM46j<-*_>H@^Ggyj|p^e;c)<)7gi&oID5i3p}56!`A17yk){(# z2JTHdNQ8vWGewPYorMgj)#C}O8J+ba;1~aTrj#~ofUJlY?Z|@(c&D0X+lmr&Hw1L# zviv&o5Zb(-u&EGcZlbsYCiwC-5?cWkeUvvge(>Uj(rNP1<9;N^g`zKc!z=ui#IB2A z_abYUjm_Kh9iO6;4KnmzJ4Guwb~M|~4BK9>B`J~CC6O4-eyLIxb}n4cAQ6v<+4Yy5fu>1JH#D`zv1J3_!s_XR`_=#A#3neBk~iWkB&d z%Hjbx9DKWrVo@OhpsW1f!0P9s3u91aaNG2>KnPWi;jf18+RR7rUWYC|XoPT9E6;%5 zaV8U!)y?2Yv11_ocJwg-5hu$x@s{Il6iQpt3@V1yfI8CzpMBsL0`SKi+G~8XIOzj}G+r|?PK8K~IFj8XT3^rNm zGWAVU?%ZtI32TF{dF>ZLF&hQcD1N9LPV#4j$e}}kk1+ofM+jZqhmmM3jOhQ`9Nm*y zAsUU%6b&vfZ?1NGE*o#{2PWmybgMGN|Xu z5H)ewMia>AF`4dL={Iu9)Kp6tb_WAmtBh2NM|x6kcA=e6va+d1)aYwxF;*V~jc6z( z{g{SBW|$ByrM4~8Y1&}~1YKfe8Mt{w9N}QlA0L|ndvVTDD#dp}-27d^Fw6qf-rk~Q zM2@JaTM<5a%oZ89ILQPHq9*VX?ll*c`$)Sek!ek@mAZcm!&~014GE8+gpKi06OAOR zgPw19-)TP!)#mRHe}B4FGlCT-#QT(uZHV-h=%{%nO(L+|j4Ltv`N_7LI2Ay2}BzZ!}*hvJ&r3`7zsLt)e=7PZ$!Q5_)^97DZo$1>PG-tF z7$x*$u5OqG&;TY>K9n5c>$Ie8-3XfGF*9$lC)l>I?Bk*g;R2`J%WMlS!CazZm+CXt zsH3!j=igu&USWi-tCF2Dz6auasih|e@v|X1YCc)Hdw(rU!+5JwvJIjJ40ieoTNmHx zkS1#LFAb3KY@ha<`;_Cm9Gqc(5!Q1jtYfVFvO+~%r$b|?Sr&0uEYM=`^| zD8a^C=An*d7CEq>T+vX~oS4A?FyTTVPDE&J53LjIC@$pXUg}XHGg?UJvdBx1Jy9;*H|iPq!@O@NLWD0R=BB4h6`X(u zyMiM&R+G?YSWdR9$|O^p3L_W|VpOF8LT`KYz=Iy*nV(Tt@(WHrY)uAPO~yad!Ry7Y z&mGa4{7i}asPatP{78{gu8sRcQ*KB}YAd@OmYL{3cHnW4-Y;;Q)RjRirKwHa5WNpt z73Qx0XoPEP-d^Bh=|#?W=gC^p=G5lI<+#LNdb7nDbz9Y``eXin)tzpePP3u(+1k7t z2<&;tACb@Pye3#8f@^JRO*DUa`pF*{|8Y2?&Ix(N!eB_!YED(Xb^BNM5iVMT_ebL) zU}C43&$?rRbe9TWSv^|P8d##K^?6M~@}4e=^0@OX1|;S!;o zCyE8EfAUX*x6~3>9lOSuG@_hipl}{bXIzu~`&b(i1jLFn7Gtp%x-*xRR#;#Z7Zc~w zvW}#lcUA1iNtZ}$z%YU+-Z_;vc?rA_^5Da|%A?%%)IdgHm{DlLMWGD7?$xtZ!k^tD zyGN5rHcE!Q>D65dIof9t^5f$wTyNBKHkAg)Yy*A%sXm^Gl5J?DBME?K@ry8@f{-CYfACGsT=Igcd$P3J^V66c**T6^xct$ur75WF}h`F+I!@qQffCU`d{ zFVr~tOaA<0KB-vFKj>0sFfpN8XlwQ8Ol0#*@_uoS(44wa z6=>N#>$Y`ll@ke=aFThtd=KoX&;=XV@4Zv!UMQtVKP*uk9<0xpry{BuF#k7-Vdn+FV2tbQb1UY=Wfucw*^8QdEF9$z#4 zvGoNGrvdgp&O3gRH>O|h(e5=5j{01``t@BCWY@7?6RxnH{vg)s){<@Dd3^u-4560G zA(kOOUTEdZUgKC0E49=7c4wV+HW#_7y0j8m zL88Na`tTx2GT0-~i|O4gRkPWY{)12dgj>aHnP}`;Ln-kYoMipS*$Ul%x`XUEo|`n# zHZKkYg%LOd?EFB+kDQ-tjiO8A;cyHiRPGvWeQ@&WQlSptrFa0tn8>Dl7Zb=!b5mGi zo(DCpHZ$ts2q$>g1+)o()8X5Fr+{GetLWt>ojb2$ht97H>}5(Fyb+k~R%^$Tr}-mu ziXOui1Kz5vo^->@j-tgoMrhXwS#U*P3HMb_iQ)lVl*?#=IQE}0Z%_W-9=Da>_QM;s z^T@}l{87ySk)AMN#guQFwB&T&#}mvwG~2o6G_2x0KTET&Rl!EpMNolTxh2{G(g1m- z)A=Fb6AUWWubjjJlniM7m9YqIJ_6&{W`2K3@>UuQ^YVaF?hYu*5cH0sKe7SRbaWpR z&frrJ&#X#!T{zvPVZ>J~cUdOX0BNv2p2PaBxYy(a-y#GDyVg-O&ys$@qr_5!CBW)e z6*>pz9p%{*_fLM+yD7cMFdwOyn%XeQ@HCRX`W!}d|5JtJzYJGYDrASO2`T=b?|IWR z19lH}fwCld{5fh89Q74%raVETLUDu&%ndRUU%3YaQwtR!sDd!FK750)CwdJt16%d( zZ7%6AB;pi2uaepzIbj-+51g+{D93Qu%P*(mNEVm}>#cFUuMv(hb=#t!*zeJ6EWZ z`K|_bo!FQg%ol~DT|;T_g+$F7ZttNYttw4QOY!|y68B9wT82d3NqF9<<}vT+P<~m! z!6fs?kP_wH%8IRI2fMl}=37&tIv-^18C)6qyT^{S=J0Aa-TO7INoyp4kpmA{l@2b( z+6%UQ+iKQ0kICGsTovG;eD`nlK9o$Ljf^!4(Yw*!;YJaNDldQyD|~lUZEEcmEW=;c zOAdOQSLFTj6Do*Y2FYeGedqcbH|H0?G=2%ar2~!WK#M5`^xCDq#kyzjeH}+&XBLb- ziujvPcXzO1?E9kg1F>JP_;CWg`hDV)suzVl%-a75hNy5z>W^f6Szv|J%tmgfRM?NTe3iuo}{v|0uR})G>g8ZXcI{V%;mVIK3tK3`uE1|)Pde>1m*n6(a^)_ z+jL!rx`zEswB@7GACM%eoy$P4MqfP1K;$OZq?Q<&9{&j8=&n<0eIU^8o^)j3qe2xOd^5YfPfL>NqkmmepfT?GP ze|PjLdPv_sT5(vmK10?g78)@}S%kU@;>{52s%7cs-Z(Yh!BaHdY(@oLgRQ?yIk8!t z*Hv+U6zNswdXX20v4HNU88*&N+-$7&wb-n>qe5kT>p))y>DHz>C~pj3zrS=oU*mkQ zBEjbB#o3Q5yyw*4jtig~BZTD)6yW5A#`yN>=cy14JSvNOT>PWkCyj%34PcHLQy!ry z`W5>=J3L@*gH4KsEM%p2A%iY4fPeERj6#BZMhMjC)BUh~F|Dz~>cdpUhKeSYBRJl& zX)d{D_5o@JP8Lfal)J-qyx%Cgi(`bksVFbIv&l=_wBS41skch!2v@tUD(UeV^yK&+ zuanNq;t~67PjS@N-)l&F+{uBiSvMnesZIW2oSXISk8{s{%oItS0og@(o^g#R@|s6-pSV~eebxqnb^Yc~;QB<3zwJvfWHrJ855n)%IO zvd>lV7A&fM$M zcX}>iwfK7MPr|F}Km8a9iow}o-7DLbUFKSyW3Apqd}qz*duf8g+>O_xzgJ$Z+zL7k zH0m@35B{2)5u%eHRrN$|*x%Rni$kP-ml<8EeC~8d%Z+Yjea8mW(_cTbF`Vq2EMlCoiHo;KrE~>U*J>XgWAAk_s`oa?|)j;u9pv& z+@=xa<%8{cU1yL`7H>+B;A}ArtQl_aDL})i854Yf}j; zyJj;l6?Zh%>y>p;R{c1!)}{}&K6F9z^Gu`FwIww8n2S)q`P3eXS{@W*aTOu6Hq5ts z?WkKx%u8F;>;w-jFeoUkw=_{am~lVOZU6;R=Dj)9$-mER+ICM2wV|ag9^Z5$LEvI$ zLy~b_f|xdsitV{a!(rN5Ln^GY9{T9?dx6fX>^VxyiyY9ol$Nimk?jqaWsE#Id8sz zHXO}*=XIM8ge4mr_jEBq{{Cw9hcrtq!Gua-W)SMkax?r@E$1MyiYhos}Wo7)3 zql%dIyQj=Vg+9c_dHC!9V4hfU4o(SEp~S6DB(0(6qav-KU6Q&xmx`sm#S6ILI^l{< z_TR5k{00F78t}=~x{7-}^OE?(zpUi+TNRB~1;P0l>IR0Z$$L*NOv4B^k#F4piTHH% zK8VA^Fq^$Np|!I83ACC`byMjI7a4sRcY3#RwM% zjgsWR)YE1M6bLw`Cb^xPJleX(?zREF@6RSDdsSZfrUY)U*kc0&|Fk&WkGgkeD5R=|+T-H+sJ7n6Z6sTdxeF57&VwGAEH{_8(;E9t_|KC}d1*rT zBmb(s5r_-o&#_CgEwHnRFnO)0)3nb@C$a}3O11I|Rf}|~r>d(Gudci{@-Ig3_UATN z`rcMMG3Ab@j{j6tpQr=%503GYS+;&pnuNV*NWw*ZxM;(1{`G?JLF3^YTynnY1us%wJnCVV;sN2LpKy%*#o^?Xt&hJ?PrM72 zxT-a=y)Kt!ir!8uLa00|5Nvi^>v}Hx&Mqs`#$|H`j{g)MCjt}9tm{P$V@sR;KTKpC zaZmj{y0p~gM^A{?YhWj*mq960+0Gjm&ukxm4|^Ti@Mdv+{euFVD#t5MH>>MoOpGA5v_#r?zpAH3uNk;{8^<0xq+bcA1#o46XU)`c} zAAVE)OR3Dd20t3yTRQE%MXbT7AU#$@Sna6>lyBsyWHbGTb_qeC0aPDe51@ihMUtBQ z_qoXYzdk<35Dt)LI<1iWM-zY=abk=RK!Hv%aRe;&l=V9m8wP^ZDVjcI6bQQTDMXZ2 zef;CS_Gs6G?fqj~d`e&CpS|OAP^W9K9%KVZzn!B-^mZRR0=>+HGkAc^2{?E?@sr_4 zuZye-EY$?bh0>>KSW*3p7d@;8m+Gv}qmLT_f+WQ)gruDfI3Q6Ni-v0NQ{oZa9)qLU z@MAQ3md|T;00%09cc)PKBJ{q^pXW`a`@b90mY=(BZa38Q)&;^CL17qIcbg|HN*XFj zacQDO<*uVr#Q!&@75y(WF)J~%*Kok)PGz0=FA6sc4D!_7%H`F zv?tHwZGx{WnOAuLsx_ zhF&CC@8mO*_HgvvK>ohi`+F{ao-&4Eods&Mklj>QB|YK&jNI0;DJPw>_!?C z_SUSt7^+?p6@=8X1#A4m`s)qDZ%wCiXlI|_&XOEa`VoU{{fY-Af^BS literal 0 HcmV?d00001 diff --git a/docs/pytorch/img/c429fb827df769a542339e200e2ea20c.png b/docs/pytorch/img/c429fb827df769a542339e200e2ea20c.png new file mode 100644 index 0000000000000000000000000000000000000000..b9f3381890de3c7ef0fb4115492d91c819c98f0a GIT binary patch literal 7630 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 literal 0 HcmV?d00001 diff --git a/docs/pytorch/img/cb2138c3f800c7ca4b5ae38076d09429.png b/docs/pytorch/img/cb2138c3f800c7ca4b5ae38076d09429.png new file mode 100644 index 0000000000000000000000000000000000000000..d704b2798fd8e70dd27e555904cbefe7f67e4de8 GIT binary patch literal 6043 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 a;lSzq#+OkY1==$>L|?~H`}HMbI)9->N!cxw`Ds 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 literal 0 HcmV?d00001 diff --git a/docs/pytorch/img/f790e22ee4be05f818e52467c2f13b37.png b/docs/pytorch/img/f790e22ee4be05f818e52467c2f13b37.png new file mode 100644 index 0000000000000000000000000000000000000000..c293447730f8be1a676d75b03c6f5ab2ae1bc282 GIT binary patch literal 19026 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 literal 0 HcmV?d00001 diff --git a/docs/pytorch/img/fedaa24e2fcad876c77a2038c2d8d14d.png b/docs/pytorch/img/fedaa24e2fcad876c77a2038c2d8d14d.png new file mode 100644 index 0000000000000000000000000000000000000000..7821901c12552e69732b04c10bf28cd6ed815987 GIT binary patch literal 10271 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 r{)gm$Vdwt4