From b9215b093792998d3f980e4535348814fbd40f5b Mon Sep 17 00:00:00 2001 From: lvmingfu <630944715@qq.com> Date: Tue, 18 Aug 2020 15:09:50 +0800 Subject: [PATCH] add linear_regression.md file in quick_start --- tutorials/source_zh_cn/index.rst | 1 + .../quick_start/images/linear_regression.gif | Bin 0 -> 73509 bytes .../linear_regression_eval_datasets.png | Bin 0 -> 6278 bytes .../images/model_net_and_eval_datasets.png | Bin 0 -> 6903 bytes .../quick_start/linear_regression.md | 392 ++++++++++++++++++ 5 files changed, 393 insertions(+) create mode 100644 tutorials/source_zh_cn/quick_start/images/linear_regression.gif create mode 100644 tutorials/source_zh_cn/quick_start/images/linear_regression_eval_datasets.png create mode 100644 tutorials/source_zh_cn/quick_start/images/model_net_and_eval_datasets.png create mode 100644 tutorials/source_zh_cn/quick_start/linear_regression.md diff --git a/tutorials/source_zh_cn/index.rst b/tutorials/source_zh_cn/index.rst index 704469be34..bdbf9fe54a 100644 --- a/tutorials/source_zh_cn/index.rst +++ b/tutorials/source_zh_cn/index.rst @@ -11,6 +11,7 @@ MindSpore教程 :maxdepth: 1 :caption: 快速入门 + quick_start/linear_regression quick_start/quick_start quick_start/quick_video diff --git a/tutorials/source_zh_cn/quick_start/images/linear_regression.gif b/tutorials/source_zh_cn/quick_start/images/linear_regression.gif new file mode 100644 index 0000000000000000000000000000000000000000..41cc751e9d5d0d1205de31187bfa4e6103958795 GIT binary patch literal 73509 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¬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 IL;?Z;JIIQkFaQ7m literal 0 HcmV?d00001 diff --git a/tutorials/source_zh_cn/quick_start/images/linear_regression_eval_datasets.png b/tutorials/source_zh_cn/quick_start/images/linear_regression_eval_datasets.png new file mode 100644 index 0000000000000000000000000000000000000000..13fe0b3774b4c0e6b2b9375bc3582089f1452da7 GIT binary patch literal 6278 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 MTH7HiEU(=BFZzBu*#H0l literal 0 HcmV?d00001 diff --git a/tutorials/source_zh_cn/quick_start/images/model_net_and_eval_datasets.png b/tutorials/source_zh_cn/quick_start/images/model_net_and_eval_datasets.png new file mode 100644 index 0000000000000000000000000000000000000000..f465ac789f03ca726f18c8694c90923741e24130 GIT binary patch literal 6903 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 + +- [实现简单线性函数拟合](#实现简单线性函数拟合) + - [概述](#概述) + - [环境准备](#环境准备) + - [生成数据集](#生成数据集) + - [定义数据集生成函数](#定义数据集生成函数) + - [生成测试数据](#生成测试数据) + - [定义前向传播网络](#定义前向传播网络) + - [初始化网络模型](#初始化网络模型) + - [查看初始化的网络模型](#查看初始化的网络模型) + - [定义损失函数](#定义损失函数) + - [损失函数与网络结合](#损失函数与网络结合) + - [定义反向传播网络](#定义反向传播网络) + - [实现梯度函数](#实现梯度函数) + - [反向传播更新权重](#反向传播更新权重) + - [定义模型拟合过程可视化函数](#定义模型拟合过程可视化函数) + - [执行训练](#执行训练) + - [总结](#总结) + + + + +   + + +## 概述 + +回归问题算法通常是利用一系列属性来预测一个值,预测的值是连续的。例如给出一套房子的一些特征数据,如面积、卧室数等等来预测房价,利用最近一周的气温变化和卫星云图来预测未来的气温情况等。如果一套房子实际价格为500万元,通过回归分析的预测值为499万元,则认为这是一个比较好的回归分析。在机器学习问题中,常见的回归分析有线性回归、多项式回归、逻辑回归等。本例子介绍线性回归算法,并通过MindSpore进行线性回归AI训练体验。 + +主要流程如下: + +1. 生成数据集 +2. 定义前向传播网络 +3. 定义反向传播网络 +4. 定义线性拟合过程的可视化函数 +5. 执行训练 + +## 环境准备 + +系统:Ubuntu18.04 + +MindSpore版本:GPU + +设置MindSpore运行配置 + + +```python +from mindspore import context + +context.set_context(mode=context.PYNATIVE_MODE, device_target="GPU") +``` + +`PYNATIVE_MODE`:自定义调试模式。 + +`device_target`:设置MindSpore的训练硬件为GPU。 + +## 生成数据集 + +### 定义数据集生成函数 + +`get_data`用于生成训练数据集和测试数据集。由于拟合的是线性数据,假定要拟合的目标函数为:$y=2x+3$,那么我们需要的训练数据集应随机分布于函数周边,这里采用了$y=2x+3+noise$的方式生成,其中`noise`为遵循标准正态分布规律的随机数值。 + + +```python +import numpy as np +import mindspore as ms +from mindspore import Tensor + +def get_data(num,w=2.0, b=3.0): + np_x = np.ones([num, 1]) + np_y = np.ones([num, 1]) + for i in range(num): + x = np.random.uniform(-10.0, 10.0) + np_x[i] = x + noise = np.random.normal(0, 1) + y = x * w + b + noise + np_y[i] = y + return Tensor(np_x,ms.float32), Tensor(np_y,ms.float32) +``` + +数据生成函数将有以下两个作用。 + +1. 生成训练数据,对模型函数进行训练。 +2. 生成验证数据,在训练结束后,对模型函数进行精度验证。 + +### 生成测试数据 + +使用数据生成函数`get_data`随机生成50组验证数据,并可视化展示。 + + +```python +import matplotlib.pyplot as plt + +eval_x, eval_label = get_data(50) +x1, y1 = eval_x.asnumpy(), eval_label.asnumpy() +plt.scatter(x1, y1, color="red", s=5) +plt.title("Eval_data") +plt.show() +``` + + +![png](./images/linear_regression_eval_datasets.png) + + +## 定义前向传播网络 + +### 初始化网络模型 + +使用`nn.Dense`定义了网络模型,即为线性模型, + +$$y=wx+b\tag{1}$$ + +其中,权重值$w$对应`weight`,$b$对应`bias`,并将其打印出来。 + + +```python +from mindspore.common.initializer import TruncatedNormal +from mindspore import nn + +net = nn.Dense(1,1,TruncatedNormal(0.02),TruncatedNormal(0.02)) +print("weight:", net.weight.default_input[0][0], "bias:", net.bias.default_input[0]) +``` + + weight: -0.00034249047 bias: -0.019308656 + + +### 查看初始化的网络模型 + +我们将验证数据集和初始化的模型函数可视化。 + + +```python +x = np.arange(-10, 10, 0.1) +y = x * (net.weight.default_input[0][0].asnumpy()) + (net.bias.default_input[0].asnumpy()) +plt.scatter(x1, y1, color="red", s=5) +plt.plot(x, y, "blue") +plt.title("Eval data and net") +plt.show() +``` + + +![png](./images/model_net_and_eval_datasets.png) + + +红色的点:为之前生成的50组验证数据集。 + +蓝色的线:初始化的模型网络。 + +### 定义损失函数 + +我们的网络模型表达式为: + +$$h(x)=wx+b\tag{2}$$ + +一般地,数学上对线性回归模型采用均方差的方式来判断模型是否拟合得很好,即均方差的值$J(w)$值越小,函数模型便拟合得越好,验证数据代入后,预测得到的y值就越准确。公式2对应m个数据的均方差公式为: + +$$J(w)=\frac{1}{m}\sum_{i=1}^m(h(x_i)-y^{(i)})^2\tag{3}$$ + +为了方便后续的计算,我们采用0.5倍的均方差的表达式来进行计算,均方差值整体缩小至0.5倍的计算方式对判断模型拟合的好坏没有影响。 + +$$J(w)=\frac{1}{2m}\sum_{i=1}^m(h(x_i)-y^{(i)})^2\tag{4}$$ + +公式4即为网络训练中的损失函数,其中参数: + +- $J(w)$为均方差。 + +- $m$为样本数据的数量。 + +- $h(x_i)$为第$i$个数据的$x_i$值代入模型网络(公式2)后的预测值。 + +- $y^{(i)}$为第$i$个数据中的$y$值(label值)。 + +在MindSpore中定义损失函数的方法如下。 + + +```python +from mindspore.ops import operations as P + +class MyLoss(nn.loss.loss._Loss): + def __init__(self,reduction='mean'): + super().__init__(reduction) + self.square = P.Square() + def construct(self, data, label): + x = self.square(data-label) * 0.5 + return self.get_loss(x) +``` + +其中: + +- `nn.loss.loss._Loss`:是MindSpore自定义loss算子的一个基类。 + +- `P.Square`:MindSpore训练的框架中的平方算子,算子需要注册过才能在框架的计算图中使用。 + +### 损失函数与网络结合 + +接下来我们需要将loss函数的表达式和网络net关联在一起,在MindSpore中需要`nn.WithLossCell`,实现方法如下: + + +```python +criterion = MyLoss() +loss_opeartion = nn.WithLossCell(net, criterion) +``` + +其中: + +- `net`:网络模型。 + +- `criterion`:即为实例化的loss函数。 + +上述从数据代入到计算出loss值的过程为AI训练中的前向传播过程。 + +## 定义反向传播网络 + +有了损失函数后,我们如何使得损失函数最小呢?我们可以将公式1代入到损失函数公式4中展开: + +$$J(w,b)=\frac{1}{2m}\sum_{i=1}^m(wx_i+b-y^{(i)})^2\tag{5}$$ + +公式5可以将$J(w)$看作为凹函数,对权重值$w$微分可求得: + +$$\frac{\partial{J(w)}}{\partial{w}}=\frac{1}{m}\sum_{i=1}^mx_i(wx_i+b-y^{(i)})\tag{6}$$ + + +由凹函数的特性可以知道,当公式6等于0时,损失函数有最小值: + +$$\sum_{i=1}^mx_i(wx_i+b-y^{(i)})=0\tag{7}$$ + +假设有一个$w_{min}$使得公式7成立。我们如何将初始的权重$w_{s}$逐步的变成$w_{min}$,在这里采取迭代法,也就是梯度下降方法 + +当权重$w_{s}w_{min}$,权重值需要左移即权重值变小接近$w_{min}$,才能使得损失函数逐步的变小,由凹函数的性质可知,在$w_{s}$处的导数为正(损失函数在$w_{min}$右边单调上升),公式8的值为正。其权重的更新公式为: + +$$w_{ud}=w_{s}-\alpha\frac{\partial{J(w_{s})}}{\partial{w}}\tag{10}$$ + + +当$w_{s}=w_{min}$时,到$\frac{\partial{J(w_{s})}}{\partial{w}}$=0,即梯度消失,其表达式也可写为公式9的样式。 + +在考虑了全区间的情况后,可以得出权重$w$的更新公式即为: + +$$w_{ud}=w_{s}-\alpha\frac{\partial{J(w_{s})}}{\partial{w}}\tag{11}$$ + +当权重$w$在更新的过程中假如临近$w_{min}$在增加或者减少一个$\Delta{w}$,从左边或者右边越过了$w_{min}$,公式10都会使权重往反的方向移动,那么最终$w_{s}$的值会在$w_{min}$附近来回迭代,在实际训练中我们也是这样采用迭代的方式取得最优权重$w$,使得损失函数无限逼近局部最小值。 + +同理:对于公式5中的另一个权重$b$容易得出其更新公式为: + +$$b_{ud}=b_{s}-\alpha\frac{\partial{J(b_{s})}}{\partial{b}}\tag{12}$$ + + +当所有的权重更新完成后,将新的权重赋值给初始权重:即$w_{s}$=$w_{ud}$,$b_{s}$=$b_{ud}$。将新的初始权重传递回到模型函数中,这样就完成了反向传播的过程。 + +> 当遇到多项式的回归模型时,上述梯度方法也适用,由于权重数量的增加,需要将权重的名称更新为$w_0,w_1,w_2,...,w_n$,引入矩阵的表达方式,公式将会更加简洁,这里就不多介绍了。 + +### 实现梯度函数 + +在MindSpore中的所有要编入计算图的类都需要继承`nn.Cell`算子。MindSpore的梯度计算函数采用如下方式。 + + +```python +from mindspore.ops import composite as C + +class GradWrap(nn.Cell): + """ GradWrap definition """ + def __init__(self, network): + super().__init__(auto_prefix=False) + self.network = network + self.weights = ms.ParameterTuple(filter(lambda x: x.requires_grad, + network.get_parameters())) + + def construct(self, data, label): + weights = self.weights + return C.GradOperation('get_by_list', get_by_list=True) \ + (self.network, weights)(data, label) + +``` + +上述代码中`GradWrap`实现的是对各个权重的微分$\frac{\partial{J(w)}}{\partial{w}}$,其展开式子参考公式6。 + +### 反向传播更新权重 + +`nn.RMSProp`为完成权重更新的函数,更新方式大致为公式10,但是考虑的因素更多,具体信息请参考[官网说明](www.mindspore.cn/api/zh-CN/master/api/python/mindspore/mindspore.nn.html?highlight=rmsprop#mindspore.nn.RMSProp)。 + + +```python +train_network = GradWrap(loss_opeartion) +train_network.set_train() +optim = nn.RMSProp(params=net.trainable_params(),learning_rate=0.02) +``` + +通过以上操作,我们就完成了前向传播网络和反向传播网络的定义,接下来可以加载训练数据进行线性拟合了。 + +## 定义模型拟合过程可视化函数 + +定义一个可视化函数`plot_model_and_datasets`,将模型函数和验证数据集打印出来,观察其变化。 + + +```python +import time + +def plot_model_and_datasets(weight, bias, data_x, data_y): + x = np.arange(-10, 10, 0.1) + y = x * ((weight[0][0]).asnumpy()) + ((bias[0]).asnumpy()) + plt.scatter(x1,y1,color="red",s=5) + plt.scatter(data_x.asnumpy(), data_y.asnumpy(), color="black", s=5) + plt.plot(x, y, "blue") + plt.axis([-11, 11, -20, 25]) + plt.show() + time.sleep(0.02) +``` + +上述函数的参数: + +- `weight`:模型函数的权重,即$w$。 + +- `bias`:模型函数的权重,即$b$。 + +- `data_x`:训练数据的$x$值。 + +- `data_y`:训练数据的$y$值。 + +> 可视化过程中,红色的点是验证数据集,黑色的点是单个batch的训练数据,蓝色的线条是正在训练的回归模型。 + +## 执行训练 + +其训练过程如下: + +1. 设置训练的迭代次数`step_size`。 +2. 设置单次迭代的训练数据量`batch_size`。 +3. 正向传播训练`grads`。 +4. 反向传播训练`optim`。 +5. 图形展示模型函数和数据集。 +6. 清除本轮迭代的输出`display.clear_output`,起到动态可视化效果。 + +迭代完成后,输出网络模型的权重值$w和b$。 + + +```python +from IPython import display + +step_size = 200 +batch_size = 16 + +for i in range(step_size): + data_x,data_y = get_data(batch_size) + grads = train_network(data_x,data_y) + optim(grads) + plot_model_and_datasets(net.weight.default_input, + net.bias.default_input, data_x, data_y) + display.clear_output(wait=True) + +output = net(eval_x) +loss_output = criterion(output, eval_label) +print("loss_value:", loss_output.asnumpy()) +plot_model_and_datasets(net.weight.default_input, net.bias.default_input, data_x,data_y) +print("weight:", net.weight.default_input[0][0], "bias:", net.bias.default_input[0]) +``` + + loss_value: 0.42879593 + + + +![gif](./images/linear_regression.gif) + + + weight: 1.9990227 bias: 2.9115517 + + +可以看到最终得到的线性拟合的权重值非常接近目标函数权重weight=2、bias=3。 + +## 总结 + +本次体验我们了解了线性拟合的算法原理,并在MindSpore框架下实现了相应的算法定义,了解了线性拟合这类的线性回归模型在MindSpore中的训练过程,并最终拟合出了一条接近目标函数的模型函数。另外有兴趣的可以调整数据集的生成区间从(-10,10)扩展到(-100,100),看看权重值是否更接近目标函数;调整学习率大小,看看拟合的效率是否有变化;当然也可以探索如何使用MindSpore拟合$f(x)=ax^2+bx+c$这类的二次函数或者更高阶的函数。 -- Gitee