提交 421decef 编写于 作者: L lvmingfu

add linear_regression.py in tutorial_code

上级 b1c4b611
...@@ -51,6 +51,7 @@ ...@@ -51,6 +51,7 @@
| 教      称 | 文      称 | 教      别 | 内       | 教      称 | 文      称 | 教      别 | 内      
| :----------- | :----------- | :------- |:------ | :----------- | :----------- | :------- |:------
| 手写数字分类识别入门体验教程 | [quick_start.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/quick_start.ipynb) | 快速入门 | - CPU平台下从数据集到模型验证的全过程解读 <br/> - 体验教程中各功能模块的使用说明 <br/> - 数据集图形化展示 <br/> - 了解LeNet5具体结构和参数作用 <br/> - 学习使用自定义回调函数 <br/> - loss值与训练步数的变化图 <br/> - 模型精度与训练步数的变化图 <br/> - 使用模型应用到手写图片的预测与分类上 | 手写数字分类识别入门体验教程 | [quick_start.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/quick_start.ipynb) | 快速入门 | - CPU平台下从数据集到模型验证的全过程解读 <br/> - 体验教程中各功能模块的使用说明 <br/> - 数据集图形化展示 <br/> - 了解LeNet5具体结构和参数作用 <br/> - 学习使用自定义回调函数 <br/> - loss值与训练步数的变化图 <br/> - 模型精度与训练步数的变化图 <br/> - 使用模型应用到手写图片的预测与分类上
| 线性拟合 | [linear_regression.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/linear_regression.ipynb) | 快速入门 | - 了解线性拟合的算法原理<br/> - 了解在MindSpore中如何实现线性拟合的算法原理 <br/> - 学习使用MindSpore实现AI训练中的正向传播和方向传播<br/> - 可视化线性函数拟合数据的全过程。
| 加载数据集 | [loading_dataset.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/loading_dataset.ipynb) | 使用指南 | - 学习MindSpore中加载数据集的方法 <br/> - 展示加载常用数据集的方法<br/> - 展示加载MindRecord格式数据集的方法<br/> - 展示加载自定义格式数据集的方法 | 加载数据集 | [loading_dataset.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/loading_dataset.ipynb) | 使用指南 | - 学习MindSpore中加载数据集的方法 <br/> - 展示加载常用数据集的方法<br/> - 展示加载MindRecord格式数据集的方法<br/> - 展示加载自定义格式数据集的方法
| 将数据集转换为MindSpore数据格式 | [convert_dataset_to_mindspore_data_format.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/convert_dataset_to_mindspore_data_format/convert_dataset_to_mindspore_data_format.ipynb) | 使用指南 | - 展示将MNIST数据集转换为MindSpore数据格式 <br/> - 展示将CSV数据集转换为MindSpore数据格式 <br/> - 展示将CIFAR-10数据集转换为MindSpore数据格式 <br/> - 展示将CIFAR-100数据集转换为MindSpore数据格式 <br/> - 展示将ImageNet数据集转换为MindSpore数据格式 <br/> - 展示用户自定义生成MindSpore数据格式 | 将数据集转换为MindSpore数据格式 | [convert_dataset_to_mindspore_data_format.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/convert_dataset_to_mindspore_data_format/convert_dataset_to_mindspore_data_format.ipynb) | 使用指南 | - 展示将MNIST数据集转换为MindSpore数据格式 <br/> - 展示将CSV数据集转换为MindSpore数据格式 <br/> - 展示将CIFAR-10数据集转换为MindSpore数据格式 <br/> - 展示将CIFAR-100数据集转换为MindSpore数据格式 <br/> - 展示将ImageNet数据集转换为MindSpore数据格式 <br/> - 展示用户自定义生成MindSpore数据格式
| 数据处理与数据增强 | [data_loading_enhancement.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/data_loading_enhance/data_loading_enhancement.ipynb) | 使用指南 | - 学习MindSpore中数据处理和增强的方法 <br/> - 展示数据处理、增强方法的实际操作 <br/> - 对比展示数据处理前和处理后的效果<br/> - 表述在数据处理、增强后的意义 | 数据处理与数据增强 | [data_loading_enhancement.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/data_loading_enhance/data_loading_enhancement.ipynb) | 使用指南 | - 学习MindSpore中数据处理和增强的方法 <br/> - 展示数据处理、增强方法的实际操作 <br/> - 对比展示数据处理前和处理后的效果<br/> - 表述在数据处理、增强后的意义
...@@ -61,3 +62,4 @@ ...@@ -61,3 +62,4 @@
| MindInsight的模型溯源和数据溯源体验 | [mindinsight_model_lineage_and_data_lineage.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/mindinsight/mindinsight_model_lineage_and_data_lineage.ipynb) | 模型调优 | - 了解MindSpore中训练数据的采集及展示 <br/> - 学习使用SummaryRecord记录数据 <br/> - 学习使用回调函数SummaryCollector进行数据采集 <br/> - 使用MindInsight进行数据可视化 <br/> - 了解数据溯源和模型溯源的使用方法 | MindInsight的模型溯源和数据溯源体验 | [mindinsight_model_lineage_and_data_lineage.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/mindinsight/mindinsight_model_lineage_and_data_lineage.ipynb) | 模型调优 | - 了解MindSpore中训练数据的采集及展示 <br/> - 学习使用SummaryRecord记录数据 <br/> - 学习使用回调函数SummaryCollector进行数据采集 <br/> - 使用MindInsight进行数据可视化 <br/> - 了解数据溯源和模型溯源的使用方法
| 计算图和数据图可视化 | [calculate_and_datagraphic.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/mindinsight/calculate_and_datagraphic.ipynb) | 模型调优 | - 了解MindSpore中新增可视化功能 <br/> - 学习使用MindInsight可视化看板<br/> - 学习使用查看计算图可视化图的信息的方法<br/> - 学习使用查看数据图中展示的信息的方法 | 计算图和数据图可视化 | [calculate_and_datagraphic.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/mindinsight/calculate_and_datagraphic.ipynb) | 模型调优 | - 了解MindSpore中新增可视化功能 <br/> - 学习使用MindInsight可视化看板<br/> - 学习使用查看计算图可视化图的信息的方法<br/> - 学习使用查看数据图中展示的信息的方法
| 标量、直方图、图像和张量可视化 | [mindinsight_image_histogram_scalar_tensor.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/mindinsight/mindinsight_image_histogram_scalar_tensor.ipynb) | 模型调优 | - 了解完整的MindSpore深度学习及MindInsight可视化展示的过程 <br/> - 学习使用MindInsight对训练过程中标量、直方图、图像和张量信息进行可视化展示<br/> - 学习使用Summary算子记录标量、直方图、图像和张量信息<br/> - 学习单独对标量、直方图、图像和张量信息进行记录并可视化展示的方法 | 标量、直方图、图像和张量可视化 | [mindinsight_image_histogram_scalar_tensor.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/mindinsight/mindinsight_image_histogram_scalar_tensor.ipynb) | 模型调优 | - 了解完整的MindSpore深度学习及MindInsight可视化展示的过程 <br/> - 学习使用MindInsight对训练过程中标量、直方图、图像和张量信息进行可视化展示<br/> - 学习使用Summary算子记录标量、直方图、图像和张量信息<br/> - 学习单独对标量、直方图、图像和张量信息进行记录并可视化展示的方法
| 模型安全 | [model_security.ipynb](https://gitee.com/mindspore/docs/blob/master/tutorials/notebook/model_security.ipynb) | AI安全和隐私 | - 了解AI算法的安全威胁的概念和影响<br/> - 介绍MindArmour提供的模型安全防护手段<br/> - 学习如何模拟攻击训练模型<br/> - 学习针对被攻击模型进行对抗性防御
...@@ -40,6 +40,8 @@ ...@@ -40,6 +40,8 @@
4. 定义线性拟合过程的可视化函数 4. 定义线性拟合过程的可视化函数
5. 执行训练 5. 执行训练
本次样例源代码请参考:<https://gitee.com/mindspore/docs/blob/master/tutorials/tutorial_code/linear_regression.py>
## 环境准备 ## 环境准备
系统:Ubuntu18.04 系统:Ubuntu18.04
...@@ -103,6 +105,7 @@ plt.title("Eval_data") ...@@ -103,6 +105,7 @@ plt.title("Eval_data")
plt.show() plt.show()
``` ```
输出结果:
![png](./images/linear_regression_eval_datasets.png) ![png](./images/linear_regression_eval_datasets.png)
...@@ -126,6 +129,8 @@ net = nn.Dense(1,1,TruncatedNormal(0.02),TruncatedNormal(0.02)) ...@@ -126,6 +129,8 @@ 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]) print("weight:", net.weight.default_input[0][0], "bias:", net.bias.default_input[0])
``` ```
输出结果:
weight: -0.00034249047 bias: -0.019308656 weight: -0.00034249047 bias: -0.019308656
...@@ -143,6 +148,7 @@ plt.title("Eval data and net") ...@@ -143,6 +148,7 @@ plt.title("Eval data and net")
plt.show() plt.show()
``` ```
输出结果:
![png](./images/model_net_and_eval_datasets.png) ![png](./images/model_net_and_eval_datasets.png)
...@@ -351,7 +357,7 @@ def plot_model_and_datasets(weight, bias, data_x, data_y): ...@@ -351,7 +357,7 @@ def plot_model_and_datasets(weight, bias, data_x, data_y):
5. 图形展示模型函数和数据集。 5. 图形展示模型函数和数据集。
6. 清除本轮迭代的输出`display.clear_output`,起到动态可视化效果。 6. 清除本轮迭代的输出`display.clear_output`,起到动态可视化效果。
迭代完成后,输出网络模型的权重值$wb$。 迭代完成后,输出网络模型的权重值$w$和$b$。
```python ```python
...@@ -375,6 +381,9 @@ plot_model_and_datasets(net.weight.default_input, net.bias.default_input, data_x ...@@ -375,6 +381,9 @@ plot_model_and_datasets(net.weight.default_input, net.bias.default_input, data_x
print("weight:", net.weight.default_input[0][0], "bias:", net.bias.default_input[0]) print("weight:", net.weight.default_input[0][0], "bias:", net.bias.default_input[0])
``` ```
输出结果:
loss_value: 0.42879593 loss_value: 0.42879593
......
import numpy as np
import mindspore as ms
from mindspore.ops import composite as C
from mindspore.ops import operations as P
from mindspore import Tensor
from mindspore import context
from mindspore.common.initializer import TruncatedNormal
from mindspore import nn
context.set_context(mode=context.PYNATIVE_MODE, device_target="GPU")
# Generating training data sets
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)
# Define the form of loss function: 1/2 * (y - y')^2
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)
# Gradient function
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)
# Initializing model functions
net = nn.Dense(1, 1, TruncatedNormal(0.02), TruncatedNormal(0.02))
# Loss function
criterion = MyLoss()
loss_opeartion = nn.WithLossCell(net, criterion)
train_network = GradWrap(loss_opeartion)
train_network.set_train()
# Defining optimization
optim = nn.RMSProp(params=net.trainable_params(), learning_rate=0.02)
# Executive Training
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)
# Print loss value per 10 step
if i%10 == 0:
output = net(data_x)
loss_output = criterion(output, data_y)
print(loss_output.asnumpy())
# Print final weight parameters
print("weight:", net.weight.default_input[0][0], "bias:", net.bias.default_input[0])
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册