From b2da5e81cc425c110c3a4318527d325f3f2ff7f4 Mon Sep 17 00:00:00 2001 From: zhangyi Date: Thu, 24 Mar 2022 14:32:51 +0800 Subject: [PATCH] Change new branch --- tutorials/basic/Makefile | 20 - tutorials/basic/requirements.txt | 10 - tutorials/basic/source_en/advanced/test2.md | 3 - tutorials/basic/source_en/beginner/test1.md | 3 - tutorials/basic/source_en/conf.py | 90 --- tutorials/basic/source_en/index.rst | 21 - .../basic/source_zh_cn/advanced/test2.md | 3 - .../basic/source_zh_cn/beginner/test1.md | 3 - tutorials/basic/source_zh_cn/conf.py | 94 --- tutorials/basic/source_zh_cn/index.rst | 23 - tutorials/source_en/autograd.md | 195 ----- tutorials/source_en/beginner/autograd.md | 220 ++++++ tutorials/source_en/beginner/dataset.md | 174 +++++ .../beginner/images/introduction2.png | Bin 0 -> 192902 bytes .../beginner/images/introduction4.png | Bin 0 -> 174072 bytes .../source_en/beginner/introduction.ipynb | 142 ++++ tutorials/source_en/{ => beginner}/model.md | 133 +++- .../source_en/{ => beginner}/quick_start.md | 2 +- .../save_load.md} | 204 ++--- tutorials/source_en/beginner/tensor.ipynb | 695 ++++++++++++++++++ tutorials/source_en/beginner/train.md | 132 ++++ tutorials/source_en/dataset.md | 252 ------- tutorials/source_en/images/introduction2.png | Bin 44652 -> 0 bytes tutorials/source_en/images/introduction3.png | Bin 16915 -> 0 bytes tutorials/source_en/images/output_13_0.PNG | Bin 5219 -> 0 bytes tutorials/source_en/images/output_17_0.PNG | Bin 18777 -> 0 bytes tutorials/source_en/index.rst | 223 +----- tutorials/source_en/inference.md | 433 ----------- tutorials/source_en/introduction.md | 71 -- tutorials/source_en/linear_regression.ipynb | 528 ------------- tutorials/source_en/optimization.md | 186 ----- tutorials/source_en/tensor.md | 230 ------ tutorials/source_zh_cn/index.rst | 1 - 33 files changed, 1583 insertions(+), 2508 deletions(-) delete mode 100644 tutorials/basic/Makefile delete mode 100644 tutorials/basic/requirements.txt delete mode 100644 tutorials/basic/source_en/advanced/test2.md delete mode 100644 tutorials/basic/source_en/beginner/test1.md delete mode 100644 tutorials/basic/source_en/conf.py delete mode 100644 tutorials/basic/source_en/index.rst delete mode 100644 tutorials/basic/source_zh_cn/advanced/test2.md delete mode 100644 tutorials/basic/source_zh_cn/beginner/test1.md delete mode 100644 tutorials/basic/source_zh_cn/conf.py delete mode 100644 tutorials/basic/source_zh_cn/index.rst delete mode 100644 tutorials/source_en/autograd.md create mode 100644 tutorials/source_en/beginner/autograd.md create mode 100644 tutorials/source_en/beginner/dataset.md create mode 100644 tutorials/source_en/beginner/images/introduction2.png create mode 100644 tutorials/source_en/beginner/images/introduction4.png create mode 100644 tutorials/source_en/beginner/introduction.ipynb rename tutorials/source_en/{ => beginner}/model.md (30%) rename tutorials/source_en/{ => beginner}/quick_start.md (98%) rename tutorials/source_en/{save_load_model.md => beginner/save_load.md} (30%) create mode 100644 tutorials/source_en/beginner/tensor.ipynb create mode 100644 tutorials/source_en/beginner/train.md delete mode 100644 tutorials/source_en/dataset.md delete mode 100644 tutorials/source_en/images/introduction2.png delete mode 100644 tutorials/source_en/images/introduction3.png delete mode 100644 tutorials/source_en/images/output_13_0.PNG delete mode 100644 tutorials/source_en/images/output_17_0.PNG delete mode 100644 tutorials/source_en/inference.md delete mode 100644 tutorials/source_en/introduction.md delete mode 100644 tutorials/source_en/linear_regression.ipynb delete mode 100644 tutorials/source_en/optimization.md delete mode 100644 tutorials/source_en/tensor.md diff --git a/tutorials/basic/Makefile b/tutorials/basic/Makefile deleted file mode 100644 index 1eff895270..0000000000 --- a/tutorials/basic/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line, and also -# from the environment for the first two. -SPHINXOPTS ?= -SPHINXBUILD ?= sphinx-build -SOURCEDIR = source_zh_cn -BUILDDIR = build_zh_cn - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/tutorials/basic/requirements.txt b/tutorials/basic/requirements.txt deleted file mode 100644 index 49a77fdec3..0000000000 --- a/tutorials/basic/requirements.txt +++ /dev/null @@ -1,10 +0,0 @@ -sphinx >= 2.2.1, <= 2.4.4 -docutils == 0.16 -myst_parser == 0.14.0 -sphinx-markdown-tables -sphinx_rtd_theme == 0.5.2 -numpy -nbsphinx -IPython -ipykernel -jieba diff --git a/tutorials/basic/source_en/advanced/test2.md b/tutorials/basic/source_en/advanced/test2.md deleted file mode 100644 index f9ccad0a13..0000000000 --- a/tutorials/basic/source_en/advanced/test2.md +++ /dev/null @@ -1,3 +0,0 @@ -# Test2 - -Coming soon. \ No newline at end of file diff --git a/tutorials/basic/source_en/beginner/test1.md b/tutorials/basic/source_en/beginner/test1.md deleted file mode 100644 index cab9dc1609..0000000000 --- a/tutorials/basic/source_en/beginner/test1.md +++ /dev/null @@ -1,3 +0,0 @@ -# Test1 - -Coming soon. \ No newline at end of file diff --git a/tutorials/basic/source_en/conf.py b/tutorials/basic/source_en/conf.py deleted file mode 100644 index 2747c54a25..0000000000 --- a/tutorials/basic/source_en/conf.py +++ /dev/null @@ -1,90 +0,0 @@ -# Configuration file for the Sphinx documentation builder. -# -# This file only contains a selection of the most common options. For a full -# list see the documentation: -# https://www.sphinx-doc.org/en/master/usage/configuration.html - -# -- Path setup -------------------------------------------------------------- - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# -import os -import shutil -import IPython -import re -import sys - -# -- Project information ----------------------------------------------------- - -project = 'MindSpore' -copyright = '2022, MindSpore' -author = 'MindSpore' - -# The full version, including alpha/beta/rc tags -release = 'master' - - -# -- General configuration --------------------------------------------------- - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - 'sphinx_markdown_tables', - 'myst_parser', - 'nbsphinx', - 'sphinx.ext.mathjax', - 'IPython.sphinxext.ipython_console_highlighting' -] - -source_suffix = { - '.rst': 'restructuredtext', - '.md': 'markdown', -} - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This pattern also affects html_static_path and html_extra_path. -exclude_patterns = [] - -highlight_language = 'python' - -pygments_style = 'sphinx' - -# -- Options for HTML output ------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# -html_theme = 'sphinx_rtd_theme' -#modify layout.html for sphinx_rtd_theme. -import sphinx_rtd_theme -layout_target = os.path.join(os.path.dirname(sphinx_rtd_theme.__file__), 'layout.html') -layout_src = '../../../resource/_static/layout.html' -if os.path.exists(layout_target): - os.remove(layout_target) -shutil.copy(layout_src, layout_target) - -html_search_language = 'en' - -html_static_path = ['_static'] - -sys.path.append(os.path.abspath('../../../resource/sphinx_ext')) -import anchor_mod -import nbsphinx_mod - - -sys.path.append(os.path.abspath('../../../resource/search')) -import search_code - -sys.path.append(os.path.abspath('../../../resource/custom_directives')) -from custom_directives import IncludeCodeDirective - -def setup(app): - app.add_directive('includecode', IncludeCodeDirective) - diff --git a/tutorials/basic/source_en/index.rst b/tutorials/basic/source_en/index.rst deleted file mode 100644 index 2d1091764c..0000000000 --- a/tutorials/basic/source_en/index.rst +++ /dev/null @@ -1,21 +0,0 @@ -.. MindSpore documentation master file, created by - sphinx-quickstart on Thu Mar 24 11:00:00 2022. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -For Beginners -========================= - -.. toctree:: - :glob: - :maxdepth: 1 - :caption: Beginner - - beginner/test1 - -.. toctree:: - :glob: - :maxdepth: 1 - :caption: Advanced - - advanced/test2 diff --git a/tutorials/basic/source_zh_cn/advanced/test2.md b/tutorials/basic/source_zh_cn/advanced/test2.md deleted file mode 100644 index 752e358048..0000000000 --- a/tutorials/basic/source_zh_cn/advanced/test2.md +++ /dev/null @@ -1,3 +0,0 @@ -# 测试2 - -即将更新。 \ No newline at end of file diff --git a/tutorials/basic/source_zh_cn/beginner/test1.md b/tutorials/basic/source_zh_cn/beginner/test1.md deleted file mode 100644 index dda766ca63..0000000000 --- a/tutorials/basic/source_zh_cn/beginner/test1.md +++ /dev/null @@ -1,3 +0,0 @@ -# 测试1 - -即将更新。 \ No newline at end of file diff --git a/tutorials/basic/source_zh_cn/conf.py b/tutorials/basic/source_zh_cn/conf.py deleted file mode 100644 index a7529d398a..0000000000 --- a/tutorials/basic/source_zh_cn/conf.py +++ /dev/null @@ -1,94 +0,0 @@ -# Configuration file for the Sphinx documentation builder. -# -# This file only contains a selection of the most common options. For a full -# list see the documentation: -# https://www.sphinx-doc.org/en/master/usage/configuration.html - -# -- Path setup -------------------------------------------------------------- - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# -import os -import shutil -import IPython -import re -import sys - -# -- Project information ----------------------------------------------------- - -project = 'MindSpore' -copyright = '2022, MindSpore' -author = 'MindSpore' - -# The full version, including alpha/beta/rc tags -release = 'master' - - -# -- General configuration --------------------------------------------------- - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - 'sphinx_markdown_tables', - 'myst_parser', - 'nbsphinx', - 'sphinx.ext.mathjax', - 'IPython.sphinxext.ipython_console_highlighting' -] - -source_suffix = { - '.rst': 'restructuredtext', - '.md': 'markdown', -} - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This pattern also affects html_static_path and html_extra_path. -exclude_patterns = [] - -highlight_language = 'python' - -pygments_style = 'sphinx' - -myst_update_mathjax = False - -# -- Options for HTML output ------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# -html_theme = 'sphinx_rtd_theme' -#modify layout.html for sphinx_rtd_theme. -import sphinx_rtd_theme -layout_target = os.path.join(os.path.dirname(sphinx_rtd_theme.__file__), 'layout.html') -layout_src = '../../../resource/_static/layout.html' -if os.path.exists(layout_target): - os.remove(layout_target) -shutil.copy(layout_src, layout_target) - -html_search_language = 'zh' - -html_search_options = {'dict': '../../resource/jieba.txt'} - -html_static_path = ['_static'] - -sys.path.append(os.path.abspath('../../../resource/sphinx_ext')) -import anchor_mod -import nbsphinx_mod - - -sys.path.append(os.path.abspath('../../../resource/search')) -import search_code - -sys.path.append(os.path.abspath('../../../resource/custom_directives')) -from custom_directives import IncludeCodeDirective - -def setup(app): - app.add_directive('includecode', IncludeCodeDirective) - diff --git a/tutorials/basic/source_zh_cn/index.rst b/tutorials/basic/source_zh_cn/index.rst deleted file mode 100644 index fcf3e79e49..0000000000 --- a/tutorials/basic/source_zh_cn/index.rst +++ /dev/null @@ -1,23 +0,0 @@ -.. MindSpore documentation master file, created by - sphinx-quickstart on Thu Mar 24 11:00:00 2022. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -面向新手 -===================== - -.. toctree:: - :glob: - :maxdepth: 1 - :caption: 初级 - - beginner/test1 - -.. toctree:: - :glob: - :maxdepth: 1 - :caption: 进阶 - - advanced/test2 - - diff --git a/tutorials/source_en/autograd.md b/tutorials/source_en/autograd.md deleted file mode 100644 index cf06525661..0000000000 --- a/tutorials/source_en/autograd.md +++ /dev/null @@ -1,195 +0,0 @@ -# Automatic Differentiation - -`Ascend` `GPU` `CPU` `Beginner` `Model Development` - - - -Automatic differentiation is commonly used when implementing machine learning algorithms such as backpropagation for training neural networks. By using automatic differentiation, multi-layer composite functions could be divided into several simple computational steps, thereby helping users avoid implementing complex derivation codes. As a result, automatic differentiation enables ease of use of MindSpore. - -The first-order derivative method of MindSpore is `mindspore.ops.GradOperation (get_all=False, get_by_list=False, sens_param=False)`. When `get_all` is set to `False`, the first input derivative is computed. When `get_all` is set to `True`, all input derivatives are computed. When `get_by_list` is set to `False`, weight derivatives are not computed. When `get_by_list` is set to `True`, the weight derivative is computed. `sens_param` scales the output value of the network to change the final gradient. The following uses the MatMul operator derivative for in-depth analysis. - -Import the required modules and APIs: - -```python -import numpy as np -import mindspore.nn as nn -import mindspore.ops as ops -from mindspore import Tensor -from mindspore import ParameterTuple, Parameter -from mindspore import dtype as mstype -``` - -## First-order Derivative of the Input - -To compute the input derivative, you need to define a network requiring a derivative. The following uses a network $f(x,y)=z *x* y$ formed by the MatMul operator as an example. - -The network structure is as follows: - -```python -class Net(nn.Cell): - def __init__(self): - super(Net, self).__init__() - self.matmul = ops.MatMul() - self.z = Parameter(Tensor(np.array([1.0], np.float32)), name='z') - - def construct(self, x, y): - x = x * self.z - out = self.matmul(x, y) - return out -``` - -Define the network requiring the derivative. In the `__init__` function, define the `self.net` and `ops.GradOperation` networks. In the `construct` function, compute the derivative of `self.net`. - -The network structure is as follows: - -```python -class GradNetWrtX(nn.Cell): - def __init__(self, net): - super(GradNetWrtX, self).__init__() - self.net = net - self.grad_op = ops.GradOperation() - - def construct(self, x, y): - gradient_function = self.grad_op(self.net) - return gradient_function(x, y) -``` - -Define the input and display the output: - -```python -x = Tensor([[0.8, 0.6, 0.2], [1.8, 1.3, 1.1]], dtype=mstype.float32) -y = Tensor([[0.11, 3.3, 1.1], [1.1, 0.2, 1.4], [1.1, 2.2, 0.3]], dtype=mstype.float32) -output = GradNetWrtX(Net())(x, y) -print(output) -``` - -```text - [[4.5099998 2.7 3.6000001] - [4.5099998 2.7 3.6000001]] -``` - -If the derivatives of the `x` and `y` inputs are considered, you only need to set `self.grad_op = GradOperation(get_all=True)` in `GradNetWrtX`. - -## First-order Derivative of the Weight - -To compute weight derivatives, you need to set `get_by_list` in `ops.GradOperation` to `True`. - -The `GradNetWrtX` structure is as follows: - -```python -class GradNetWrtX(nn.Cell): - def __init__(self, net): - super(GradNetWrtX, self).__init__() - self.net = net - self.params = ParameterTuple(net.trainable_params()) - self.grad_op = ops.GradOperation(get_by_list=True) - - def construct(self, x, y): - gradient_function = self.grad_op(self.net, self.params) - return gradient_function(x, y) -``` - -Run and display the output: - -```python -output = GradNetWrtX(Net())(x, y) -print(output) -``` - -```text -(Tensor(shape=[1], dtype=Float32, value= [ 2.15359993e+01]),) -``` - -If computation of certain weight derivatives is not required, set `requirements_grad` to `False` when defining the network requiring derivatives. - -```Python -self.z = Parameter(Tensor(np.array([1.0], np.float32)), name='z', requires_grad=False) -``` - -## Gradient Value Scaling - -You can use the `sens_param` parameter to scale the output value of the network to change the final gradient. Set `sens_param` in `ops.GradOperation` to `True` and determine the scaling index. The dimension must be the same as the output dimension. - -The scaling index `self.grad_wrt_output` may be in the following format: - -```python -self.grad_wrt_output = Tensor([[s1, s2, s3], [s4, s5, s6]]) -``` - -The `GradNetWrtX` structure is as follows: - -```python -class GradNetWrtX(nn.Cell): - def __init__(self, net): - super(GradNetWrtX, self).__init__() - self.net = net - self.grad_op = ops.GradOperation(sens_param=True) - self.grad_wrt_output = Tensor([[0.1, 0.6, 0.2], [0.8, 1.3, 1.1]], dtype=mstype.float32) - - def construct(self, x, y): - gradient_function = self.grad_op(self.net) - return gradient_function(x, y, self.grad_wrt_output) - -output = GradNetWrtX(Net())(x, y) -print(output) -``` - -```text -[[2.211 0.51 1.49 ] - [5.588 2.68 4.07 ]] -``` - -## Stop Gradient - -We can use `stop_gradient` to disable calculation of gradient for certain operators. For example: - -```python -import numpy as np -import mindspore.nn as nn -import mindspore.ops as ops -from mindspore import Tensor -from mindspore import ParameterTuple, Parameter -from mindspore import dtype as mstype -from mindspore.ops import stop_gradient - -class Net(nn.Cell): - def __init__(self): - super(Net, self).__init__() - self.matmul = ops.MatMul() - - def construct(self, x, y): - out1 = self.matmul(x, y) - out2 = self.matmul(x, y) - out2 = stop_gradient(out2) - out = out1 + out2 - return out - -class GradNetWrtX(nn.Cell): - def __init__(self, net): - super(GradNetWrtX, self).__init__() - self.net = net - self.grad_op = ops.GradOperation() - - def construct(self, x, y): - gradient_function = self.grad_op(self.net) - return gradient_function(x, y) - -x = Tensor([[0.8, 0.6, 0.2], [1.8, 1.3, 1.1]], dtype=mstype.float32) -y = Tensor([[0.11, 3.3, 1.1], [1.1, 0.2, 1.4], [1.1, 2.2, 0.3]], dtype=mstype.float32) -output = GradNetWrtX(Net())(x, y) -print(output) -``` - -```text - [[4.5, 2.7, 3.6], - [4.5, 2.7, 3.6]] -``` - -Here, we set `stop_gradient` to `out2`, so this operator does not have any contribution to gradient. If we delete `out2 = stop_gradient(out2)`, the result is: - -```text - [[9.0, 5.4, 7.2], - [9.0, 5.4, 7.2]] -``` - -After we do not set `stop_gradient` to `out2`, it will make the same contribution to gradient as `out1`. So we can see that each result has doubled. \ No newline at end of file diff --git a/tutorials/source_en/beginner/autograd.md b/tutorials/source_en/beginner/autograd.md new file mode 100644 index 0000000000..6fead1c1c0 --- /dev/null +++ b/tutorials/source_en/beginner/autograd.md @@ -0,0 +1,220 @@ +# Automatic Differentiation + + + +Automatic differentiation is able to calculate the derivative value of a derivative function at a certain point, which is a generalization of backpropagation algorithms. The main problem solved by automatic differentiation is to decompose a complex mathematical operation into a series of simple basic operations, which shields the user from a large number of details and processes of differentiation, which greatly reduces the threshold for the use of the framework. + +MindSpore uses `ops.GradOperation` to calculate a first-order derivative, and the attributes of the first-order derivative are as the following: + +- `get_all`:Whether to derive the input parameters, the default value is False. +- `get_by_list`:Whether to derive the weight parameters, the default value is False. +- `sens_param`:Whether to scale the output value of the network to change the final gradient, the default value is False. + +This chapter uses `ops.GradOperation` in MindSpore to find first-order derivatives of the function $f(x)=wx+b$. + +## First-order Derivative of the Input + +The formula needs to be defined before the input can be derived: +$$ +f(x)=wx+b \tag {1} +$$ +The example code below is an expression of Equation (1), and since MindSpore is functionally programmed, all expressions of computational formulas are represented as functions. + +```python +import numpy as np +import mindspore.nn as nn +from mindspore import Parameter, Tensor + +class Net(nn.Cell): + def __init__(self): + super(Net, self).__init__() + self.w = Parameter(np.array([6.0]), name='w') + self.b = Parameter(np.array([1.0]), name='b') + + def construct(self, x): + f = self.w * x + self.b + return f +``` + +Define the derivative class `GradNet`. In the `__init__` function, define the `self.net` and `ops.GradOperation` networks. In the `construct` function, compute the derivative of `self.net`. Its corresponding MindSpore internally produces the following formula (2): +$$ +f^{'}(x)=w\tag {2} +$$ + +```python +from mindspore import dtype as mstype +import mindspore.ops as ops + +class GradNet(nn.Cell): + def __init__(self, net): + super(GradNet, self).__init__() + self.net = net + self.grad_op = ops.GradOperation() + + def construct(self, x): + gradient_function = self.grad_op(self.net) + return gradient_function(x) +``` + +At last, define the weight parameter as w and a first-order derivative is found for the input parameter x in the input formula (1). From the running result, the input in formula (1) is 6, that is: +$$ +f(x)=wx+b=6*x+1 \tag {3} +$$ + To derive the above equation, there is: +$$ +f^{'}(x)=w=6 \tag {4} +$$ + +```python +x = Tensor([100], dtype=mstype.float32) +output = GradNet(Net())(x) + +print(output) +``` + +```text +[6.] +``` + +MindSpore calculates the first derivative method `ops.GradOperation (get_all=False, get_by_lsit=False, sens_param=False)`, where when `get_all` is `False`, only the first input is evaluated, and when `True` is set, all inputs are evaluated. + +## First-order Derivative of the Weight + +To compute weight derivatives, you need to set `get_by_list` in `ops.GradOperation` to `True`. + +```python +from mindspore import ParameterTuple + +class GradNet(nn.Cell): + def __init__(self, net): + super(GradNet, self).__init__() + self.net = net + self.params = ParameterTuple(net.trainable_params()) + self.grad_op = ops.GradOperation(get_by_list=True) # Set the first-order derivative of the weight parameters + + def construct(self, x): + gradient_function = self.grad_op(self.net, self.params) + return gradient_function(x) +``` + +Next, derive the function: + +```python +# Perform a derivative calculation on the function +x = Tensor([100], dtype=mstype.float32) +fx = GradNet(Net())(x) + +# Print the results +print(fx) +print(f"wgrad: {fx[0]}\nbgrad: {fx[1]}") +``` + +```text +(Tensor(shape=[1], dtype=Float32, value= [ 6.00000000e+00]), Tensor(shape=[1], dtype=Float32, value= [ 1.00000000e+00])) +wgrad: [6.] +bgrad: [1.] +``` + +If computation of certain weight derivatives is not required, set `requirements_grad` to `False` when defining the network requiring derivatives. + +```Python +class Net(nn.Cell): + def __init__(self): + super(Net, self).__init__() + self.w = Parameter(Tensor(np.array([6], np.float32)), name='w') + self.b = Parameter(Tensor(np.array([1.0], np.float32)), name='b', requires_grad=False) + + def construct(self, x): + out = x * self.w + self.b + return out + +class GradNet(nn.Cell): + def __init__(self, net): + super(GradNet, self).__init__() + self.net = net + self.params = ParameterTuple(net.trainable_params()) + self.grad_op = ops.GradOperation(get_by_list=True) + + def construct(self, x): + gradient_function = self.grad_op(self.net, self.params) + return gradient_function(x) + +# Construct a derivative network +x = Tensor([5], dtype=mstype.float32) +fw = GradNet(Net())(x) + +print(fw) +``` + +```text +(Tensor(shape=[1], dtype=Float32, value= [ 5.00000000e+00]),) +``` + +## Gradient Value Scaling + +You can use the `sens_param` parameter to scale the output value of the network to change the final gradient. Set `sens_param` in `ops.GradOperation` to `True` and determine the scaling index. The dimension must be the same as the output dimension. + +```python +class GradNet(nn.Cell): + def __init__(self, net): + super(GradNet, self).__init__() + self.net = net + # Derivative operation + self.grad_op = ops.GradOperation(sens_param=True) + # Scale index + self.grad_wrt_output = Tensor([0.1], dtype=mstype.float32) + + def construct(self, x): + gradient_function = self.grad_op(self.net) + return gradient_function(x, self.grad_wrt_output) + +x = Tensor([6], dtype=mstype.float32) +output = GradNet(Net())(x) + +print(output) +``` + +```text +[0.6] +``` + +## Stopping Gradient + +We can use `stop_gradient` to disable calculation of gradient for certain operators. For example: + +```python +from mindspore.ops import stop_gradient + +class Net(nn.Cell): + def __init__(self): + super(Net, self).__init__() + self.w = Parameter(Tensor(np.array([6], np.float32)), name='w') + self.b = Parameter(Tensor(np.array([1.0], np.float32)), name='b') + + def construct(self, x): + out = x * self.w + self.b + # Stops updating the gradient, and out does not contribute to gradient calculations + out = stop_gradient(out) + return out + +class GradNet(nn.Cell): + def __init__(self, net): + super(GradNet, self).__init__() + self.net = net + self.params = ParameterTuple(net.trainable_params()) + self.grad_op = ops.GradOperation(get_by_list=True) + + def construct(self, x): + gradient_function = self.grad_op(self.net, self.params) + return gradient_function(x) + +x = Tensor([100], dtype=mstype.float32) +output = GradNet(Net())(x) + +print(f"wgrad: {output[0]}\nbgrad: {output[1]}") +``` + +```text +wgrad: [0.] +bgrad: [0.] +``` diff --git a/tutorials/source_en/beginner/dataset.md b/tutorials/source_en/beginner/dataset.md new file mode 100644 index 0000000000..14ddbba23a --- /dev/null +++ b/tutorials/source_en/beginner/dataset.md @@ -0,0 +1,174 @@ +# Data Processing + + + +Data is the foundation of deep learning, and inputting the high-quality data plays an active role in the entire deep neural network. + +[mindspore.dataset](https://www.mindspore.cn/docs/api/en/master/api_python/mindspore.dataset.html) provides a loading interface for some commonly used datasets and standard format datasets, enabling users to quickly perform data processing operations. For the image datasets, users can use `mindvision.dataset` to load and process datasets. This chapter first describes how to load and process a CIFAR-10 dataset by using the `mindvision.dataset.Cifar10` interface, and then describes how to use `mindspore.dataset.GeneratorDataset` to implement custom dataset loading. + +> `mindvision.dataset`is a dataset interface developed on the basis of `mindspore.dataset`. In addition to providing dataset loading capabilities, `mindvision.dataset` further provides dataset download capabilities, data processing, and data enhancement capabilities. + +## Data Process + +In the network training and inference process, the raw data is generally stored in a disk or database. The raw data needs to be read into the memory space through the data loading step, converted into a framework-common tensor format, and then mapped to a more easy-to-learn space through the data processing and augmentation steps. While the number of samples and generalization is increased, the data finally enters the network for calculation. + +The overall process is shown in the following figure: + +![dataset_pipeline](https://gitee.com/mindspore/docs/raw/master/tutorials/source_zh_cn/beginner/images/dataset_pipeline.png) + +### Dataset + +A dataset is a collection of samples, and a row of a dataset is a sample that contains one or more features, and may further contain a label. The dataset needs to meet certain specification requirements to make it easier to evaluate the effectiveness of the model. + +Dataset supports multiple format datasets, including MindRecord, a MindSpore self-developed data format, commonly used public image datasets and text datasets, user-defined datasets, etc. + +### Dataset Loading + +Dataset loading allows the model to be continuously acquired for training during training. Dataset provides corresponding classes for a variety of commonly used datasets to load datasets. For data files in different storage formats, Dataset also has corresponding classes for data loading. + +Dataset provides multiple uses of the sampler (Sampler), and the sampler is responsible for generating the read index sequence. The Dataset is responsible for reading the corresponding data according to the index, helping users to sample the dataset in different forms to meet the training needs, and solving problems such as the data set is too large or the sample class distribution is uneven. + +> It should be noted that the sampler is responsible for performing filter and reorder operations on the sample, not performing the Batch operation. + +### Data processing + +After the Dataset loads the data into the memory, the data is organized in a Tensor form. Tensor is also a basic data structure in data augmentation operations. + +## Loading the Dataset + +In the following example, the CIFAR-10 dataset is loaded through the `mindvision.dataset.Cifar10` interface. The CIFAR-10 dataset has a total of 60,000 32*32 color images, which are divided into 10 categories, each with 6,000 maps, and a total of 50,000 training pictures and 10,000 test pictures in the dataset. `Cifar10` interface provides CIFAR-10 dataset download and load capabilities. + +![cifar10](https://gitee.com/mindspore/docs/raw/master/tutorials/source_zh_cn/beginner/images/cifar10.jpg) + +- `path`: The location of the dataset root directory. +- `split`: Training, testing or inferencing of the dataset, optionally `train`,`test` or `infer`, `train` by default. +- `download`: Whether to download the dataset. When `ture` is set, if the dataset does not exist, you can download and extract the dataset, `False` by default. + +```python +from mindvision.dataset import Cifar10 + +# Dataset root directory +data_dir = "./datasets" + +# Download, extract and load the CIFAR-10 training dataset +dataset = Cifar10(path=data_dir, split='train', batch_size=6, resize=32, download=True) +dataset = dataset.run() +``` + +The directory structures of the CIFAR-10 dataset files are as follows: + +```text +datasets/ +├── cifar-10-batches-py +│ ├── batches.meta +│ ├── data_batch_1 +│ ├── data_batch_2 +│ ├── data_batch_3 +│ ├── data_batch_4 +│ ├── data_batch_5 +│ ├── readme.html +│ └── test_batch +└── cifar-10-python.tar.gz +``` + +## Iterating Dataset + +You can use `create_dict_iterator` interface to create a data iterator to iteratively access data. The data type of the access is `Tensor` by default, and if `output_numpy=True` is set, the data type of the access is `Numpy`. + +The following shows the corresponding access data type, and the image shapes and labels. + +```python +data = next(dataset.create_dict_iterator()) +print(f"Data type:{type(data['image'])}\nImage shape: {data['image'].shape}, Label: {data['label']}") + +data = next(dataset.create_dict_iterator(output_numpy=True)) +print(f"Data type:{type(data['image'])}\nImage shape: {data['image'].shape}, Label: {data['label']}") +``` + +```text +Data type: +Image shape: (6, 3, 32, 32), Label: [7 1 2 8 7 8] +Data type: +Image shape: (6, 3, 32, 32), Label: [8 0 0 2 6 1] +``` + +## Data Processing and Augmentation + +### Data Processing + +`mindvision.dataset.Cifar10` interface provides data processing capbilities. The data can be processed by simply setting the corresponding attributes. + +- `shuffle`: Whether to disrupt the order of the datasets, when `True` is set, the order of the datasets is disturbed, `False` by default . +- `batch_size`: The number of data contained in each group. The `batch_size=2` contains 2 data per group, and the default size of the `batch_size` value is 32. +- `repeat_num`: For the number of duplicate datasets. `repeat_num=1` is a dataset, and the default value of the `repeat_num` is 1. + +```python +import numpy as np +import matplotlib.pyplot as plt + +import mindspore.dataset.vision.c_transforms as transforms + +trans = [transforms.HWC2CHW()] +dataset = Cifar10(data_dir, batch_size=6, resize=32, repeat_num=1, shuffle=True, transform=trans) +data = dataset.run() +data = next(data.create_dict_iterator()) + +images = data["image"].asnumpy() +labels = data["label"].asnumpy() +print(f"Image shape: {images.shape}, Label: {labels}") + +plt.figure() +for i in range(1, 7): + plt.subplot(2, 3, i) + image_trans = np.transpose(images[i-1], (1, 2, 0)) + plt.title(f"{dataset.index2label[labels[i-1]]}") + plt.imshow(image_trans, interpolation="None") +plt.show() +``` + +```text +Image shape: (6, 3, 32, 32), Label: [9 3 8 9 6 8] +``` + +### Data Augmentation + +Problems such as too small amount of data or single sample scene will affect the training effect of the model, and users can expand the diversity of samples through data augmentation operations to improve the generalization ability of the model. The `mindvision.dataset.Cifar10` interface uses the default data augmentation feature, which allows users to perform data augmentation operations by setting attribute `transform` and `target_transform`. + +- `transform`: augment dataset image data. +- `target_transform`: process the dataset label data. + +This section describes data augmentation of the CIFAR-10 dataset by using operators in the `mindspore.dataset.vision .c_transforms` module. + +```python +import numpy as np +import matplotlib.pyplot as plt + +import mindspore.dataset.vision.c_transforms as transforms + +# Image augmentation +trans = [ + transforms.RandomCrop((32, 32), (4, 4, 4, 4)), # Automatic cropping of images + transforms.RandomHorizontalFlip(prob=0.5), # Flip the image randomly and horizontally + transforms.HWC2CHW(), # Convert (h, w, c) to (c, h, w) +] + +dataset = Cifar10(data_dir, batch_size=6, resize=32, transform=trans) +data = dataset.run() +data = next(data.create_dict_iterator()) +images = data["image"].asnumpy() +labels = data["label"].asnumpy() +print(f"Image shape: {images.shape}, Label: {labels}") + +plt.figure() +for i in range(1, 7): + plt.subplot(2, 3, i) + image_trans = np.transpose(images[i-1], (1, 2, 0)) + plt.title(f"{dataset.index2label[labels[i-1]]}") + plt.imshow(image_trans, interpolation="None") +plt.show() +``` + +```text +Image shape: (6, 3, 32, 32), Label: [7 6 7 4 5 3] +``` + diff --git a/tutorials/source_en/beginner/images/introduction2.png b/tutorials/source_en/beginner/images/introduction2.png new file mode 100644 index 0000000000000000000000000000000000000000..afb59aced75a3505f209794731c97973feebbf13 GIT binary patch literal 192902 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

sXP`X3e~wK=@Yp~J#<%`W=vr~;OY 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%0A{rS6eZW`3~&Fl%xJw%{m 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

Ykfk82pWqU&JGNWxZTtKeTF*6RNTM|5;kqaj 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 Qj(htm3(o4ILhM^V+p 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

qoLmCqVr+!s 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 literal 0 HcmV?d00001 diff --git a/tutorials/source_en/beginner/images/introduction4.png b/tutorials/source_en/beginner/images/introduction4.png new file mode 100644 index 0000000000000000000000000000000000000000..0f897ef607fdd55924be9f8ec8ced24b1a6ea73e GIT binary patch literal 174072 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

scqvu~DT(wo`oa>+a~;^R-S-KvkQ+(BQj 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 - +A neural network model consists of multiple data operation layers. `mindspore.nn` provides various basic network modules. The following uses LeNet-5 as an example to first describe how to build a neural network model by using `mindspore.nn` , and then describes how to build a LeNet-5 network model by using `mindvision.classification.models`. -A neural network model consists of multiple data operation layers. `mindspore.nn` provides various basic network modules. +> `mindvision.classification.models` is a network model interface developed based on `mindspore.nn`, providing some classic and commonly used network models for the convenience of users. -The following uses LeNet as an example to describe how MindSpore builds a neural network model. +## LeNet-5 model -Import the required modules and APIs: +[LeNet-5](https://ieeexplore.ieee.org/document/726791) is a typical convolutional neural network proposed by Professor Yann LeCun in 1998, which achieves 99.4% accuracy on the MNIST dataset and is the first classic in the field of CNN. The model structure is shown in the following figure: -```python -import numpy as np -import mindspore -import mindspore.nn as nn -from mindspore import Tensor -``` +![LeNet-5](https://gitee.com/mindspore/docs/raw/master/tutorials/source_zh_cn/beginner/images/lenet.png) + +According to the network structure of LeNet, there are 7 layers of LeNet removal input layer, including 3 convolutional layers, 2 sub-sampling layers, and 3 fully-connected layers. ## Defining a Model Class +In the above figure, C is used to represent the convolutional layer, S to represent the sampling layer, and F to represent the fully-connected layer. + +The input size of the picture is fixed at 32∗32. In order to get a good convolution effect, the number is required in the center of the picture, so the size at 32∗32 is actually the result of the picture at 28∗28 after filled. In addition, unlike the input picture of the three channels of the CNN network, the input of the LeNet picture is only a normalized binary image. The output of the network is a prediction probability of ten digits 0\~9, which can be understood as the probability that the input image belongs to 0\~9 digits. + The `Cell` class of MindSpore is the base class for building all networks and the basic unit of a network. When a neural network is required, you need to inherit the `Cell` class and overwrite the `__init__` and `construct` methods. ```python +import mindspore.nn as nn + class LeNet5(nn.Cell): """ Lenet network structure """ def __init__(self, num_class=10, num_channel=1): super(LeNet5, self).__init__() - # Define the required operation. + # Convolutional layer, the number of input channels is num_channel, the number of output channels is 6, and the convolutional kernel size is 5*5 self.conv1 = nn.Conv2d(num_channel, 6, 5, pad_mode='valid') + # Convolutional layer, the number of input channels is 6, the number of output channels is 16, and the convolutional kernel size is 5 * 5 self.conv2 = nn.Conv2d(6, 16, 5, pad_mode='valid') + # Fully connected layer, the number of inputs is 16*5*5, and the number of outputs is 120 self.fc1 = nn.Dense(16 * 5 * 5, 120) + # Fully-connected layer, the number of inputs is 120, and the number of outputs is 84 self.fc2 = nn.Dense(120, 84) + # Fully connected layer, the number of inputs is 84, and the number of classifications is num_class self.fc3 = nn.Dense(84, num_class) + # ReLU Activation function self.relu = nn.ReLU() + # Pooling layer self.max_pool2d = nn.MaxPool2d(kernel_size=2, stride=2) + # Multidimensional arrays are flattened into one-dimensional arrays self.flatten = nn.Flatten() def construct(self, x): @@ -55,23 +65,50 @@ class LeNet5(nn.Cell): return x ``` +Next, build the neural network model defined above and look at the structure of the network model. + +```python +model = LeNet5() + +print(model) +``` + +```text +LeNet5< + (conv1): Conv2d + (conv2): Conv2d + (fc1): Dense + (fc2): Dense + (fc3): Dense + (relu): ReLU<> + (max_pool2d): MaxPool2d + (flatten): Flatten<> + > +``` + ## Model Layers -The following describes the key member functions of the `Cell` class used in LeNet, and then describes how to use the `Cell` class to access model parameters through the instantiation network. +The following describes the key member functions of the `Cell` class used in LeNet, and then describes how to use the `Cell` class to access model parameters through the instantiation network. For more `cell` class contents, refer to [mindspore.nn interface](https://www.mindspore.cn/docs/api/en/master/api_python/mindspore.nn.html). ### nn.Conv2d Add the `nn.Conv2d` layer and add a convolution function to the network to help the neural network extract features. ```python -conv2d = nn.Conv2d(1, 6, 5, has_bias=False, weight_init='normal', pad_mode='valid') -input_x = Tensor(np.ones([1, 1, 32, 32]), mindspore.float32) +import numpy as np + +from mindspore import Tensor +from mindspore import dtype as mstype + +# The number of channels input is 1, the number of channels of output is 6, the convolutional kernel size is 5*5, and the parameters are initialized using the norm operator, and the pixels are not filled +conv2d = nn.Conv2d(1, 6, 5, has_bias=False, weight_init='normal', pad_mode='same') +input_x = Tensor(np.ones([1, 1, 32, 32]), mstype.float32) print(conv2d(input_x).shape) ``` ```text - (1, 6, 28, 28) +(8, 6, 32, 32) ``` ### nn.ReLU @@ -80,9 +117,10 @@ Add the `nn.ReLU` layer and add a non-linear activation function to the network ```python relu = nn.ReLU() -input_x = Tensor(np.array([-1, 2, -3, 2, -1]), mindspore.float16) -output = relu(input_x) +input_x = Tensor(np.array([-1, 2, -3, 2, -1]), mstype.float16) + +output = relu(input_x) print(output) ``` @@ -95,19 +133,19 @@ print(output) Initialize the `nn.MaxPool2d` layer and down-sample the 6 x 28 x 28 array to a 6 x 14 x 14 array. ```python -max_pool2d = nn.MaxPool2d(kernel_size=2, stride=2) -input_x = Tensor(np.ones([1, 6, 28, 28]), mindspore.float32) +max_pool2d = nn.MaxPool2d(kernel_size=4, stride=4) +input_x = Tensor(np.ones([1, 6, 28, 28]), mstype.float32) print(max_pool2d(input_x).shape) ``` ```text - (1, 6, 14, 14) + (1, 6, 7, 7) ``` ### nn.Flatten -Initialize the `nn.Flatten` layer and convert the 16 x 5 x 5 array into 400 consecutive arrays. +Initialize the `nn.Flatten` layer and convert the 1x16 x 5 x 5 array into 400 consecutive arrays. ```python flatten = nn.Flatten() @@ -127,7 +165,7 @@ Initialize the `nn.Dense` layer and perform linear transformation on the input m ```python dense = nn.Dense(400, 120, weight_init='normal') -input_x = Tensor(np.ones([1, 400]), mindspore.float32) +input_x = Tensor(np.ones([1, 400]), mstype.float32) output = dense(input_x) print(output.shape) @@ -139,23 +177,46 @@ print(output.shape) ## Model Parameters -The convolutional layer and fully-connected layer in the network will have weights and offsets after being instantiated, and these weight and offset parameters are optimized in subsequent training. In `nn.Cell`, the `parameters_and_names()` method is used to access all parameters. +The convolutional layer and fully-connected layer in the network will have weights and offsets after being instantiated, which has a weight parameter and a bias parameter, and these parameters are optimized in subsequent training. During training, you can use `get_parameters()` to view information such as the name, shape, data type, and whether the network layers are inversely calculated. + +```python +for m in model.get_parameters(): + print(f"layer:{m.name}, shape:{m.shape}, dtype:{m.dtype}, requeires_grad:{m.requires_grad}") +``` + +```text +layer:backbone.conv1.weight, shape:(6, 1, 5, 5), dtype:Float32, requeires_grad:True +layer:backbone.conv2.weight, shape:(16, 6, 5, 5), dtype:Float32, requeires_grad:True +layer:backbone.fc1.weight, shape:(120, 400), dtype:Float32, requeires_grad:True +layer:backbone.fc1.bias, shape:(120,), dtype:Float32, requeires_grad:True +layer:backbone.fc2.weight, shape:(84, 120), dtype:Float32, requeires_grad:True +layer:backbone.fc2.bias, shape:(84,), dtype:Float32, requeires_grad:True +layer:backbone.fc3.weight, shape:(10, 84), dtype:Float32, requeires_grad:True +layer:backbone.fc3.bias, shape:(10,), dtype:Float32, requeires_grad:True +``` + +## Quickly Build a LeNet-5 Network Model -In the example, we traverse each parameter and display the name and attribute of each layer in the network. +The above describes the use of `mindspore.nn.cell` to build a LeNet-5 network model. The network model interface has been built in `mindvision.classification.models`, and the LeNet-5 network model can be directly built using the `lenet` interface. ```python -model = LeNet5() -for m in model.parameters_and_names(): - print(m) +from mindvision.classification.models import lenet + +# num_classes represents the category of the classification, and pretrained indicates whether to train with the trained model +model = lenet(num_classes=10, pretrained=False) + +for m in model.get_parameters(): + print(f"layer:{m.name}, shape:{m.shape}, dtype:{m.dtype}, requeires_grad:{m.requires_grad}") ``` ```text -('conv1.weight', Parameter (name=conv1.weight, shape=(6, 1, 5, 5), dtype=Float32, requires_grad=True)), -('conv2.weight', Parameter (name=conv2.weight, shape=(16, 6, 5, 5), dtype=Float32, requires_grad=True)), -('fc1.weight', Parameter (name=fc1.weight, shape=(120, 400), dtype=Float32, requires_grad=True)), -('fc1.bias', Parameter (name=fc1.bias, shape=(120,), dtype=Float32, requires_grad=True)), -('fc2.weight', Parameter (name=fc2.weight, shape=(84, 120), dtype=Float32, requires_grad=True)), -('fc2.bias', Parameter (name=fc2.bias, shape=(84,), dtype=Float32, requires_grad=True)), -('fc3.weight', Parameter (name=fc3.weight, shape=(10, 84), dtype=Float32, requires_grad=True)), -('fc3.bias', Parameter (name=fc3.bias, shape=(10,), dtype=Float32, requires_grad=True)) +layer:backbone.conv1.weight, shape:(6, 1, 5, 5), dtype:Float32, requeires_grad:True +layer:backbone.conv2.weight, shape:(16, 6, 5, 5), dtype:Float32, requeires_grad:True +layer:backbone.fc1.weight, shape:(120, 400), dtype:Float32, requeires_grad:True +layer:backbone.fc1.bias, shape:(120,), dtype:Float32, requeires_grad:True +layer:backbone.fc2.weight, shape:(84, 120), dtype:Float32, requeires_grad:True +layer:backbone.fc2.bias, shape:(84,), dtype:Float32, requeires_grad:True +layer:backbone.fc3.weight, shape:(10, 84), dtype:Float32, requeires_grad:True +layer:backbone.fc3.bias, shape:(10,), dtype:Float32, requeires_grad:True ``` + diff --git a/tutorials/source_en/quick_start.md b/tutorials/source_en/beginner/quick_start.md similarity index 98% rename from tutorials/source_en/quick_start.md rename to tutorials/source_en/beginner/quick_start.md index e9d2af5941..19a5312c14 100644 --- a/tutorials/source_en/quick_start.md +++ b/tutorials/source_en/beginner/quick_start.md @@ -2,7 +2,7 @@ `Ascend` `GPU` `CPU` `Beginner` `Whole Process` - + The following describes the basic functions of MindSpore to implement common tasks in deep learning. For details, see links in each section. diff --git a/tutorials/source_en/save_load_model.md b/tutorials/source_en/beginner/save_load.md similarity index 30% rename from tutorials/source_en/save_load_model.md rename to tutorials/source_en/beginner/save_load.md index bf72874642..e4d3df1663 100644 --- a/tutorials/source_en/save_load_model.md +++ b/tutorials/source_en/beginner/save_load.md @@ -1,14 +1,68 @@ # Saving and Loading the Model -`Ascend` `GPU` `CPU` `Beginner` `Model Export` `Model Loading` + - +The content of the previous chapter mainly introduced how to adjust hyperparameters and train network models. During the process of training the network model, we actually want to save the intermediate and final results for fine-tune and subsequent model deployment and inference, and now start learning how to set hyperparameters and optimize model parameters. -In the previous tutorial, you learn how to train the network. In this tutorial, you will learn how to save and load a model, and how to export a saved model in a specified format to different platforms for inference. +## Model Training + +The following are the basic steps and code for network model training, with sample code as follows: + +```python +import mindspore.nn as nn +from mindspore.train import Model + +from mindvision.classification.dataset import Mnist +from mindvision.classification.models import lenet +from mindvision.engine.callback import LossMonitor + +epochs = 10 # Training batch + +# 1. Build a dataset +download_train = Mnist(path="./mnist", split="train", batch_size=batch_size, repeat_num=1, shuffle=True, resize=32, download=True) +dataset_train = download_train.run() + +# 2. Define a neural network +network = lenet(num_classes=10, pretrained=False) +# 3.1 Define a loss function +net_loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean') +# 3.2 Defines an optimizer function +net_opt = nn.Momentum(network.trainable_params(), learning_rate=0.01, momentum=0.9) +# 3.3 Initialize model parameters +model = Model(network, loss_fn=net_loss, optimizer=net_opt, metrics={'accuracy'}) + +# 4. Perform training on the neural network +model.train(epochs, dataset_train, callbacks=[LossMonitor(0.01, 1875)]) +``` + +```text +Epoch:[ 0/ 10], step:[ 1875/ 1875], loss:[0.148/1.210], time:2.021 ms, lr:0.01000 +Epoch time: 4251.808 ms, per step time: 2.268 ms, avg loss: 1.210 +Epoch:[ 1/ 10], step:[ 1875/ 1875], loss:[0.049/0.081], time:2.048 ms, lr:0.01000 +Epoch time: 4301.405 ms, per step time: 2.294 ms, avg loss: 0.081 +Epoch:[ 2/ 10], step:[ 1875/ 1875], loss:[0.014/0.050], time:1.992 ms, lr:0.01000 +Epoch time: 4278.799 ms, per step time: 2.282 ms, avg loss: 0.050 +Epoch:[ 3/ 10], step:[ 1875/ 1875], loss:[0.035/0.038], time:2.254 ms, lr:0.01000 +Epoch time: 4380.553 ms, per step time: 2.336 ms, avg loss: 0.038 +Epoch:[ 4/ 10], step:[ 1875/ 1875], loss:[0.130/0.031], time:1.932 ms, lr:0.01000 +Epoch time: 4287.547 ms, per step time: 2.287 ms, avg loss: 0.031 +Epoch:[ 5/ 10], step:[ 1875/ 1875], loss:[0.003/0.027], time:1.981 ms, lr:0.01000 +Epoch time: 4377.000 ms, per step time: 2.334 ms, avg loss: 0.027 +Epoch:[ 6/ 10], step:[ 1875/ 1875], loss:[0.004/0.023], time:2.167 ms, lr:0.01000 +Epoch time: 4687.250 ms, per step time: 2.500 ms, avg loss: 0.023 +Epoch:[ 7/ 10], step:[ 1875/ 1875], loss:[0.004/0.020], time:2.226 ms, lr:0.01000 +Epoch time: 4685.529 ms, per step time: 2.499 ms, avg loss: 0.020 +Epoch:[ 8/ 10], step:[ 1875/ 1875], loss:[0.000/0.016], time:2.275 ms, lr:0.01000 +Epoch time: 4651.129 ms, per step time: 2.481 ms, avg loss: 0.016 +Epoch:[ 9/ 10], step:[ 1875/ 1875], loss:[0.022/0.015], time:2.177 ms, lr:0.01000 +Epoch time: 4623.760 ms, per step time: 2.466 ms, avg loss: 0.015 +``` + +As you can see from the printed results above, the loss values tend to converge as the number of training rounds increases. ## Saving the Model -There are two main ways to save the interface of the model: +After training the network, the following will describe how to save and load the model. There are two main ways to save the interface of the model: 1. One is to simply save the network model, which can be saved before and after training. The advantage is that the interface is simple and easy to use, but only the state of the network model when the command is executed is retained; @@ -16,7 +70,7 @@ There are two main ways to save the interface of the model: ### Saving the Model Directly -Use the save_checkpoint provided by MindSpore to save the model, pass it to the network and save the path: +Use the save_checkpoint provided by MindSpore to save the model, and pass it to the network and save the path: ```python import mindspore as ms @@ -25,29 +79,26 @@ import mindspore as ms ms.save_checkpoint(net, "./MyNet.ckpt") ``` -Here, `net` is the training network, and the definition method can be referred to [Building a Neural Network](https://www.mindspore.cn/tutorials/en/master/model.html). +Here, `network` is the training network, and `"./MyNet.ckpt"` is the saving path of the network model. ### Saving the Model During Training -In the process of model training, use the `callbacks` parameter in `model.train` to pass in the object `ModelCheckpoint` that saves the model, which can save the model parameters and generate CheckPoint (abbreviated as ckpt) files. - -```python -from mindspore.train.callback import ModelCheckpoint - -ckpt_cb = ModelCheckpoint() -model.train(epoch_num, dataset, callbacks=ckpt_cb) -``` - -Here, `epoch_num` is the number of times that the dataset is traversed during training. The definition method can be referred to [Training the Model](https://www.mindspore.cn/tutorials/en/master/optimization.html). `dataset` is the dataset to be loaded. The definition method can be referred to [Loading and Processing Data](https://www.mindspore.cn/tutorials/en/master/dataset.html). +In the process of model training, use the `callbacks` parameter in `model.train` to pass in the object [ModelCheckpoint](https://mindspore.cn/docs/api/en/master/api_python/mindspore.train.html#mindspore.train.callback.ModelCheckpoint) that saves the model (Generally used with [CheckpointConfig](https://mindspore.cn/docs/api/en/master/api_python/mindspore.train.html#mindspore.train.callback.CheckpointConfig)), which can save the model parameters and generate CheckPoint (abbreviated as ckpt) files. You can configure the checkpoint policies as required. The following describes the usage: ```python from mindspore.train.callback import ModelCheckpoint, CheckpointConfig -config_ck = CheckpointConfig(save_checkpoint_steps=32, keep_checkpoint_max=10) -ckpt_cb = ModelCheckpoint(prefix='resnet50', directory=None, config=config_ck) -model.train(epoch_num, dataset, callbacks=ckpt_cb) +# Set the number of epoch_num +epoch_num = 5 + +# Set the model saving parameters +config_ck = CheckpointConfig(save_checkpoint_steps=1875, keep_checkpoint_max=10) + +# Apply the model saving parameters +ckpoint = ModelCheckpoint(prefix="lenet", directory="./lenet", config=config_ck) +model.train(epoch_num, dataset_train, callbacks=ckpoint) ``` In the preceding code, you need to initialize a `CheckpointConfig` class object to set the saving policy. @@ -62,16 +113,16 @@ Create a `ModelCheckpoint` object and pass it to the `model.train` method. Then The generated checkpoint file is as follows: ```text -resnet50-graph.meta # Computational graph after build. -resnet50-1_32.ckpt # The extension of the checkpoint file is .ckpt. -resnet50-2_32.ckpt # The file name format contains the epoch and step correspond to the saved parameters. -resnet50-3_32.ckpt # The file name indicates that the model parameters generated during the 32nd step of the third epoch are saved. +lenet-graph.meta # Computational graph after compiled. +lenet-1_1875.ckpt # The extension of the checkpoint file is .ckpt. +lenet-2_1875.ckpt # The file name format contains the epoch and step correspond to the saved parameters. Here are the model parameters for the 1875th step of the 2nd epoch. +lenet-3_1875.ckpt # indicates the model parameters saved for the 1875th step of the 3rd epoch. ... ``` -If you use the same prefix and run the training script for multiple times, checkpoint files with the same name may be generated. To help users distinguish files generated each time, MindSpore adds underscores (_) and digits to the end of the user-defined prefix. If you want to delete the `.ckpt` file, delete the `.meta` file at the same time. +If you use the same prefix and run the training script for multiple times, checkpoint files with the same name may be generated. To help users distinguish files generated each time, MindSpore adds underscores "_" and digits to the end of the user-defined prefix. If you want to delete the `.ckpt` file, delete the `.meta` file at the same time. -For example, `resnet50_3-2_32.ckpt` indicates the checkpoint file generated during the 32nd step of the second epoch after the script is executed for the third time. +For example, `lenet_3-2_1875.ckpt` indicates the CheckPoint file of the 1875th step of the 2nd epoch generated by running the 3rd script. ## Loading the Model @@ -82,12 +133,18 @@ The sample code is as follows: ```python from mindspore import load_checkpoint, load_param_into_net -resnet = ResNet50() -# Store model parameters in the parameter dictionary. -param_dict = load_checkpoint("resnet50-2_32.ckpt") -# Load parameters to the network. -load_param_into_net(resnet, param_dict) -model = Model(resnet, loss, metrics={"accuracy"}) +from mindvision.classification.dataset import Mnist +from mindvision.classification.models import lenet + +# Store the model parameters in the parameter dictionary, where the model parameters saved during the training process above are loaded +param_dict = load_checkpoint("./lenet/lenet-1_1875.ckpt") + +# Redefine a LeNet neural network +net = lenet(num_classes=10, pretrained=False) + +# Load parameters to the network +load_param_into_net(network, param_dict) +model = Model(network, loss_fn=net_loss, optimizer=net_opt, metrics={"accuracy"}) ``` - The `load_checkpoint` method loads the network parameters in the parameter file to the `param_dict` dictionary. @@ -95,80 +152,45 @@ model = Model(resnet, loss, metrics={"accuracy"}) ### Validating the Model -In the inference-only scenario, parameters are directly loaded to the network for subsequent inference and validation. The sample code is as follows: +After the above module loads the parameters into the network, for the inference scenario, you can call the `eval` function for inference verification. The sample code is as follows: ```python -# Define a validation dataset. -dataset_eval = create_dataset(os.path.join(mnist_path, "test"), 32, 1) - # Call eval() for inference. +download_eval = Mnist(path="./mnist", split="test", batch_size=32, resize=32, download=True) +dataset_eval = download_eval.run() acc = model.eval(dataset_eval) + +print("{}".format(acc)) +``` + +```text +{'accuracy': 0.9857772435897436} ``` ### For Transfer Learning -You can load network parameters and optimizer parameters to the model in the case of task interruption, retraining, and fine-tuning. The sample code is as follows: +For task interruption retraining and fine-tuning scenarios, you can call the `train` function for transfer learning. The sample code is as follows: ```python -# Set the number of training epochs. -epoch = 1 # Define a training dataset. -dataset = create_dataset(os.path.join(mnist_path, "train"), 32, 1) -# Call train() for training. -model.train(epoch, dataset) -``` - -## Exporting the Model - -During model training, you can add checkpoints to save model parameters for inference and retraining. If you want to perform inference on different hardware platforms, you can generate MindIR, AIR, or ONNX files based on the network and checkpoint files. - -The following describes how to save a checkpoint file and export a MindIR, AIR, or ONNX file. +download_train = Mnist(path="./mnist", split="train", batch_size=32, repeat_num=1, shuffle=True, resize=32, download=True) +dataset_train = download_train.run() -> MindSpore is an all-scenario AI framework that uses MindSpore IR to unify intermediate representation of network models. Therefore, you are advised to export files in MindIR format. - -### Exporting a MindIR File - -If you want to perform inference across platforms or hardware (such as the Ascend AI Processors, MindSpore devices, or GPUs) after obtaining a checkpoint file, you can define the network and checkpoint to generate a model file in MINDIR format. Currently, the inference network export based on static graphs is supported and does not contain control flow semantics. An example of the code for exporting the file is as follows: - -```python -from mindspore import export, load_checkpoint, load_param_into_net -from mindspore import Tensor -import numpy as np - -resnet = ResNet50() -# Store model parameters in the parameter dictionary. -param_dict = load_checkpoint("resnet50-2_32.ckpt") - -# Load parameters to the network. -load_param_into_net(resnet, param_dict) -input = np.random.uniform(0.0, 1.0, size=[32, 3, 224, 224]).astype(np.float32) -export(resnet, Tensor(input), file_name='resnet50-2_32', file_format='MINDIR') +# Network model calls train() for training. +model.train(epoch_num, dataset_train, callbacks=[LossMonitor(0.01, 1875)]) ``` -> - `input` specifies the input shape and data type of the exported model. If the network has multiple inputs, you need to pass them to the `export` method. Example: `export(network, Tensor(input1), Tensor(input2), file_name='network', file_format='MINDIR')` -> - If `file_name` does not contain the ".mindir" suffix, the system will automatically add the ".mindir" suffix to it. - -### Exporting in Other Formats - -#### Exporting an AIR File - -If you want to perform inference on the Ascend AI Processor after obtaining a checkpoint file, use the network and checkpoint to generate a model file in AIR format. An example of the code for exporting the file is as follows: - -```python -export(resnet, Tensor(input), file_name='resnet50-2_32', file_format='AIR') +```text +Epoch:[ 0/ 5], step:[ 1875/ 1875], loss:[0.000/0.010], time:2.193 ms, lr:0.01000 +Epoch time: 4106.620 ms, per step time: 2.190 ms, avg loss: 0.010 +Epoch:[ 1/ 5], step:[ 1875/ 1875], loss:[0.000/0.009], time:2.036 ms, lr:0.01000 +Epoch time: 4233.697 ms, per step time: 2.258 ms, avg loss: 0.009 +Epoch:[ 2/ 5], step:[ 1875/ 1875], loss:[0.000/0.010], time:2.045 ms, lr:0.01000 +Epoch time: 4246.248 ms, per step time: 2.265 ms, avg loss: 0.010 +Epoch:[ 3/ 5], step:[ 1875/ 1875], loss:[0.000/0.008], time:2.001 ms, lr:0.01000 +Epoch time: 4235.036 ms, per step time: 2.259 ms, avg loss: 0.008 +Epoch:[ 4/ 5], step:[ 1875/ 1875], loss:[0.002/0.008], time:2.039 ms, lr:0.01000 +Epoch time: 4354.482 ms, per step time: 2.322 ms, avg loss: 0.008 ``` -> - `input` specifies the input shape and data type of the exported model. If the network has multiple inputs, you need to pass them to the `export` method. Example: `export(network, Tensor(input1), Tensor(input2), file_name='network', file_format='AIR')` -> - If `file_name` does not contain the ".air" suffix, the system will automatically add the ".air" suffix to it. - -#### Exporting an ONNX File - -If you want to perform inference on other third-party hardware after obtaining a checkpoint file, use the network and checkpoint to generate a model file in ONNX format. An example of the code for exporting the file is as follows: - -```python -export(resnet, Tensor(input), file_name='resnet50-2_32', file_format='ONNX') -``` -> - `input` specifies the input shape and data type of the exported model. If the network has multiple inputs, you need to pass them to the `export` method. Example: `export(network, Tensor(input1), Tensor(input2), file_name='network', file_format='ONNX')` -> - If `file_name` does not contain the ".onnx" suffix, the system will automatically add the ".onnx" suffix to it. -> - Currently, only the ONNX format export of ResNet50 and BERT[CLS] networks are supported. diff --git a/tutorials/source_en/beginner/tensor.ipynb b/tutorials/source_en/beginner/tensor.ipynb new file mode 100644 index 0000000000..db27ae6939 --- /dev/null +++ b/tutorials/source_en/beginner/tensor.ipynb @@ -0,0 +1,695 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Tensor\n", + "\n", + "[![View-Source](https://gitee.com/mindspore/docs/raw/master/resource/_static/logo_source_en.png)](https://gitee.com/mindspore/docs/blob/master/tutorials/source_en/beginner/tensor.ipynb)\n", + "\n", + "Tensor is a multilinear function that can be used to represent linear relationships between vectors , scalars , and other tensors. The basic examples of these linear relations are the inner product , the outer product , the linear map , and the Cartesian product. In the $n$ dimensional space, its coordinates have $n^{r}$ components, where each component is a function of coordinates, and these components are also linearly transformed according to certain rules when the coordinates are transformed. $r$ is called the rank or order of this tensor (neither has anything to do with the rank and order of the matrix).\n", + "\n", + "Tensor is a special data structure that is very similar to arrays and matrices. [Tensor](https://www.mindspore.cn/docs/api/en/master/api_python/mindspore/mindspore.Tensor.html) is the basic data structure in MindSpore network operations, and this chapter mainly introduces the attributes and usage of the tensor and the sparse tensor." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Building the Tensor\n", + "\n", + "There are multiple methods for initializing the tensor. When building the tensor, you can pass the Tensor with `float`, `int`, `bool`, `tuple`, `list`, and `NumPy.array` types.\n", + "\n", + "- **Generating a tensor based on data.**\n", + "\n", + "You can create a tensor based on data. The data type can be set or automatically inferred." + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 2, + "source": [ + "from mindspore import Tensor\n", + "\n", + "x = Tensor(0.1)" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "- **Generating a tensor from the NumPy array.**\n", + "\n", + "You can create a tensor from the NumPy array." + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 3, + "source": [ + "import numpy as np\n", + "\n", + "arr = np.array([1, 0, 1, 0])\n", + "tensor_arr = Tensor(arr)\n", + "\n", + "print(type(arr))\n", + "print(type(tensor_arr))" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "" + ] + }, + { + "cell_type": "markdown", + "source": [ + "If the initial value is `NumPy.array`, the generated `Tensor` data type corresponds to `NumPy.array`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "- **Generating a tensor by using the init**\n", + "\n", + "When using the `init` to initialize a tensor, the parameters that support passing are `init`, `shape` and `dtype`.\n", + "\n", + "- `init`: Support passing the subclass of [initializer](https://www.mindspore.cn/docs/api/en/master/api_python/mindspore.common.initializer.html).\n", + "- `shape`: Support passing `list`, `tuple`, `int`.\n", + "- `dtype`: Support passing [mindspore.dtype](https://www.mindspore.cn/docs/api/en/master/api_python/mindspore.html#mindspore.dtype)." + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 4, + "source": [ + "from mindspore import Tensor\n", + "from mindspore import set_seed\n", + "from mindspore import dtype as mstype\n", + "from mindspore.common.initializer import One, Normal\n", + "\n", + "set_seed(1)\n", + "\n", + "tensor1 = Tensor(shape=(2, 2), dtype=mstype.float32, init=One())\n", + "tensor2 = Tensor(shape=(2, 2), dtype=mstype.float32, init=Normal())\n", + "\n", + "print(\"tensor1:\\n\", tensor1)\n", + "print(\"tensor2:\\n\", tensor2)" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "tensor1:\n", + " [[1. 1.]\n", + " [1. 1.]]\n", + "tensor2:\n", + " [[-0.00128023 -0.01392901]\n", + " [ 0.0130886 -0.00107818]]\n" + ] + } + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The `init` is used for delayed initialization in parallel mode. Usually, it is not recommended to use `init` interface to initialize parameters.\n", + "\n", + "- **Inheriting attributes of another tensor to form a new tensor.**" + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 5, + "source": [ + "from mindspore import ops\n", + "\n", + "oneslike = ops.OnesLike()\n", + "x = Tensor(np.array([[0, 1], [2, 1]]).astype(np.int32))\n", + "output = oneslike(x)\n", + "\n", + "print(output)\n", + "print(\"input shape:\", x.shape)\n", + "print(\"output shape:\", output.shape)" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[1 1]\n", + " [1 1]]\n", + "input shape: (2, 2)\n", + "output shape: (2, 2)\n" + ] + } + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "- **Outputting a constant tensor of a specified size.**\n", + "\n", + "`shape` is the size tuple of a tensor, which determines the dimension of the output tensor." + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 6, + "source": [ + "shape = (2, 2)\n", + "ones = ops.Ones()\n", + "output = ones(shape, mstype.float32)\n", + "\n", + "zeros = ops.Zeros()\n", + "output = zeros(shape, mstype.float32)\n", + "print(output)" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[1. 1.]\n", + " [1. 1.]]\n", + "[[0. 0.]\n", + " [0. 0.]]\n" + ] + } + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "During `Tensor` initialization, dtype can be specified, for example, `mstype.int32`, `mstype.float32` or `mstype.bool_`.\n", + "\n", + "## Tensor Attributes\n", + "\n", + "Tensor attributes include shape, data type, transposed tensor, item size, number of bytes occupied, dimension, size of elements, and stride per dimension.\n", + "\n", + "- shape: the shape of `Tensor`, a tuple.\n", + "\n", + "- dtype: the dtype of `Tensor`, a data type of MindSpore.\n", + "\n", + "- T: the Transpose of `Tensor`, also a `Tensor`.\n", + "\n", + "- itemsize: the number of bytes occupied by each element in `Tensor` is an integer.\n", + "\n", + "- nbytes: the total number of bytes occupied by `Tensor`, an integer.\n", + "\n", + "- ndim: the rank of a `Tensor`, which is len(tensor.shape), an integer.\n", + "\n", + "- size: the number of all elements in `Tensor`, an integer.\n", + "\n", + "- strides: the number of bytes to traverse in each dimension of `Tensor`." + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 7, + "source": [ + "x = Tensor(np.array([[1, 2], [3, 4]]), mstype.int32)\n", + "\n", + "print(\"x_shape:\", x.shape)\n", + "print(\"x_dtype:\", x.dtype)\n", + "print(\"x_transposed:\\n\", x.T)\n", + "print(\"x_itemsize:\", x.itemsize)\n", + "print(\"x_nbytes:\", x.nbytes)\n", + "print(\"x_ndim:\", x.ndim)\n", + "print(\"x_size:\", x.size)\n", + "print(\"x_strides:\", x.strides)" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "x_shape: (2, 2)\n", + "x_dtype: Int32\n", + "x_transposed:\n", + " [[1 3]\n", + " [2 4]]\n", + "x_itemsize: 4\n", + "x_nbytes: 16\n", + "x_ndim: 2\n", + "x_size: 4\n", + "x_strides: (8, 4)\n" + ] + } + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Tensor Indexing\n", + "\n", + "Tensor indexing is similar to Numpy indexing, indexing starts from 0, negative indexing means indexing in reverse order, and colons `:` and `...` are used for slicing." + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 8, + "source": [ + "tensor = Tensor(np.array([[0, 1], [2, 3]]).astype(np.float32))\n", + "\n", + "print(\"First row: {}\".format(tensor[0]))\n", + "print(\"value of top right corner: {}\".format(tensor[1, 1]))\n", + "print(\"Last column: {}\".format(tensor[:, -1]))\n", + "print(\"First column: {}\".format(tensor[..., 0]))" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "First row: [0. 1.]\n", + "value of top right corner: 3.0\n", + "Last column: [1. 3.]\n", + "First column: [0. 2.]\n" + ] + } + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Tensor Operation\n", + "\n", + "There are many operations between tensors, including arithmetic, linear algebra, matrix processing (transposing, indexing, and slicing), and sampling. The following describes several operations. The usage of tensor computation is similar to that of NumPy.\n", + "\n", + ">Common arithmetic operations include: addition (+), subtraction (-), multiplication (\\*), division (/), modulo (%), power (\\*\\*), and exact division (//)." + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 9, + "source": [ + "x = Tensor(np.array([1, 2, 3]), mstype.int32)\n", + "y = Tensor(np.array([4, 5, 6]), mstype.int32)\n", + "\n", + "output_add = x + y\n", + "output_sub = x - y\n", + "output_mul = x * y\n", + "output_div = y / x\n", + "output_mod = y % x\n", + "output_floordiv = y // x\n", + "\n", + "print(\"add:\", output_add)\n", + "print(\"sub:\", output_sub)\n", + "print(\"mul:\", output_mul)\n", + "print(\"div:\", output_div)\n", + "print(\"mod:\", output_mod)\n", + "print(\"floordiv:\", output_floordiv)" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "add: [5 7 9]\n", + "sub: [-3 -3 -3]\n", + "mul: [ 4 10 18]\n", + "div: [4 2 2]\n", + "mod: [0 1 0]\n", + "floordiv: [4 2 2]\n" + ] + } + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "`Concat` connects a series of tensors in a given dimension." + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 10, + "source": [ + "data1 = Tensor(np.array([[0, 1], [2, 3]]).astype(np.float32))\n", + "data2 = Tensor(np.array([[4, 5], [6, 7]]).astype(np.float32))\n", + "op = ops.Concat()\n", + "output = op((data1, data2))\n", + "\n", + "print(output)\n", + "print(\"shape:\\n\", output.shape)" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[0. 1.]\n", + " [2. 3.]\n", + " [4. 5.]\n", + " [6. 7.]]\n", + "shape:\n", + " (4, 2)\n" + ] + } + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "`Stack` combines two tensors from another dimension." + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 11, + "source": [ + "data1 = Tensor(np.array([[0, 1], [2, 3]]).astype(np.float32))\n", + "data2 = Tensor(np.array([[4, 5], [6, 7]]).astype(np.float32))\n", + "op = ops.Stack()\n", + "output = op([data1, data2])\n", + "\n", + "print(output)\n", + "print(\"shape:\\n\", output.shape)" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[[0. 1.]\n", + " [2. 3.]]\n", + "\n", + " [[4. 5.]\n", + " [6. 7.]]]\n", + "shape:\n", + " (2, 2, 2)\n" + ] + } + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Conversion Between Tensor and NumPy\n", + "\n", + "Tensor and NumPy can be converted to each other.\n", + "\n", + "### Tensor to NumPy\n", + "\n", + "Use `asnumpy()` to convert Tensor to NumPy." + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 12, + "source": [ + "zeros = ops.Zeros()\n", + "\n", + "output = zeros((2, 2), mstype.float32)\n", + "print(\"output: {}\".format(type(output)))\n", + "\n", + "n_output = output.asnumpy()\n", + "print(\"n_output: {}\".format(type(n_output)))" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "output: \n", + "n_output: \n" + ] + } + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### NumPy to Tensor\n", + "\n", + "Use `asnumpy()` to convert NumPy to Tensor." + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 13, + "source": [ + "output = np.array([1, 0, 1, 0])\n", + "print(\"output: {}\".format(type(output)))\n", + "\n", + "t_output = Tensor(output)\n", + "print(\"t_output: {}\".format(type(t_output)))" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "output: \n", + "t_output: \n" + ] + } + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Sparse Tensor\n", + "\n", + "The sparse tensor is a special kind of tensor which most of the elements are zero.\n", + "\n", + "In some scenario (e.g., Recommendation Systems, Molecular Dynamics, Graph Neural Networks), the data is sparse. If we use common dense tensors to represent the data, we may introduce many\n", + "unnecessary calculations, storage and communication costs. In this situation, it is better to use sparse tensor to\n", + "represent the data.\n", + "\n", + "MindSpore now supports the two most commonly used `CSR` and `COO` sparse data formats.\n", + "\n", + "The common structure of the sparse tensor is ``. `indices` means index of\n", + "non-zero elements, `values` means the values of these non-zero elements and shape means the dense shape of\n", + "the sparse tensor. Using this structure, we define data structure `CSRTensor`, `COOTensor` and `RowTensor`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### CSRTensor\n", + "\n", + "`CSR`(Compressed Sparse Row) is efficient in both storage and computation. All the non-zero values are stored in `values`, and their positions are stored in `indptr`(row position) and `indices` (column position).\n", + "\n", + "- `indptr`: 1-D integer tensor, indicating the start and end points of the non-zero element of each row of the sparse data in `values`. Index data type only supports int32 for now.\n", + "\n", + "- `indices`: 1-D integer tensor, indicating the position of the sparse tensor non-zero element in the column and has the same length as `values`. Index data type only supports int32 for now.\n", + "\n", + "- `values`: 1-D tensor, indicating that the value of the non-zero element corresponding to the `CSRTensor` and has the same length as `indices`.\n", + "\n", + "- `shape`: indicating that the shape of a compressed sparse tensor. The data type is `Tuple`, and currently only 2-D `CSRTensor` is supported.\n", + "\n", + ">For more details of the `CSRTensor`, please see [mindspore.CSRTensor](https://www.mindspore.cn/docs/api/en/master/api_python/mindspore/mindspore.CSRTensor.html).\n", + "\n", + "Here are some examples of how CSRTensor can be used:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Float64\n" + ] + } + ], + "source": [ + "import mindspore as ms\n", + "from mindspore import Tensor, CSRTensor\n", + "\n", + "indptr = Tensor([0, 1, 2])\n", + "indices = Tensor([0, 1])\n", + "values = Tensor([1, 2], dtype=ms.float32)\n", + "shape = (2, 4)\n", + "\n", + "# constructs CSRTensor\n", + "csr_tensor = CSRTensor(indptr, indices, values, shape)\n", + "\n", + "print(csr_tensor.astype(ms.float64).dtype)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### COOTensor\n", + "\n", + "`COOTensor` is used to compress Tensors with irregular distribution of non-zero elements. If the number of non-zero elements\n", + "is `N` and the dense shape of the sparse tensor is `ndims`:\n", + "\n", + "- `indices`: 2-D integer Tensor and each row indicates a non-zero element subscript. Shape: `[N, ndims]`. Index data type only supports int32 for now.\n", + "- `values`: 1-D tensor of any type, indicating the value of non-zero elements. Shape: `[N]`.\n", + "- `shape`: indicating a dense shape of the sparse tensor, currently only 2-D `COOTensor` is supported.\n", + "\n", + ">For more details for `COOTensor`, please see [mindspore.COOTensor](https://www.mindspore.cn/docs/api/en/master/api_python/mindspore/mindspore.COOTensor.html).\n", + "\n", + "Here are some examples of how COOTensor can be used:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1. 2.]\n", + "[[0 1]\n", + " [1 2]]\n", + "(3, 4)\n", + "Float64\n" + ] + } + ], + "source": [ + "import mindspore as ms\n", + "import mindspore.nn as nn\n", + "from mindspore import Tensor, COOTensor\n", + "\n", + "indices = Tensor([[0, 1], [1, 2]])\n", + "values = Tensor([1, 2], dtype=ms.float32)\n", + "shape = (3, 4)\n", + "\n", + "# constructs COOTensor\n", + "coo_tensor = COOTensor(indices, values, shape)\n", + "\n", + "print(coo_tensor.values)\n", + "print(coo_tensor.indices)\n", + "print(coo_tensor.shape)\n", + "print(coo_tensor.astype(ms.float64).dtype) # COOTensor cast to another data type" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The codes above produce a `COOTensor` as following:\n", + "\n", + "$$\n", + " \\left[\n", + " \\begin{matrix}\n", + " 0 & 1 & 0 & 0 \\\\\n", + " 0 & 0 & 2 & 0 \\\\\n", + " 0 & 0 & 0 & 0\n", + " \\end{matrix}\n", + " \\right]\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### RowTensor\n", + "\n", + "`RowTensor` is used to compress tensors that are sparse in the zeroth dimension. If the dimension of `RowTensor` is `[L0, D1, D2, ..., DN ]`. The number of non-zero elements in the zeroth dimension is `D0`, then `L0 >> D0`.\n", + "\n", + "- `indices`: 1-D integer tensor, indicating the position of non-zero elements in the zeroth dimension of the sparse tensor, shape: `[D0]`.\n", + "\n", + "- `values`: indicating the value of the corresponding non-zero element, shape: `[D0, D1, D2, ..., DN]`.\n", + "\n", + "- `dense_shape`: indicating the shape of the compressed sparse tensor.\n", + "\n", + "> `RowTensor` can only be used in the constructor of `Cell`. For the detailed contents, refer to the code example in [mindspore.RowTensor](https://www.mindspore.cn/docs/api/en/master/api_python/mindspore/mindspore.RowTensor.html)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "non-zero values: [[1. 2.]]\n", + "non-zero indices: [0]\n", + "shape: (3, 2)\n" + ] + } + ], + "source": [ + "from mindspore import RowTensor\n", + "import mindspore.nn as nn\n", + "\n", + "class Net(nn.Cell):\n", + " def __init__(self, dense_shape):\n", + " super(Net, self).__init__()\n", + " self.dense_shape = dense_shape\n", + "\n", + " def construct(self, indices, values):\n", + " x = RowTensor(indices, values, self.dense_shape)\n", + " return x.values, x.indices, x.dense_shape\n", + "\n", + "indices = Tensor([0])\n", + "values = Tensor([[1, 2]], dtype=mstype.float32)\n", + "out = Net((3, 2))(indices, values)\n", + "\n", + "print(\"non-zero values:\", out[0])\n", + "print(\"non-zero indices:\", out[1])\n", + "print(\"shape:\", out[2])" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:mindspore_py39] *", + "language": "python", + "name": "conda-env-mindspore_py39-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.0" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/tutorials/source_en/beginner/train.md b/tutorials/source_en/beginner/train.md new file mode 100644 index 0000000000..8868486c9f --- /dev/null +++ b/tutorials/source_en/beginner/train.md @@ -0,0 +1,132 @@ +# Training the Model + + + +After learning how to create a model and build a dataset in the preceding tutorials, you can start to learn how to set hyperparameters and optimize model parameters. + +## Hyperparameters + +Hyperparameters can be adjusted to control the model training and optimization process. Different hyperparameter values may affect the model training and convergence speed. At present, deep learning models are mostly optimized by a batch stochastic gradient descent algorithm, and the principle of the stochastic gradient descent algorithm is as follows: +$$ +w_{t+1}=w_{t}-\eta \frac{1}{n} \sum_{x \in \mathcal{B}} \nabla l\left(x, w_{t}\right) +$$ +where $n$ is the batch size, and $η$ is a learning rate. In addition, $w_{t}$ is the weight parameter in the training batch t, and $\nabla l$ is the derivative of the loss function. It can be known that in addition to the gradient itself, these two factors directly determine the weight update of the model, and from the optimization itself, they are the most important parameters that affect the performance convergence of the model. Generally, the following hyperparameters are defined for training: + +- Epoch: specifies number of times that the dataset is traversed during training. +- Batch size: The dataset is trained for batch reading, setting the size of each batch of data. The batch size is too small, takes a lot of time, and the gradient oscillation is serious, which is not conducive to convergence. The batch size is too large, and the gradient direction of different batches does not change at all, which is easy to fall into local minimum values. In this way, an appropriate batch size needs to be chosen, to effectively improve the accuracy of the model and global convergence. +- Learning rate: If the learning rate is low, the convergence speed slows down. If the learning rate is high, unpredictable results such as no training convergence may occur. Gradient descent is a parameter optimization algorithm that is widely used to minimize model errors. Gradient descent estimates the parameters of the model by iterating and minimizing the loss function at each step. The learning rate is that during the iteration process, the learning progress of the model will be controlled. + +![learning-rate](https://gitee.com/mindspore/docs/raw/master/tutorials/source_zh_cn/beginner/images/learning_rate.png) + +```python +epochs = 10 +batch_size = 32 +momentum = 0.9 +learning_rate = 1e-2 +``` + +## Loss Functions + +The **loss function** is used to evaluate the difference between **predicted value** and **target value** of a model. Here, the absolute error loss function `L1Loss` is used: +$$ +\text { L1 Loss Function }=\sum_{i=1}^{n}\left|y_{true}-y_{predicted}\right| +$$ + `mindspore.nn.loss` provides many common loss functions, such as `SoftmaxCrossEntropyWithLogits`, `MSELoss`, and `SmoothL1Loss`. + +Given the predicted value and the target value, we calculate the error (loss value) between the predicted value and the target value by means of a loss function, which is used as follows: + +```python +import numpy as np +import mindspore.nn as nn +from mindspore import Tensor + +loss = nn.L1Loss() +output_data = Tensor(np.array([[1, 2, 3], [2, 3, 4]]).astype(np.float32)) +target_data = Tensor(np.array([[0, 2, 5], [3, 1, 1]]).astype(np.float32)) +print(loss(output_data, target_data)) +``` + +```text + 1.5 +``` + +## Optimizer Functions + +An optimizer is used to compute and update the gradient. The selection of the model optimization algorithm directly affects the performance of the final model. A poor effect may be caused by the optimization algorithm instead of the feature or model design. + +All optimization logic of MindSpore is encapsulated in the `Optimizer` object. Here, the Momentum optimizer is used. `mindspore.nn` provides many common optimizers, such as `Adam`, `SGD` and `RMSProp`. + +You need to build an `Optimizer` object. This object can retain the current parameter status and update parameters based on the computed gradient. To build an `Optimizer`, we need to provide an iterator that contains parameters (must be variable objects) to be optimized. For example, set parameters to `net.trainable_params()` for all `parameter` that can be trained on the network. + +Then, you can set the `Optimizer` parameter options, such as the learning rate and weight attenuation. + +A code example is as follows: + +```python +from mindspore import nn +from mindvision.classification.models import lenet + +net = lenet(num_classes=10, pretrained=False) +optim = nn.Momentum(net.trainable_params(), learning_rate, momentum) +``` + +## Model Training + +A model training process is generally divided into four steps. + +1. Define a neural network. +2. Build a dataset. +3. Define hyperparameters, a loss function, and an optimizer. +4. Enter the epoch and dataset for training. + +The model training sample code is as follows: + +```python +import mindspore.nn as nn +from mindspore.train import Model + +from mindvision.classification.dataset import Mnist +from mindvision.classification.models import lenet +from mindvision.engine.callback import LossMonitor + +# 1. Build a dataset +download_train = Mnist(path="./mnist", split="train", batch_size=batch_size, repeat_num=1, shuffle=True, resize=32, download=True) +dataset_train = download_train.run() + +# 2. Define a neural network +network = lenet(num_classes=10, pretrained=False) +# 3.1 Define a loss function +net_loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean') +# 3.2 Defines an optimizer function +net_opt = nn.Momentum(network.trainable_params(), learning_rate=learning_rate, momentum=momentum) +# 3.3 Initialize model parameters +model = Model(network, loss_fn=net_loss, optimizer=net_opt, metrics={'acc'}) + +# 4. Perform training on the neural network +model.train(epochs, dataset_train, callbacks=[LossMonitor(learning_rate, 1875)]) +``` + +```text +Epoch:[ 0/ 10], step:[ 1875/ 1875], loss:[0.189/1.176], time:2.254 ms, lr:0.01000 +Epoch time: 4286.163 ms, per step time: 2.286 ms, avg loss: 1.176 +Epoch:[ 1/ 10], step:[ 1875/ 1875], loss:[0.085/0.080], time:1.895 ms, lr:0.01000 +Epoch time: 4064.532 ms, per step time: 2.168 ms, avg loss: 0.080 +Epoch:[ 2/ 10], step:[ 1875/ 1875], loss:[0.021/0.054], time:1.901 ms, lr:0.01000 +Epoch time: 4194.333 ms, per step time: 2.237 ms, avg loss: 0.054 +Epoch:[ 3/ 10], step:[ 1875/ 1875], loss:[0.284/0.041], time:2.130 ms, lr:0.01000 +Epoch time: 4252.222 ms, per step time: 2.268 ms, avg loss: 0.041 +Epoch:[ 4/ 10], step:[ 1875/ 1875], loss:[0.003/0.032], time:2.176 ms, lr:0.01000 +Epoch time: 4216.039 ms, per step time: 2.249 ms, avg loss: 0.032 +Epoch:[ 5/ 10], step:[ 1875/ 1875], loss:[0.003/0.027], time:2.205 ms, lr:0.01000 +Epoch time: 4400.771 ms, per step time: 2.347 ms, avg loss: 0.027 +Epoch:[ 6/ 10], step:[ 1875/ 1875], loss:[0.000/0.024], time:1.973 ms, lr:0.01000 +Epoch time: 4554.252 ms, per step time: 2.429 ms, avg loss: 0.024 +Epoch:[ 7/ 10], step:[ 1875/ 1875], loss:[0.008/0.022], time:2.048 ms, lr:0.01000 +Epoch time: 4361.135 ms, per step time: 2.326 ms, avg loss: 0.022 +Epoch:[ 8/ 10], step:[ 1875/ 1875], loss:[0.000/0.018], time:2.130 ms, lr:0.01000 +Epoch time: 4547.597 ms, per step time: 2.425 ms, avg loss: 0.018 +Epoch:[ 9/ 10], step:[ 1875/ 1875], loss:[0.008/0.017], time:2.135 ms, lr:0.01000 +Epoch time: 4601.861 ms, per step time: 2.454 ms, avg loss: 0.017 +``` + +The loss value is printed during training. The loss value fluctuates, but in general the loss value decreases gradually and the accuracy gradually increases. The loss values run by different persons have a certain randomness and are not necessarily exactly the same. \ No newline at end of file diff --git a/tutorials/source_en/dataset.md b/tutorials/source_en/dataset.md deleted file mode 100644 index 7e83aeb866..0000000000 --- a/tutorials/source_en/dataset.md +++ /dev/null @@ -1,252 +0,0 @@ -# Loading and Processing Data - -`Ascend` `GPU` `CPU` `Beginner` `Data Preparation` - - - -MindSpore provides APIs for loading common datasets and datasets in standard formats. You can directly use the corresponding dataset loading class in mindspore.dataset to load data. The dataset class provides common data processing APIs for users to quickly process data. - -## Data Preparation - -Execute the following command to download and decompress the CIFAR-10 and MNIST dataset to the specified location. - -```python -import os -import requests -import tarfile -import zipfile - -def download_dataset(url, target_path): - """download and decompress dataset""" - if not os.path.exists(target_path): - os.makedirs(target_path) - download_file = url.split("/")[-1] - if not os.path.exists(download_file): - res = requests.get(url, stream=True, verify=False) - if download_file.split(".")[-1] not in ["tgz","zip","tar","gz"]: - download_file = os.path.join(target_path, download_file) - with open(download_file, "wb") as f: - for chunk in res.iter_content(chunk_size=512): - if chunk: - f.write(chunk) - if download_file.endswith("zip"): - z = zipfile.ZipFile(download_file, "r") - z.extractall(path=target_path) - z.close() - if download_file.endswith(".tar.gz") or download_file.endswith(".tar") or download_file.endswith(".tgz"): - t = tarfile.open(download_file) - names = t.getnames() - for name in names: - t.extract(name, target_path) - t.close() - -download_dataset("https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/datasets/cifar-10-binary.tar.gz", "./datasets") -download_dataset("https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/datasets/MNIST_Data.zip", "./datasets") -``` - -The directory structure of the CIFAR-10 dataset file is as follows: - -```text -./datasets/cifar-10-batches-bin -├── batches.meta.txt -├── data_batch_1.bin -├── data_batch_2.bin -├── data_batch_3.bin -├── data_batch_4.bin -├── data_batch_5.bin -├── readme.html -└── test_batch.bin -``` - -Refer to [Quick Start](https://www.mindspore.cn/tutorials/en/master/quick_start.html#downloading-the-dataset) for the directory structure of MINIST dataset files. - -## Loading the Dataset - -In the following example, the CIFAR-10 dataset is loaded through the `Cifar10Dataset` API, and the first five samples are obtained using the sequential sampler. - -```python -import mindspore.dataset as ds - -DATA_DIR = "./datasets/cifar-10-batches-bin" -sampler = ds.SequentialSampler(num_samples=5) -dataset = ds.Cifar10Dataset(DATA_DIR, sampler=sampler) -``` - -## Iterating Dataset - -You can use `create_dict_iterator` to create a data iterator to iteratively access data. The following shows the image shapes and labels. - -```python -for data in dataset.create_dict_iterator(): - print("Image shape: {}".format(data['image'].shape), ", Label: {}".format(data['label'])) -``` - -```text - Image shape: (32, 32, 3) , Label: 6 - Image shape: (32, 32, 3) , Label: 9 - Image shape: (32, 32, 3) , Label: 9 - Image shape: (32, 32, 3) , Label: 4 - Image shape: (32, 32, 3) , Label: 1 -``` - -## Customizing Datasets - -For datasets that cannot be directly loaded by MindSpore, you can build a custom dataset class and use the `GeneratorDataset` API to customize data loading. - -```python -import numpy as np - -np.random.seed(58) - -class DatasetGenerator: - def __init__(self): - self.data = np.random.sample((5, 2)) - self.label = np.random.sample((5, 1)) - - def __getitem__(self, index): - return self.data[index], self.label[index] - - def __len__(self): - return len(self.data) -``` - -You need to customize the following class functions: - -- **\_\_init\_\_** - - When a dataset object is instantiated, the `__init__` function is called. You can perform operations such as data initialization. - - ```python - def __init__(self): - self.data = np.random.sample((5, 2)) - self.label = np.random.sample((5, 1)) - ``` - -- **\_\_getitem\_\_** - - Define the `__getitem__` function of the dataset class to support random access and obtain and return data in the dataset based on the specified `index` value. - - The return value of the `__getitem__` function needs to be a tuple of numpy arrays. When returning a single numpy array, it can be written as `return (np_array_1,)`. - - ```python - def __getitem__(self, index): - return self.data[index], self.label[index] - ``` - -- **\_\_len\_\_** - - Define the `__len__` function of the dataset class and return the number of samples in the dataset. - - ```python - def __len__(self): - return len(self.data) - ``` - -After the dataset class is defined, the `GeneratorDataset` API can be used to load and access dataset samples in the user-defined mode. - -```python -dataset_generator = DatasetGenerator() -dataset = ds.GeneratorDataset(dataset_generator, ["data", "label"], shuffle=False) - -for data in dataset.create_dict_iterator(): - print('{}'.format(data["data"]), '{}'.format(data["label"])) -``` - -```text - [0.36510558 0.45120592] [0.78888122] - [0.49606035 0.07562207] [0.38068183] - [0.57176158 0.28963401] [0.16271622] - [0.30880446 0.37487617] [0.54738768] - [0.81585667 0.96883469] [0.77994068] -``` - -## Data Processing and Augmentation - -### Processing Data - -The dataset APIs provided by MindSpore support common data processing methods. You only need to call the corresponding function APIs to quickly process data. - -In the following example, the datasets are shuffled, and then two samples form a batch. - -```python -ds.config.set_seed(58) - -# Shuffle the data sequence. -dataset = dataset.shuffle(buffer_size=10) -# Perform batch operations on datasets. -dataset = dataset.batch(batch_size=2) - -for data in dataset.create_dict_iterator(): - print("data: {}".format(data["data"])) - print("label: {}".format(data["label"])) -``` - -```text - data: [[0.36510558 0.45120592] - [0.57176158 0.28963401]] - label: [[0.78888122] - [0.16271622]] - data: [[0.30880446 0.37487617] - [0.49606035 0.07562207]] - label: [[0.54738768] - [0.38068183]] - data: [[0.81585667 0.96883469]] - label: [[0.77994068]] -``` - -Where, - -`buffer_size`: size of the buffer for shuffle operations in the dataset. - -`batch_size`: number of data records in each group. Currently, each group contains 2 data records. - -### Data Augmentation - -If the data volume is too small or the sample scenario is simple, the model training effect is affected. You can perform the data augmentation operation to expand the sample diversity and improve the generalization capability of the model. - -The following example uses the operators in the `mindspore.dataset.vision.c_transforms` module to perform data argumentation on the MNIST dataset. - -Import the `c_transforms` module and load the MNIST dataset. - -```python -import matplotlib.pyplot as plt - -from mindspore.dataset.vision import Inter -import mindspore.dataset.vision.c_transforms as c_vision - -DATA_DIR = './datasets/MNIST_Data/train' - -mnist_dataset = ds.MnistDataset(DATA_DIR, num_samples=6, shuffle=False) - -# View the original image data. -mnist_it = mnist_dataset.create_dict_iterator() -data = next(mnist_it) -plt.imshow(data['image'].asnumpy().squeeze(), cmap=plt.cm.gray) -plt.title(data['label'].asnumpy(), fontsize=20) -plt.show() -``` - -![png](./images/output_13_0.PNG) - -Define the data augmentation operator, perform the `Resize` and `RandomCrop` operations on the dataset, and insert the dataset into the data processing pipeline through `map` mapping. - -```python -resize_op = c_vision.Resize(size=(200,200), interpolation=Inter.LINEAR) -crop_op = c_vision.RandomCrop(150) -transforms_list = [resize_op, crop_op] -mnist_dataset = mnist_dataset.map(operations=transforms_list, input_columns=["image"]) -``` - -View the data augmentation effect. - -```python -mnist_dataset = mnist_dataset.create_dict_iterator() -data = next(mnist_dataset) -plt.imshow(data['image'].asnumpy().squeeze(), cmap=plt.cm.gray) -plt.title(data['label'].asnumpy(), fontsize=20) -plt.show() -``` - -![png](./images/output_17_0.PNG) - -For more information, see [Data augmentation](https://www.mindspore.cn/docs/programming_guide/en/master/augmentation.html). diff --git a/tutorials/source_en/images/introduction2.png b/tutorials/source_en/images/introduction2.png deleted file mode 100644 index 61ff0d91e4ee5a54f1a2a05e4e3f000b1af30c58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44652 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®poZ2MzP%C&mLj9pz|C&zfI%0B@$JX&2 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%0D-4sYXHn3D3X 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 diff --git a/tutorials/source_en/images/output_13_0.PNG b/tutorials/source_en/images/output_13_0.PNG deleted file mode 100644 index c8cdc908c7dadb762ebce708145994b5b753060b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5219 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 -

-
-
- - -
- Filter - -
- -
-
-
-
-
Hardware
-
-
- - - - -
-
-
- -
-
-
-
Classification
-
-
- - - - - - - - - - -
- -
-
-
-
-
-
Experience
-
-
- - -
- -
- -
- -
-
- - - -
- - - - - - - - - - - -
- -
- -
-
- + beginner/introduction + beginner/quick_start + beginner/tensor + beginner/dataset + beginner/model + beginner/autograd + beginner/train + beginner/save_load + beginner/infer diff --git a/tutorials/source_en/inference.md b/tutorials/source_en/inference.md deleted file mode 100644 index 088d03ff47..0000000000 --- a/tutorials/source_en/inference.md +++ /dev/null @@ -1,433 +0,0 @@ -# Inference - -`Ascend` `Device` `Beginner` `Inference Application` - - - -This is the last tutorial. To better adapt to different inference devices, inference is classified into Ascend AI Processor inference and mobile device inference. - -## Ascend AI Processor Inference - -An Ascend AI Processor is an energy-efficient and highly integrated AI processor oriented to edge scenarios. It can implement multiple data analysis and inference computing, such as image and video analysis, and can be widely used in scenarios such as intelligent surveillance, robots, drones, and video servers. The following describes how to use MindSpore to perform inference on the Ascend AI Processors. - -### Inference Code - -Create a directory to store the inference code project, for example, `/home/HwHiAiUser/mindspore_sample/ascend910_resnet50_preprocess_sample`. You can download the [sample code](https://gitee.com/mindspore/docs/tree/master/docs/sample_code/ascend910_resnet50_preprocess_sample) from the official website. The `model` directory is used to store the exported [MindIR model file](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/sample_resources/ascend310_resnet50_preprocess_sample/resnet50_imagenet.mindir), and the `test_data` directory is used to store the images to be classified, the images can be selected in [ImageNet2012](http://image-net.org/download-images) validation dataset. The directory structure of the inference code project is as follows: - -```text -└─ascend910_resnet50_preprocess_sample - ├── CMakeLists.txt // Build script - ├── README.md // Usage description - ├── main.cc // Main function - ├── model - │ └── resnet50_imagenet.mindir // MindIR model file - └── test_data - ├── ILSVRC2012_val_00002138.JPEG // Input sample image 1 - ├── ILSVRC2012_val_00003014.JPEG // Input sample image 2 - ├── ... // Input sample image n. -``` - -Namespaces that reference `mindspore` and `mindspore::dataset`. - -```c++ -namespace ms = mindspore; -namespace ds = mindspore::dataset; -``` - -Initialize the environment, specify the hardware platform used for inference, and set DeviceID. - -Set the hardware to Ascend 910 and set DeviceID to 0. The code example is as follows: - -```c++ -auto context = std::make_shared(); -auto ascend910_info = std::make_shared(); -ascend910_info->SetDeviceID(0); -context->MutableDeviceInfo().push_back(ascend910_info); -``` - -Load the model file. - -```c++ -// Load the MindIR model. -ms::Graph graph; -ms::Status ret = ms::Serialization::Load(resnet_file, ms::ModelType::kMindIR, &graph); -// Build a model using a graph. -ms::Model resnet50; -ret = resnet50.Build(ms::GraphCell(graph), context); -``` - -Obtain the input information required by the model. - -```c++ -std::vector model_inputs = resnet50.GetInputs(); -``` - -Load the image file. - -```c++ -// ReadFile is a function used to read images. -ms::MSTensor ReadFile(const std::string &file); -auto image = ReadFile(image_file); -``` - -Preprocess images. - -```c++ -// Use the CPU operator provided by MindData to preprocess images. - -// Create an operator to encode the input into the RGB format. -std::shared_ptr decode(new ds::vision::Decode()); -// Create an operator to resize the image to the specified size. -std::shared_ptr resize(new ds::vision::Resize({256})); -// Create an operator to normalize the input of the operator. -std::shared_ptr normalize(new ds::vision::Normalize( - {0.485 * 255, 0.456 * 255, 0.406 * 255}, {0.229 * 255, 0.224 * 255, 0.225 * 255})); -// Create an operator to perform central cropping. -std::shared_ptr center_crop(new ds::vision::CenterCrop({224, 224})); -// Create an operator to transform shape (H, W, C) into shape (C, H, W). -std::shared_ptr hwc2chw(new ds::vision::HWC2CHW()); - -// Define a MindData data preprocessing function that contains the preceding operators in sequence. -ds::Execute preprocessor({decode, resize, normalize, center_crop, hwc2chw}); - -// Call the data preprocessing function to obtain the processed image. -ret = preprocessor(image, &image); -``` - -Start inference. - -```c++ -// Create an output vector. -std::vector outputs; -// Create an input vector. -std::vector inputs; -inputs.emplace_back(model_inputs[0].Name(), model_inputs[0].DataType(), model_inputs[0].Shape(), - image.Data().get(), image.DataSize()); -// Call the Predict function of the model for inference. -ret = resnet50.Predict(inputs, &outputs); -``` - -Obtain the inference result. - -```c++ -// Maximum value of the output probability. -std::cout << "Image: " << image_file << " infer result: " << GetMax(outputs[0]) << std::endl; -``` - -### Build Script - -Add the header file search path for the compiler: - -```cmake -option(MINDSPORE_PATH "mindspore install path" "") -include_directories(${MINDSPORE_PATH}) -include_directories(${MINDSPORE_PATH}/include) -``` - -Search for the required dynamic library in MindSpore. - -```cmake -find_library(MS_LIB libmindspore.so ${MINDSPORE_PATH}/lib) -file(GLOB_RECURSE MD_LIB ${MINDSPORE_PATH}/_c_dataengine*) -``` - -Use the specified source file to generate the target executable file and link the target file to the MindSpore library. - -```cmake -add_executable(resnet50_sample main.cc) -target_link_libraries(resnet50_sample ${MS_LIB} ${MD_LIB}) -``` - ->For details, see -> - -### Building Inference Code - -Go to the project directory `ascend910_resnet50_preprocess_sample` and set the following environment variables: - -> If the device is Ascend 310, go to the project directory `ascend310_resnet50_preprocess_sample`. The following code uses Ascend 910 as an example. By the way, MindSpore is supporting data preprocess + model inference in one key on Ascend 310 platform. If you are interented in it, kindly refer to [more details](https://www.mindspore.cn/docs/programming_guide/en/master/multi_platform_inference_ascend_310_mindir.html). - -```bash -# Control the log print level. 0 indicates DEBUG, 1 indicates INFO, 2 indicates WARNING (default value), 3 indicates ERROR, and 4 indicates CRITICAL. -export GLOG_v=2 - -# Select the Conda environment. -LOCAL_ASCEND=/usr/local/Ascend # Root directory of the running package - -# Library on which the running package depends -export LD_LIBRARY_PATH=${LOCAL_ASCEND}/ascend-toolkit/latest/fwkacllib/lib64:${LOCAL_ASCEND}/driver/lib64/common:${LOCAL_ASCEND}/driver/lib64/driver:${LOCAL_ASCEND}/opp/op_impl/built-in/ai_core/tbe/op_tiling:${LD_LIBRARY_PATH} - -# Libraries on which MindSpore depends -export LD_LIBRARY_PATH=`pip3 show mindspore-ascend | grep Location | awk '{print $2"/mindspore/lib"}' | xargs realpath`:${LD_LIBRARY_PATH} - -# Configure necessary environment variables. -export TBE_IMPL_PATH=${LOCAL_ASCEND}/ascend-toolkit/latest/opp/op_impl/built-in/ai_core/tbe # Path of the TBE operator -export ASCEND_OPP_PATH=${LOCAL_ASCEND}/ascend-toolkit/latest/opp # OPP path -export PATH=${LOCAL_ASCEND}/ascend-toolkit/latest/fwkacllib/ccec_compiler/bin/:${PATH} # Path of the TBE operator build tool -export PYTHONPATH=${TBE_IMPL_PATH}:${PYTHONPATH} # Python library that TBE depends on -``` - -Run the `cmake` command. In the command, `pip3` needs to be modified based on the actual situation: - -```bash -cmake . -DMINDSPORE_PATH=`pip3 show mindspore-ascend | grep Location | awk '{print $2"/mindspore"}' | xargs realpath` -``` - -Run the `make` command for building. - -```bash -make -``` - -After building, the executable file is generated in `ascend910_resnet50_preprocess_sample`. - -### Performing Inference and Viewing the Result - -After the preceding operations are complete, you can learn how to perform inference. - -Log in to the Ascend 910 environment, and create the `model` directory to store the `resnet50_imagenet.mindir` file, for example, `/home/HwHiAiUser/mindspore_sample/ascend910_resnet50_preprocess_sample/model`. -Create the `test_data` directory to store images, for example, `/home/HwHiAiUser/mindspore_sample/ascend910_resnet50_preprocess_sample/test_data`. -Then, perform the inference. - -```bash -./resnet50_sample -``` - -Inference is performed on all images stored in the `test_data` directory. For example, if there are 2 images whose label is 0 in the [ImageNet2012](http://image-net.org/download-images) validation set, the inference result is as follows: - -```text -Image: ./test_data/ILSVRC2012_val_00002138.JPEG infer result: 0 -Image: ./test_data/ILSVRC2012_val_00003014.JPEG infer result: 0 -``` - -## Mobile Device Inference - -MindSpore Lite is the device part of the device-edge-cloud AI framework MindSpore and can implement intelligent applications on mobile devices such as phones. MindSpore Lite provides a high-performance inference engine and ultra-lightweight solution. It supports mobile phone operating systems such as iOS and Android, LiteOS-embedded operating systems, various intelligent devices such as mobile phones, large screens, tablets, and IoT devices, and MindSpore/TensorFlow Lite/Caffe/ONNX model applications. - -The following provides a demo that runs on the Windows and Linux operating systems and is built based on the C++ API to help users get familiar with the on-device inference process. The demo uses the shuffled data as the input data, performs the inference on the MobileNetV2 model, and directly displays the output data on the computer. - -> For details about the complete instance running on the mobile phone, see [Android Application Development Based on JNI](https://www.mindspore.cn/lite/docs/en/master/quick_start/quick_start.html). - -### Model Conversion - -The format of a model needs to be converted before the model is used for inference on the device. Currently, MindSpore Lite supports four types of AI frameworks: MindSpore, TensorFlow Lite, Caffe, and ONNX. - -The following uses the [mobilenetv2.mindir](https://download.mindspore.cn/model_zoo/official/lite/mobilenetv2_openimage_lite/1.5/mobilenetv2.mindir) model trained by MindSpore as an example to describe how to generate the `mobilenetv2.ms` model used in the demo. - -> The following describes the conversion process. Skip it if you only need to run the demo. -> -> The following describes only the model used by the demo. For details about how to use the conversion tool, see [Converting Models for Inference](https://www.mindspore.cn/lite/docs/en/master/use/converter_tool.html#). - -- Download the conversion tool. - - Download the [conversion tool package](https://www.mindspore.cn/lite/docs/en/master/use/downloads.html) based on the OS in use, decompress the package to a local directory, obtain the `converter` tool, and configure environment variables. - -- Use the conversion tool. - - - For Linux - - Go to the directory where the `converter_lite` executable file is located, place the downloaded `mobilenetv2.mindir` model in the same path, and run the following command on the PC to convert the model: - - ```cpp - ./converter_lite --fmk=MINDIR --modelFile=mobilenetv2.mindir --outputFile=mobilenetv2 - ``` - - - For Windows - - Go to the directory where the `converter_lite` executable file is located, place the downloaded `mobilenetv2.mindir` model in the same path, and run the following command on the PC to convert the model: - - ```cpp - call converter_lite --fmk=MINDIR --modelFile=mobilenetv2.mindir --outputFile=mobilenetv2 - ``` - - - Parameter description - - During the command execution, three parameters are set. `--fmk` indicates the original format of the input model. In this example, this parameter is set to `MINDIR`, which is the export format of the MindSpore framework training model. `--modelFile` indicates the path of the input model. `--outputFile` indicates the output path of the model. The suffix `.ms` is automatically added to the converted model. - -### Environment Building and Running - -#### Building and Running the Linux System - -- Build. Renference [Building MindSpore Lite](https://mindspore.cn/lite/docs/en/master/use/build.html#environment-requirements) to get the Environment Requirements. - - Run the build script in the `mindspore/lite/examples/quick_start_cpp` directory to automatically download related files and build the demo. - - ```bash - bash build.sh - ``` - -- Inference - - After the build is complete, go to the `mindspore/lite/examples/quick_start_cpp/build` directory and run the following command to perform MindSpore Lite inference on the MobileNetV2 model. - - ```bash - ./mindspore_quick_start_cpp ../model/mobilenetv2.ms - ``` - - After the execution is complete, the following information is displayed, including the tensor name, tensor size, number of output tensors, and the first 50 pieces of data: - - ```text - tensor name is: Softmax-65 tensor size is: 4004 tensor elements num is: 1001 - output data is: 1.74225e-05 1.15919e-05 2.02728e-05 0.000106485 0.000124295 0.00140576 0.000185107 0.000762011 1.50996e-05 5.91942e-06 6.61469e-06 3.72883e-06 4.30761e-06 2.38897e-06 1.5163e-05 0.000192663 1.03767e-05 1.31953e-05 6.69638e-06 3.17411e-05 4.00895e-06 9.9641e-06 3.85127e-06 6.25101e-06 9.08853e-06 1.25043e-05 1.71761e-05 4.92751e-06 2.87637e-05 7.46446e-06 1.39375e-05 2.18824e-05 1.08861e-05 2.5007e-06 3.49876e-05 0.000384547 5.70778e-06 1.28909e-05 1.11038e-05 3.53906e-06 5.478e-06 9.76608e-06 5.32172e-06 1.10386e-05 5.35474e-06 1.35796e-05 7.12652e-06 3.10017e-05 4.34154e-06 7.89482e-05 1.79441e-05 - ``` - -#### Building and Running the Windows System - -- Build. Renference [Building MindSpore Lite](https://mindspore.cn/lite/docs/en/master/use/build.html#environment-requirements) to get the Environment Requirements. - - - Download the library: Manually download the MindSpore Lite model inference framework [mindspore-lite-{version}-win-x64.zip](https://www.mindspore.cn/lite/docs/en/master/use/downloads.html) whose hardware platform is CPU and operating system is Windows-x64. Copy the `libmindspore-lite.a` file in the decompressed `inference/lib` directory to the `mindspore/lite/examples/quick_start_cpp/lib` directory. Copy the `inference/include` directory to the `mindspore/lite/examples/quick_start_cpp/include` directory. - - - Download the model: Manually download the model file [mobilenetv2.ms](https://download.mindspore.cn/model_zoo/official/lite/mobilenetv2_openimage_lite/1.5/mobilenetv2.ms) and copy it to the `mindspore/lite/examples/quick_start_cpp/model` directory. - - > You can use the mobilenetv2.ms model file obtained in "Model Conversion". - - - Build: Run the build script in the `mindspore/lite/examples/quick_start_cpp` directory to automatically download related files and build the demo. - - ```bash - call build.bat - ``` - -- Inference - - After the build is complete, go to the `mindspore/lite/examples/quick_start_cpp/build` directory and run the following command to perform MindSpore Lite inference on the MobileNetV2 model. - - ```bash - call ./mindspore_quick_start_cpp.exe ../model/mobilenetv2.ms - ``` - - After the execution is complete, the following information is displayed, including the tensor name, tensor size, number of output tensors, and the first 50 pieces of data: - - ```text - tensor name is: Softmax-65 tensor size is: 4004 tensor elements num is: 1001 - output data is: 1.74225e-05 1.15919e-05 2.02728e-05 0.000106485 0.000124295 0.00140576 0.000185107 0.000762011 1.50996e-05 5.91942e-06 6.61469e-06 3.72883e-06 4.30761e-06 2.38897e-06 1.5163e-05 0.000192663 1.03767e-05 1.31953e-05 6.69638e-06 3.17411e-05 4.00895e-06 9.9641e-06 3.85127e-06 6.25101e-06 9.08853e-06 1.25043e-05 1.71761e-05 4.92751e-06 2.87637e-05 7.46446e-06 1.39375e-05 2.18824e-05 1.08861e-05 2.5007e-06 3.49876e-05 0.000384547 5.70778e-06 1.28909e-05 1.11038e-05 3.53906e-06 5.478e-06 9.76608e-06 5.32172e-06 1.10386e-05 5.35474e-06 1.35796e-05 7.12652e-06 3.10017e-05 4.34154e-06 7.89482e-05 1.79441e-05 - ``` - -### Inference Code Parsing - -The following analyzes the inference process in the demo source code and shows how to use the C++ API. - -#### Model Reading - -Read the MindSpore Lite model from the file system and store it in the memory buffer. - -```c++ -// Read model file. -size_t size = 0; -char *model_buf = ReadFile(model_path, &size); -if (model_buf == nullptr) { - std::cerr << "Read model file failed." << std::endl; - return -1; -} -``` - -#### Creating and Configuring Context - -```c++ -// Create and init context, add CPU device info -auto context = std::make_shared(); -if (context == nullptr) { - std::cerr << "New context failed." << std::endl; - return -1; -} -auto &device_list = context->MutableDeviceInfo(); -auto device_info = std::make_shared(); -if (device_info == nullptr) { - std::cerr << "New CPUDeviceInfo failed." << std::endl; - return -1; -} -device_list.push_back(device_info); -``` - -#### Model Creating Loading and Building - -Use Build of [Model](https://www.mindspore.cn/lite/api/en/master/generate/classmindspore_Model.html#class-model) to load the model directly from the memory buffer and build the model. - -```c++ -// Create model -auto model = new (std::nothrow) mindspore::Model(); -if (model == nullptr) { - std::cerr << "New Model failed." << std::endl; - return -1; -} -// Build model -auto build_ret = model->Build(model_buf, size, mindspore::kMindIR, context); -delete[](model_buf); -if (build_ret != mindspore::kSuccess) { - std::cerr << "Build model error " << build_ret << std::endl; - return -1; -} -``` - -There is another method that uses Load of [Serialization](https://www.mindspore.cn/lite/api/en/master/generate/classmindspore_Serialization.html#class-serialization) to load [Graph](https://www.mindspore.cn/lite/api/en/master/generate/classmindspore_Graph.html#class-graph) and use Build of [Model](https://www.mindspore.cn/lite/api/en/master/generate/classmindspore_Model.html#class-model) to build the model. - -```c++ -// Load graph. -mindspore::Graph graph; -auto load_ret = mindspore::Serialization::Load(model_buf, size, mindspore::kMindIR, &graph); -delete[](model_buf); -if (load_ret != mindspore::kSuccess) { - std::cerr << "Load graph file failed." << std::endl; - return -1; -} - -// Create model -auto model = new (std::nothrow) mindspore::Model(); -if (model == nullptr) { - std::cerr << "New Model failed." << std::endl; - return -1; -} -// Build model -mindspore::GraphCell graph_cell(graph); -auto build_ret = model->Build(graph_cell, context); -if (build_ret != mindspore::kSuccess) { - delete model; - std::cerr << "Build model error " << build_ret << std::endl; - return -1; -} -``` - -#### Model Inference - -Model inference includes input data injection, inference execution, and output obtaining. In this example, the input data is randomly generated, and the output result is printed after inference. - -```c++ -auto inputs = model->GetInputs(); -// Generate random data as input data. -auto ret = GenerateInputDataWithRandom(inputs); -if (ret != mindspore::kSuccess) { - delete model; - std::cerr << "Generate Random Input Data failed." << std::endl; - return -1; -} -// Get Output -auto outputs = model->GetOutputs(); - -// Model Predict -auto predict_ret = model->Predict(inputs, &outputs); -if (predict_ret != mindspore::kSuccess) { - delete model; - std::cerr << "Predict model error " << predict_ret << std::endl; - return -1; -} - -// Print Output Tensor Data. -for (auto tensor : outputs) { - std::cout << "tensor name is:" << tensor.Name() << " tensor size is:" << tensor.DataSize() - << " tensor elements num is:" << tensor.ElementNum() << std::endl; - auto out_data = reinterpret_cast(tensor.Data().get()); - std::cout << "output data is:"; - for (int i = 0; i < tensor.ElementNum() && i <= 50; i++) { - std::cout << out_data[i] << " "; - } - std::cout << std::endl; -} -``` - -#### Memory Release - -If the inference process of MindSpore Lite is complete, release the created `Model`. - -```c++ -// Delete model. -delete model; -``` diff --git a/tutorials/source_en/introduction.md b/tutorials/source_en/introduction.md deleted file mode 100644 index 043c72d75e..0000000000 --- a/tutorials/source_en/introduction.md +++ /dev/null @@ -1,71 +0,0 @@ -# Overview - -`Ascend` `GPU` `CPU` `Device` `Beginner` - - - -The following describes the Huawei AI full-stack solution and introduces the position of MindSpore in the solution. Developers who are interested in MindSpore can visit the [MindSpore community](https://gitee.com/mindspore/mindspore) and click [Watch, Star, and Fork](https://gitee.com/mindspore/mindspore). - -## Introduction to Huawei Ascend AI Full-Stack Solution - -Ascend computing is a full-stack AI computing infrastructure and application based on the Ascend series processors. It includes the Ascend series chips, Atlas series hardware, CANN chip enablement, MindSpore AI framework, ModelArts, and MindX application enablement. - -Huawei Atlas AI computing solution is based on Ascend series AI processors and uses various product forms such as modules, cards, edge stations, servers, and clusters to build an all-scenario AI infrastructure solution oriented to device, edge, and cloud. It covers data center and intelligent edge solutions, as well as the entire inference and training processes in the deep learning field. - -- **Atlas series**: provides AI training, inference cards, and training servers ([learn more](https://e.huawei.com/en/products/cloud-computing-dc/atlas/)). -- **CANN at heterogeneous computing architecture**: a driver layer that enables chips ([learn more](https://www.hiascend.com/en/software/cann)). -- **MindSpore**: all-scenario AI framework ([learn more](https://www.mindspore.cn/en)). -- **MindX SDK**: Ascend SDK that provides application solutions ([learn more](https://www.hiascend.com/en/software/mindx-sdk)). -- **ModelArts**: HUAWEI CLOUD AI development platform ([learn more](https://www.huaweicloud.com/product/modelarts.html)). -- **MindStudio**: E2E development toolchain that provides one-stop IDE for AI development ([learn more](https://www.hiascend.com/en/software/mindstudio)). - -For details, click [Huawei Ascend official website](https://e.huawei.com/en/products/servers/ascend). - -## MindSpore Introduction - -MindSpore is a deep learning framework in all scenarios, aiming to achieve easy development, efficient execution, and all-scenario coverage. Easy development features friendly APIs and easy debugging. Efficient execution is reflected in computing, data preprocessing, and distributed training. All-scenario coverage means that the framework supports cloud, edge, and device scenarios. - -The following figure shows the overall MindSpore architecture: - -- **ModelZoo**: ModelZoo provides available deep learning algorithm networks, and more developers are welcome to contribute new networks. -- **MindSpore Extend**: The expansion package of MindSpore expands the support of new fields, such as GNN/deep probabilistic programming/reinforcement learning, etc. We look forward to more developers to contribute and build together. -- **MindScience**:MindScience is a scientific computing kits for various industries based on the converged MindSpore framefork. It contains the industry-leading datasets, basic network structures, high-precision pre-trained models, and pre-and post-processing tools that accelerate application development of the scientific computing. -- **MindExpression**: Python-based frontend expression and programming interfaces. In the future, more frontends based on C/C++ will be provided. Cangjie, Huawei's self-developed programming language frontend, is now in the pre-research phase. In addition, Huawei is working on interconnection with third-party frontends to introduce more third-party ecosystems. -- **MindData**: Provides functions and programming interfaces such as efficient data processing, loading of commonly used datasets, and supports users' flexible definition processing registration and pipeline parallel optimization -- **MindCompiler**: The core compiler of the layer, which implements three major functions based on the unified device-cloud MindIR, including hardware-independent optimization (type derivation, automatic differentiation, and expression simplification), hardware-related optimization (automatic parallelism, memory optimization, graph kernel fusion, and pipeline execution) and optimization related to deployment and inference (quantification and pruning). -- **MindRT**: MindSpore runtime system, which covers the cloud-side host-side runtime system, the device-side and the lightweight runtime system of the smaller IoT. -- **MindInsight**: Provides MindSpore's visual debugging and tuning tools, and supports users to debug and tune the training network. -- **MindArmour**: For enterprise-level applications, security and privacy protection related enhancements, such as anti-robustness, model security testing, differential privacy training, privacy leakage risk assessment, data drift detection, etc. technology. - -![MindSpore](images/introduction2.png) - -### API Level Structure - -To support network building, entire graph execution, subgraph execution, and single-operator execution, MindSpore provides users with three levels of APIs. In ascending order, these are Low-Level Python API, Medium-Level Python API, and High-Level Python API. - -![MindSpore API](images/introduction3.png) - -- High-Level Python API - - High-level APIs are at the first layer. Based on the medium-level API, these advanced APIs include training and inference management, mixed precision training, and debugging and optimization, enabling users to control the execution process of the entire network and implement training, inference, and optimization of the neural network. For example, by utilizing the Model API, users can specify the neural network model to be trained as well as related training settings, train the neural network model, and debug the neural network performance through the Profiler API. - -- Medium-Level Python API - - Medium-level APIs are at the second layer, which encapsulates low-cost APIs and provides such modules as the network layer, optimizer, and loss function. Users can flexibly build neural networks and control execution processes through the medium-level API to quickly implement model algorithm logic. For example, users can call the Cell API to build neural network models and computing logic, add the loss function and optimization methods to the neural network model by using the loss module and Optimizer API, and use the dataset module to process data for model training and derivation. - -- Low-Level Python API - - Low-level APIs are at the third layer, including tensor definition, basic operators, and automatic differential modules, enabling users to easily define tensors and perform derivative computation. For example, users can customize tensors by using the Tensor API, and use the GradOperation operator in the ops.composite module to calculate the derivative of the function at a specified position. - -## Joining the Community - -Welcome every developer to the MindSpore community and contribute to this all-scenario AI framework. - -- **MindSpore official website**: provides comprehensive MindSpore information, including installation, tutorials, documents, community, resources, and news ([learn more](https://www.mindspore.cn/en)). -- **MindSpore code**: - - - [MindSpore Gitee](https://gitee.com/mindspore/mindspore): Top 1 Gitee open-source project in 2020, where you can track the latest progress of MindSpore by clicking Watch, Star, and Fork, discuss issues, and commit code. - - - [MindSpore Github](https://github.com/mindspore-ai/mindspore): MindSpore code image of Gitee. Developers who are accustomed to using GitHub can learn MindSpore and view the latest code implementation here. - -- **MindSpore forum**: We are dedicated to serving every developer. You can find your voice in MindSpore, regardless of whether you are an entry-level developer or a master. Let's learn and grow together. ([Learn more](https://bbs.huaweicloud.com/forum/forum-1076-1.html)) diff --git a/tutorials/source_en/linear_regression.ipynb b/tutorials/source_en/linear_regression.ipynb deleted file mode 100644 index 62e7d31f89..0000000000 --- a/tutorials/source_en/linear_regression.ipynb +++ /dev/null @@ -1,528 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "source": [ - "# Simple Linear Function Fitting\n", - "\n", - "Author: [Yi Yang](https://github.com/helloyesterday)    Editor: [Mingfu Lv](https://gitee.com/lvmingfu)\n", - "\n", - "[![Download Notebook](https://gitee.com/mindspore/docs/raw/master/resource/_static/logo_notebook_en.png)](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/master/tutorials/en/mindspore_linear_regression.ipynb)  [![View Source On Gitee](https://gitee.com/mindspore/docs/raw/master/resource/_static/logo_source_en.png)](https://gitee.com/mindspore/docs/blob/master/tutorials/source_en/linear_regression.ipynb)" - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "## Overview\n", - "\n", - "Regression algorithms usually use a series of properties to predict a value, and the predicted values are consecutive. For example, the price of a house is predicted based on some given feature data of the house, such as area and the number of bedrooms; or future temperature conditions are predicted by using the temperature change data and satellite cloud images in the last week. If the actual price of the house is CNY5 million, and the value predicted through regression analysis is CNY4.99 million, the regression analysis is considered accurate. For machine learning problems, common regression analysis includes linear regression, polynomial regression, and logistic regression. This example describes the linear regression algorithms and how to use MindSpore to perform linear regression AI training.\n", - "\n", - "The whole process is as follows:\n", - "\n", - "1. Generate datasets.\n", - "2. Define a training network.\n", - "3. Define and associate the forward and backward propagation networks.\n", - "4. Prepare for fitting process visualization.\n", - "5. Perform training.\n", - "\n", - "> This document is applicable to CPU, GPU and Ascend environments. The source code address of this example: .\n", - "\n", - "## Environment Preparation\n", - "\n", - "Complete MindSpore running configuration." - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 1, - "source": [ - "from mindspore import context\n", - "\n", - "context.set_context(mode=context.GRAPH_MODE, device_target=\"CPU\")" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "`GRAPH_MODE`: graph mode.\n", - "\n", - "`device_target`: sets the MindSpore training hardware to CPU.\n", - "\n", - "> Third-party support package: `matplotlib` and `IPython`. If this package is not installed, run the `pip install matplotlib IPython` command to install it first.\n", - "\n", - "## Generating Datasets\n", - "\n", - "### Defining the Dataset Generation Function\n", - "\n", - "`get_data` is used to generate training and test datasets. Since linear data is fitted, the required training datasets should be randomly distributed around the objective function. Assume that the objective function to be fitted is $f(x)=2x+3$. $f(x)=2x+3+noise$ is used to generate training datasets, and `noise` is a random value that complies with standard normal distribution rules." - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 2, - "source": [ - "import numpy as np\n", - "\n", - "def get_data(num, w=2.0, b=3.0):\n", - " for _ in range(num):\n", - " x = np.random.uniform(-10.0, 10.0)\n", - " noise = np.random.normal(0, 1)\n", - " y = x * w + b + noise\n", - " yield np.array([x]).astype(np.float32), np.array([y]).astype(np.float32)" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "Use `get_data` to generate 50 groups of test data and visualize them." - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 3, - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "eval_data = list(get_data(50))\n", - "x_target_label = np.array([-10, 10, 0.1])\n", - "y_target_label = x_target_label * 2 + 3\n", - "x_eval_label, y_eval_label = zip(*eval_data)\n", - "\n", - "plt.scatter(x_eval_label, y_eval_label, color=\"red\", s=5)\n", - "plt.plot(x_target_label, y_target_label, color=\"green\")\n", - "plt.title(\"Eval data\")\n", - "plt.show()" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "In the preceding figure, the green line indicates the objective function, and the red points indicate the verification data `eval_data`.\n", - "\n", - "### Defining the Data Argumentation Function\n", - "\n", - "Use the MindSpore data conversion function `GeneratorDataset` to convert the data type to that suitable for MindSpore training, and then use `batch` and `repeat` to perform data argumentation. The operation is described as follows:\n", - "\n", - "- `ds.GeneratorDataset`: converts the generated data into a MindSpore dataset and saves the x and y values of the generated data to arrays of `data` and `label`.\n", - "- `batch`: combines `batch_size` pieces of data into a batch.\n", - "- `repeat`: multiplies the number of datasets." - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 4, - "source": [ - "from mindspore import dataset as ds\n", - "\n", - "def create_dataset(num_data, batch_size=16, repeat_size=1):\n", - " input_data = ds.GeneratorDataset(list(get_data(num_data)), column_names=['data', 'label'])\n", - " input_data = input_data.batch(batch_size)\n", - " input_data = input_data.repeat(repeat_size)\n", - " return input_data" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "Use the dataset argumentation function to generate training data and view the training data format." - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 5, - "source": [ - "data_number = 1600\n", - "batch_number = 16\n", - "repeat_number = 1\n", - "\n", - "ds_train = create_dataset(data_number, batch_size=batch_number, repeat_size=repeat_number)\n", - "print(\"The dataset size of ds_train:\", ds_train.get_dataset_size())\n", - "dict_datasets = next(ds_train.create_dict_iterator())\n", - "\n", - "print(dict_datasets.keys())\n", - "print(\"The x label value shape:\", dict_datasets[\"data\"].shape)\n", - "print(\"The y label value shape:\", dict_datasets[\"label\"].shape)" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "The dataset size of ds_train: 100\n", - "dict_keys(['data', 'label'])\n", - "The x label value shape: (16, 1)\n", - "The y label value shape: (16, 1)\n" - ] - } - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "Use the defined `create_dataset` to perform argumentation on the generated 1600 data records and set them into 100 datasets with the shape of 16 x 1.\n", - "\n", - "## Defining the Training Network\n", - "\n", - "In MindSpore, use `nn.Dense` to generate a linear function model of single data input and single data output.\n", - "\n", - "$$f(x)=wx+b\\tag{1}$$\n", - "\n", - "Use the Normal operator to randomly initialize the weights $w$ and $b$." - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 6, - "source": [ - "from mindspore.common.initializer import Normal\n", - "from mindspore import nn\n", - "\n", - "class LinearNet(nn.Cell):\n", - " def __init__(self):\n", - " super(LinearNet, self).__init__()\n", - " self.fc = nn.Dense(1, 1, Normal(0.02), Normal(0.02))\n", - "\n", - " def construct(self, x):\n", - " x = self.fc(x)\n", - " return x" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "Call the network to view the initialized model parameters." - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 7, - "source": [ - "net = LinearNet()\n", - "model_params = net.trainable_params()\n", - "for param in model_params:\n", - " print(param, param.asnumpy())" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Parameter (name=fc.weight, shape=(1, 1), dtype=Float32, requires_grad=True) [[0.00422094]]\n", - "Parameter (name=fc.bias, shape=(1,), dtype=Float32, requires_grad=True) [-0.01474356]\n" - ] - } - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "After initializing the network model, visualize the initialized network function and training dataset to understand the model function before fitting." - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 8, - "source": [ - "from mindspore import Tensor\n", - "\n", - "x_model_label = np.array([-10, 10, 0.1])\n", - "y_model_label = (x_model_label * Tensor(model_params[0]).asnumpy()[0][0] +\n", - " Tensor(model_params[1]).asnumpy()[0])\n", - "plt.axis([-10, 10, -20, 25])\n", - "plt.scatter(x_eval_label, y_eval_label, color=\"red\", s=5)\n", - "plt.plot(x_model_label, y_model_label, color=\"blue\")\n", - "plt.plot(x_target_label, y_target_label, color=\"green\")\n", - "plt.show()" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "As shown in the preceding figure, the initialized model function in blue differs greatly from the objective function in green.\n", - "\n", - "## Defining and Associating the Forward and Backward Propagation Networks\n", - "\n", - "Define the loss function of the model. The mean squared error (MSE) method is used to determine the fitting effect. The smaller the MSE value difference, the better the fitting effect. The loss function formula is as follows:\n", - "\n", - "$$J(w)=\\frac{1}{2m}\\sum_{i=1}^m(h(x_i)-y^{(i)})^2\\tag{2}$$\n", - "\n", - "Assuming that the $i$th data record in the training data is $(x_i,y^{(i)})$, parameters in formula 2 are described as follows:\n", - "\n", - "- $J(w)$ specifies the loss value.\n", - "\n", - "- $m$ specifies the amount of sample data. In this example, the value of $m$ is `batch_number`.\n", - "\n", - "- $h(x_i)$ is a predicted value obtained after the $x_i$ value of the $i$th data record is substituted into the model network (formula 1).\n", - "\n", - "- $y^{(i)}$ is the $y^{(i)}$ value (label value) of the $i$th data record.\n", - "\n", - "### Defining the Forward Propagation Network\n", - "\n", - "A forward propagation network consists of two parts:\n", - "\n", - "1. Bring parameters into the model network to obtain the predicted value.\n", - "2. Use the predicted value and training data to compute the loss value.\n", - "\n", - "The following method is used in MindSpore:" - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 9, - "source": [ - "net = LinearNet()\n", - "net_loss = nn.loss.MSELoss()" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "### Defining the Backward Propagation Network\n", - "\n", - "The objective of the backward propagation network is to continuously change the weight value to obtain the minimum loss value. Generally, the weight update formula is used in the linear network:\n", - "\n", - "$$w_{t}=w_{t-1}-\\alpha\\frac{\\partial{J(w_{t-1})}}{\\partial{w}}\\tag{3}$$\n", - "\n", - "Parameters in formula 3 are described as follows:\n", - "\n", - "- $w_{t}$ indicates the weight after training steps.\n", - "- $w_{t-1}$ indicates the weight before training steps.\n", - "- $\\alpha$ indicates the learning rate.\n", - "- $\\frac{\\partial{J(w_{t-1}\\ )}}{\\partial{w}}$ is the differentiation of the loss function to the weight $w_{t-1}$.\n", - "\n", - "After all weight values in the function are updated, transfer the values to the model function. This process is the backward propagation. To implement this process, the optimizer function in MindSpore is required." - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 10, - "source": [ - "opt = nn.Momentum(net.trainable_params(), learning_rate=0.005, momentum=0.9)" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "### Associating the Forward and Backward Propagation Networks\n", - "\n", - "After forward propagation and backward propagation are defined, call the `Model` function in MindSpore to associate the previously defined networks, loss functions, and optimizer function to form a complete computing network." - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 11, - "source": [ - "from mindspore import Model\n", - "\n", - "model = Model(net, net_loss, opt)" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "## Preparation for Fitting Process Visualization\n", - "\n", - "### Defining the Visualization Function\n", - "\n", - "To make the entire training process easier to understand, the test data, objective function, and model network of the training process need to be visualized. The following defines a visualization function which is called after each training step to display a fitting process of the model network." - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 12, - "source": [ - "import matplotlib.pyplot as plt\n", - "import time\n", - "\n", - "def plot_model_and_datasets(net, eval_data):\n", - " weight = net.trainable_params()[0]\n", - " bias = net.trainable_params()[1]\n", - " x = np.arange(-10, 10, 0.1)\n", - " y = x * Tensor(weight).asnumpy()[0][0] + Tensor(bias).asnumpy()[0]\n", - " x1, y1 = zip(*eval_data)\n", - " x_target = x\n", - " y_target = x_target * 2 + 3\n", - "\n", - " plt.axis([-11, 11, -20, 25])\n", - " plt.scatter(x1, y1, color=\"red\", s=5)\n", - " plt.plot(x, y, color=\"blue\")\n", - " plt.plot(x_target, y_target, color=\"green\")\n", - " plt.show()\n", - " time.sleep(0.2)" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "### Defining the Callback Function\n", - "\n", - "MindSpore provides tools to customize the model training process. The following calls the visualization function in `step_end` to display the fitting process. For more information, see [Customized Debugging Information](https://www.mindspore.cn/docs/programming_guide/en/master/custom_debugging_info.html#callback).\n", - "\n", - "- `display.clear_output`:Clear the printed content to achieve dynamic fitting effect." - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 13, - "source": [ - "from IPython import display\n", - "from mindspore.train.callback import Callback\n", - "\n", - "class ImageShowCallback(Callback):\n", - " def __init__(self, net, eval_data):\n", - " self.net = net\n", - " self.eval_data = eval_data\n", - "\n", - " def step_end(self, run_context):\n", - " plot_model_and_datasets(self.net, self.eval_data)\n", - " display.clear_output(wait=True)" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "## Performing Training\n", - "\n", - "After the preceding process is complete, use the training parameter `ds_train` to train the model. In this example, `model.train` is called. The parameters are described as follows:\n", - "\n", - "- `epoch`: Number of times that the entire dataset is trained.\n", - "- `ds_train`: Training dataset.\n", - "- `callbacks`: Required callback function during training.\n", - "- `dataset_sink_mode`: Dataset offload mode, which supports the Ascend and GPU computing platforms. In this example, this parameter is set to False for the CPU computing platform." - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 14, - "source": [ - "epoch = 1\n", - "imageshow_cb = ImageShowCallback(net, eval_data)\n", - "model.train(epoch, ds_train, callbacks=[imageshow_cb], dataset_sink_mode=False)\n", - "\n", - "plot_model_and_datasets(net, eval_data)\n", - "for param in net.trainable_params():\n", - " print(param, param.asnumpy())" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXkAAAD8CAYAAACSCdTiAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Z1A+gAAAACXBIWXMAAAsTAAALEwEAmpwYAAArxklEQVR4nO3dd3xUVfrH8c8TQhMbCAEUEOwCFiQioqwodl354S4ssisqSkCFte2iomsBsSKg9FBFOhI6SEfpEHpXOqGE0HsgmfP7YwaNMYGEmckkw/f9euWVO/feuefJnckzZ8499xxzziEiIuEpItQBiIhI8CjJi4iEMSV5EZEwpiQvIhLGlORFRMKYkryISBjzO8mbWVkzm2Fma8xstZm95lv/kZntMLNlvp/H/Q9XRESyw/ztJ29mpYHSzrklZnYJsBj4P6A+cNQ5187vKEVE5LxE+nsA59wuYJdv+YiZrQWu8ve4IiLiP79r8n84mFl54GegMvAm8DxwGIgH3nLOHcjgOTFADECRIkWq3nTTTQGLR0TkQrB48eK9zrkSGW0LWJI3s4uBn4C2zrk4MysJ7AUc0AZvk07jsx0jOjraxcfHByQeEZELhZktds5FZ7QtIL1rzCw/MAIY6JyLA3DOJTrnUp1zHqAnUC0QZYmISNYFoneNAb2Btc659mnWl06zW11glb9liYhI9vh94RW4B3gWWGlmy3zrWgHPmNnteJtrtgBNA1CWiIhkQyB618wGLINNE/w9toiI+Ed3vIqIhDEleRGRMKYkLyISxpTkRURCKNhTsCrJi4iEgHOONiMGU/TtKuw+8KfBAAJGSV5E5Gw8HkhMhADWuNfs2EaF9/7KB6sacvyQh2V1GnvLCQIleRGRzHg8cP/9UKYM1Kp19kSchQ+DVE8qMb2/oXK3imy1GdScVJfEXpt4dN44SEoKfPwoyYuIZC4pCebOhZQU7+/MEvG5Pgw8HmbMmUlUqxr0THidIvtqEld7FT/n30fRiGSoUQOiooLyJwTijlcRkfAUFeVNwHPnnj0RZ/RhULIkAMdPHqNeoyeZcNNs8BSlng3g+44NKVjQoNYM775RUWAZ3VPqPyV5EZHMmMGMLCTitB8Gd94JJbyj/vafPY1mY2M4UWkTJZc+xuipm7hr44NQ0HeciIjfPgyCRUleRORsspKIzWDaNKhZExYuZPeD9/HE/dewxNOfiOTreGNuU9rN60PEPXcHrVkmM0ryIiKBsG8fLn4RbSuW4+Po1aScns+Ne1sx/p33ubZMQUj6OKjNMplRkhcRCYA1Kcd54rnKbCm7nPw77qD9fX14o/Vtv+8Q5GaZzCjJi4j4IcWTwivffUOvjR/goiK4Z287xnz+GsWK5Y70mjuiEBHJg6avXUq9/k3YX2gxRfY8Sb96Xfn7Q2VDHdYfBGJmqLJmNsPM1pjZajN7zbe+mJlNMbNffb+L+h+uiEjoHTt1nCc6/pfaQ+5kf0oCf/cMY++3Y3JdgofA3AyVArzlnKsIVAdeNbOKwDvANOfc9cA032MRkTyt/5zJlPiwMhMOtSNqR2PmNFzL8I/rUahQzl5QzapAzAy1C9jlWz5iZmuBq4A6QC3fbt8BM4G3/S1PRCQUdh1K4q+d32RxygDs+A38O2om7XvcR758oY7s7ALaJm9m5YEqwAKgpO8DAGA3EJpLyyIifnDO0Xbc93w8/01S8h3m+sT/Mf6dVlxfoVCoQ8uSgCV5M7sYGAG87pw7bGn6gjrnnJllOGqPmcUAMQDlypULVDgiIn5bvXMjT3ZvxpZ8U8m/rwbt7onlzY8r5XRXd78EZIAyM8uPN8EPdM7F+VYnmllp3/bSwJ6Mnuuci3XORTvnokv4bgUWEclR6UaQPJ16mpjvvuSWbrewJWUBd+/vys62s3jr2byV4CEwvWsM6A2sdc61T7NpDPCcb/k5YLS/ZYmIBFy6ESSnrVlIqQ/upOeWt7lox8MMuXcNc795meJX5M1BewMR9T3As8ADZrbM9/M48DnwkJn9CjzoeywikvPONta7bwTJIxEpPHlRIg8OvZv9yXuoO/U1kvpP4x9f/DNoE3rkhED0rpkNZPYFpra/xxcR8cuZmvqZ4YJnzPAOOnZGVBT9H7mLZtf/yonL11NiSzNGNGhJzW9ugNQ/Dx2c1+TN7x8iIll1lok/dh5KpOrnDXnuzjmcTLmCFoVnsbNnN2o+WA6KFPHuVKQIFC+e+fGDMD1gICnJi0h4OzPWe2TkbxN/OOdoM64P5b68mSXH47h2+8eseW0p37a8l8hIYO9eOHrU+/yjR72PM5Kd6QFDRGPXiEh4Szfxx+rdG3iiRwxbbSaRSTX5onos/2190x97zURFwT33+DUjVG6hJC8i4S8iglPFi9J84Gf0+qU17nQh7jocy+hPXqRkVAYNGuczI1QQ52n1h5K8iIS9aesWUH/AS+zPv4qLtv+dnk9/S8O/lj77k7I6I1RWPgxCSEleRMLWkeQjNOj5HhP2dobjV1En/2gGdn7qt2uqAZED87T6Q0leRHIvj+e8a8n95o3llXGvcCL/Dq7Y9Co/vNyWWndfGqRAcy/1rhGR3Ok8e67sOLSL6C/q88Lkpzh58HJeKTiXXb07ZZ7gc3kXSH8pyYtI7nSW/u0Z8TgPrcfHcvVXN7P46BgqbG7Lqn8vpsu71cmfP7Mn5f4ukP5SkheR3CmD/u2ZWbFrHde0rsWH8U2x3VX4tOwKNvZtRcUbC5y9jGx+kORFapMXkdwpCz1XTqWe4tXBn9P7l7a4U0W480BvxnzyAqVKZbH9Pg90gfSXkryI5F5n6bkyZd0cGgyMYX/kGgpvaUCPuh15tm42e7nkgS6Q/lKSF5E85dDJQzTs8y4TkrrB0XI8aeMZ1OlRLjmZ5L14mt1Encu7QPpLbfIikmf0nT+S0p9UZEJiD4r98jpTn17N2HaPcslT4X3x1B+qyYtIrpdwaAd1erRgyYmR2P7baFpqFN/2vZMCBfB2f8zl48eEkpK8iORaHufhkx970HruO6S6U5Tf1JYx7/2HWyql6TVzAVw89UdAkryZ9QGeBPY45yr71n0ENAHO9Elq5ZybEIjyRCT8Ld+1mjq9YtjqmUu+HQ/SZmlVWq38iIgdk/448ccFcPHUH4GqyfcDOgP9063v4JxrF6AyROQCcDLlJC2GfUrv9Z/jTl5K1b3fMarFo5SpdlXmMzWF+cVTfwQkyTvnfjaz8oE4lohcuCat+5lnBsVwIN96Cm/4F13qtOeF+iW8vWbUJHNegt0m39zMGgHxwFvOuQPpdzCzGCAGoFy5ckEOR0Ryo4MnD9Kwb0sm7ukJh8vzuOdHBnZ5hMsv9+2gJpnzFswulN2Aa4HbgV3A1xnt5JyLdc5FO+eiS5QoEcRwRCS3cc7Re/5wrmx7MxN396bo2v/wY51VjP82TYI/40yTjBJ8tgStJu+cSzyzbGY9gXHBKktE8p5tB7fzfz1fZenxsZB0By+WGE/nfndQqFCoIwsvQUvyZlbaObfL97AusCpYZYlI3pHqSaXNpK58Mq8Vqakeym1sx6h3X6PKberRHQyB6kI5GKgFFDezBOBDoJaZ3Q44YAvQNBBliUjetWzXSur0asI2zwLybXuED2/vxv9aVyBfvlBHFr4C1bvmmQxW9w7EsUUk7ztx+gTNf2hD33Vf4U4U5fYf/8Oowpu5us/VGlwlyPT9SESC6sd1M2g4OIYDERsotP45Oo07wovH2mGRkRqCIAfoM1REgmL/if081r0xjw19gAMHHY8kTmVHl768VHWvN8Grv3uOUE1eRALKOUfvhUNpMf41Tto+Ll/zDgObfMDjDxf27qD+7jlKSV5EAmbLga3U7f0yy45NhN138kKxSXT+7nYuuijNThqCIEepuUZEss7j8Q7t69wfVqd6UvlwYgeu61CRZQd+psz0d1nU10Ofea9xUSGN7x5KSvIikjUeD9z/58k5luxcxjWfVaf1wjdxW2rRKv8CNs9pT3TK4rCdHDsvUXONiGRNUtIfJuc4vnMrLWZ1p8+6r+F4cW5JGMrIT+px7TXAjLs0mFguoSQvIlmTZnKO8Y9X5tleD3LANlFw7Ut0fPxLmn5Z9PfrqBldXPV4dME1BNRcIyJZY8be8cN59OunefKOZRzYF8mDCTPY3qUnzZ5Pk+AzSuaZNPVI8CnJi8g5OeeInT+Asl9VYtLeOC5b9j6jH1vOlJ61+MPgsZkl83RNPWqnzzlqrhGRs9p0YBN/6/Myy45Ohp3VefaynnT9vjIXX5zBzhkl85IlNQ9rCCnJi0iGUjwptJ7ckU/nfUDq6UiuXNuZEe82o3q1s4wmllky16QfIaMkLyJ/smjHYv7WrwnbU5YSseEp3qnchdbDypA//zmeeLZkrpugQkJJXkR+c+zUMZrHfUC/dR3haBSVtv5AXNunueGGbNS8lcxzFSV5EQFg7NofaTSsGQfZSoGVTWn36Oc0/+pytazkcYGaNKQP8CSwxzlX2beuGDAUKI930pD6GU3kLSKhtefYHp4d+AaTdw2CpJu4/+gsBnW5l1KlQh2ZBEKgulD2Ax5Nt+4dYJpz7npgmu+xiOQSzjm6z+/H1V/ezOSE4Vy6+CNGPLSM6f2U4MNJoGaG+tnMyqdbXQfvlIAA3wEzgbcDUZ6IZEMGNydt2L+Bv/Vryooj0yHhHp65uCfdB9zMpZdm/hzJm4J5M1TJNBN57wYyvBJjZjFmFm9m8Um6QUIksNLdnHT6dDLv//g5N31zCyuS4ikd351ZjX9m0DfpErzuTg0bOXLh1TnnzMxlsi0WiAWIjo7OcB8ROU9pbk5asHkO9T6vynbPauyXp3nrpk60/eFKChbM/Dl/uKFJ8qRgJvlEMyvtnNtlZqWBPUEsS0QyamKJiuJIzWr8u9Aa+lU7BAcPctOmkcR9+n/cfHMmx9HdqWElmM01Y4DnfMvPAaODWJbIhS2TJpbR68ZT9r7t9Kt2iPzLXqb9tWtYPeIsCR5+v6EpIQFmzlSbfB4XqC6Ug/FeZC1uZgnAh8DnwDAzexHYCtQPRFkikoF0TSy7t66m0dRPmLJzGOypRM0Dcxjc5W6uuiqLx9MNTWEjUL1rnslkU+1AHF9EzsHXxOLmzqHb09fz5nd/ITn1OBcvaUPP51vyj78XUIX8AqU7XkXCgRnrh3en/ndNWHF8Dmy5j3rWkdgBt3F5UWX3C5mSvEgedyr1FB9N+ZIv5n2CJ7kwJVfEMnjHCu5fcydsrOFtX4/Q1BEXKiV5kTxs7rZ5/GNgExJOrcbW1ue1G77h825GoeteURdIAZTkRfKkw8mHaTGqFf3XdoXDZbj+17GM+PRJbrkFcE5dIOU3SvIieUzcmlE0/qE5hzw7iVzSgra1P+Gtry4h35m5PDRBh6ShJC+SR+w8spNGQ1owbWcc7L6VGvviGNSpGldfncHO6gIpPkryIrmcx3noPC+WlpPfJjnlFEXiP6Nbo7f41zP5VUmXc1KSF8nF1iat5R8DYlh5eDZsfoCnC/QgduB1XHFFqCOTvEJJXiQXSk5J5oMpn9Fuwad4TlxCiaV9Gfjf53joIVXdJXuU5EVymVlbZ/PMoCbsOLUOW9WQV6/twJejorjoolBHJnmRkrxILnHw5EFajH6HAet6wMGruXbdBIZ/+hhVqoQ6MsnLlORFQsw5xw9r4mgS14JDKYlExr/Jx/e3puVXRYjUf6j4SW8hkRBKOJxAo6GvMmPnGNhVhbsSxzKoU1WuuSbUkUm40IAWIoHm8UBiovfO00ykelLpOLcz17avyIytUyg86yv63L2QeXFK8BJYqsmLBNKZyTvODCmQweBgq/asosGgJqw+NB82PcRTEd3pNfgaSlzhgT2JuktVAiroNXkz22JmK81smZnFB7s8kZDKaH5Un5MpJ/nvxPe5rWsVVu/cwBU/fc/4BpMY3c+X4DV5tgRBTtXk73fO7c2hskRCJ5P5UX/a8hMNh8SwM/kXWNGIpiVb0250OS6+xFdj1+TZEiRqkxc5Xxm1vaebH/XAyYM0HPIStb6rxc5dKZSfNYkFmwvRvdd1XPxkrd9r7Gc+HCIjNXKkBFROJHkHTDazxWYWk36jmcWYWbyZxSel+WorkqtlMnE2ABERuKgohqweRvl2NzN4bT/yzWvJRyVX8ku/26i2qs+fm3M0ebYESU4019zrnNthZlHAFDNb55z7+cxG51wsEAsQHR2deXcEkdwkffPKnj1QqhQA2w5t47lhrzBz53jYWZWqOycy6Nsq3HAD4ApnPta7Ro6UIAh6Td45t8P3ew8wEqgW7DJFgu5M84qZN9HXr09qymnaz/mG6ztWZOaWmRT6qQM97pzPojG+BA+qsUuOC2pN3syKABHOuSO+5YeB1sEsUyRHmMGQIVC2LKSmsnzjXBp2vIs1x5bCr4/xuOtG70FXn6nc/5Fq7JKDgt1cUxIYad7aSiQwyDn3Y5DLFMkZpUpxomZ13s8fT4e7T+MSd1B0wWD6vvUP6tRRDV1yh6AmeefcJuC2YJYhEirTNk/n2Ud2sys5GZa+QOMy7egwrhiXXhrqyER+pzteRbJp3/F9vDrmLYau/w72XUe5FdMZ/On91KgR6shE/kxJXiSLnHMMXDmIV0a/zpHTB4mY34p373mf/00qTMGCoY5OJGNK8iJZsPnAZp774WVm7ZwECdW4bVtPBnW8lYoVQx2ZyNnpjleRs0jxpPDV7K+58dvKzNo8h4LTv6VzlbksmagEL3mDavIimViyawn/HNqEdYeWwPq/8vDpLvQeWJYyZUIdmUjWKcmLpHPs1DHem/oR3y7sgDtagsvnDafnG3/jb38z3bskeY6SvEgakzdO5rnhzdidvBmWNKFR6S/oOK4oRYuGOjKR86MkLwIkHUvi1bFvMnz9ANh7I2WW/sSAtn/hvvtCHZmIf5Tk5YLmnKP/8u9pPvZNjp4+jM35gP9Wf5ePpxaiUKFQRyfiPyV5uWBt3L+R539oxuxdU2FbDSpviWVgh0rcemuoIxMJHHWhlAvO6dTTfDbrC27uVJnZWxZQYEpX2t8yi2WTleAl/KgmLxcGjweSklh0eivP/hDD+kPLYW1d7j/Rib4Dr+Lqq0MdoEhwKMlL+PN4OPrgX3i34AK6VEvFHS3NpbPj6P7vOjSonYSVdID6Rkp4UnONhL0J8YO57rZ4OldPwS1uxjM7F7NpXB2eib0fK5vB9H0iYURJXsJW4tFE/jb4GZ6Y+C8ST11L6d5DmbytMIMGleQKT7rp+zS/sISpoCd5M3vUzNab2QYzeyfY5Yk45+i9pA/XdriZuLVx2MyPeOOixWz46T4eWt7OO6vTmen7IiP/PNeqSBgJ9vR/+YAuwENAArDIzMY459YEs1y5cP2y7xeeH9GUebtmwtaa3Dz2dQaUncAdXxSAiDRT7p2ZazUpyZvgNV6BhKlgX3itBmzwzRCFmQ0B6gBK8hJQp1JP8eXsr/h4ZhtSThYi/8wetFm4gbc89Yk8aJDU9s/zqmquVbkABDvJXwVsT/M4Abgr7Q5mFgPEAJQrVy7I4Ug4mp8wn0bDm/Dr4VWwuh41j35D3+9Lce2LtWCuqTlGLmgh70LpnIsFYgGio6NdiMORPORI8hHentyKbku6wOGruPinMXRu8VcaNfK1vqg5RiToSX4HUDbN4zK+dSJ+GbN+DE1GvsqekztgYXP+XrQtXSZc8scKu5pjRIKe5BcB15tZBbzJvQHQMMhlShjbdWQXL4/9N6N//QESK1Ny4XD6tK7O44+HOjKR3CmoSd45l2JmzYFJQD6gj3NudTDLlPDkcR56LenFmxNbciz5JPzUluZ3/JfPZubn4otDHZ1I7hX0Nnnn3ARgQrDLkfC1bu86nh8Rw4Lds2Dz/dzwSw/6d7ieu+4693NFLnS641VyreSUZD6e2ZpbutzGwi2riBzfm0+un8aqn5TgRbIq5L1rRDIyZ9scnhvRhI2H18LKBtx9qCP9BpTkhhtCHZlI3qKavOQqh04eoumYl7m3771s3H6Mi0aOJ/aRwcyepAQvcj5Uk5fQ8I3vnrYP+8i1I2k6ujlJJ3fD/Deoc2lruk28mNKlQxyrSB6mmrzkPI8H7r8fyniH+d1xcDt/HViXp4c9TdLWEhQfNZ9RL7dn1DAleBF/qSYvOS/JO8yvJzWF7smz+U+nipw8lQIzviDm1jf48qf8XHZZqIMUCQ9K8pLzoqJY/dBtvHDlChaVPQ2/Vueatd35rsO13HtvqIMTCS9qrpEcdTLlJP+b8SG33bWC+OKXkm9MPz64ZjJrZivBiwSDavKSY37e+jMvxMWw6fB6WP4vovd9Tb/+UVSqFOrIRMKXavISdAeO7ePFIf/ivn73sXnbKQoPHE2X0ZezwNWn0s2aW1UkmFSTl6BxzvHD6mG8PPAF9hU4BfP+y6MRbxO7qSplPFthXqT3IqxGihQJGtXkJSi2H9rOEwOfov6IBuzbfxPFYicybNo2xvc9TZl7rtbcqiI5RDV58crg5qTzkepJpeuirrw9pRUnT3pg+te8sOVavk5qSNF7K0KpkprMQyQHKcnL7zcnzZ3rrV3PmOGdcCObViau5IWRTVicuAA2PEL5Vd3o26ECtf7igaRVvyd1MzXRiOQQNdfIbzcnkZLi/Z2UlK2nnzh9gnentqJK9ztYsnkTESMH8k7ZiayZW4Fatfh9hibV2kVyXNBq8mb2EdAEOJMxWvnGlpfcJirKW4M/U5PPRjv59M3TeXFkU7Yc2QBLn6dKUjv6fncFt92WZqcANQWJSPYFuybfwTl3u+9HCT63MvM20SQkwMyZWUrE+47v44VRjandvzZbtzkKDplKh1p9WfRzBgk+zTg1eNRlUiQnqU1evLI46bVzjiGrhvDq+Nc4cGI/zHmHBwt8QOzEwpQvn8ETMmoKUnu8SI4Jdk2+uZmtMLM+ZlY0ox3MLMbM4s0sPimbbcGSs7Yc3MJjA56gYVxDDmwqz+VDlzCw8WdMGp9Jgoffm4LUZVIkJMw5d/5PNpsKlMpg03vAfGAv4IA2QGnnXOOzHS86OtrFx8efdzwSHCmeFDot6ESrqe+TnGy4qZ/yrxtfpcPX+ShePAsHUJu8SFCZ2WLnXHRG2/xqrnHOPZjFAHoC4/wpS0Jj2e5lvDDyJZbtWQy/PEHZFV3p9XU5Hn441JGJSFYErbnGzNJO91AXWBWssiTwjp8+zttT3qZqj2hWbEnAfhjKm6XHsnZ+NhO8LryKhFQwL7x+aWa3422u2QI0DWJZEkBTNk6hyehmbD2yCRa/ROXdX9CvXzGqVj2Pg+nCq0hIBa0m75x71jl3i3PuVufcU865XcEqSwJj7/G9PBvXiIcHPMz2rZHk/24SX4y/giUF/07VKudZA9eFV5GQUhdKwTnHgBUD+PeENzh08hDMep+aqf+h17a7uM6zHub7MVrkmT74uvAqEhIa1iBceTyQmAjn6D216cAmHur/CI1GNeLQphu4ZNBS+jZqw4wZl3LdPSUDUwPXsAYiIaOafDjKwoBjKZ4UOszrwP+mf8jp5EiY3Jn6177MN7MjfBV21cBFwoGSfDhKe7FzzhxYswYqVfotUS/euZgXRr3EyqRlsK4OpZd2pufXZXjiCd/z0/Zr10VSkTxNzTXh6MzFznz54OKLoUoVqFWLYyeP8Nakt6jWsxqrtyTC0B9oUSKO9YvSJXh1eRQJG6rJh6MzFzvXrPEm+JQUftw9myadKpFwfDvEN+XmOc3oc7g51Ut8C0Vm8Nvnvbo8ioQV1eTDVUQEVKrEnvui+effjMcaetiZUITI/rNoU6kdyw7XoHrqnD+PH68ujyJhRTX5MOVSU+k3uxNv1F7P4ZORMOM9avAOvSYU5MYbHMy705vg777b2wPHud9nbdIFV5GwoZp8GNqw9xdqv1mcxjPf4PCGmyny/TJ6NPyQn6YX5MYb+T2Rb9vmXS5b9o/t7+ryKBI2VJMPI6dTT9Nubjs+ntGa0xdFwtju/N+SK+i8tARX3pZu54gI74/a30XCmmryYWJBwgKqdK9Kq+mtSF79BMVj5xG3dApxNTtx5a2ZjAes9neRsKeafB53JPkI709/n04LOxFx7EoYM4pm99fh8w0eLjvV5ezt6mp/Fwl7SvJ52LhfxtFs7CvsOJIAi17hmm2f0rvnpdSsCd4vaVloesnitH8ikjcpyedBu4/u5rWJrzFszTDy7atEvrFzeK/R3bSKg4IFQx2diOQmSvJ5iMd56L2kN/+Z3JIjJ4/DzDZUPd2SPuMKUKlSqKMTkdzIrwuvZlbPzFabmcfMotNte9fMNpjZejN7xL8wL1BpRpJcv3c9tfrdT8y4GI5uuI3CfVfQqd77zJ2lBC8imfO3Jr8KeBrokXalmVUEGgCVgCuBqWZ2g3Mu1c/yLhy+MWROzZ/DFw3K0Oa6XXhOXgQTe/HYVY3pNscoWzbUQYpIbufvRN5rAezPvTLqAEOcc8nAZjPbAFQD5vlT3gUlKYl5W+fw4kse1kZtxVb+g2ILO9L1y1LUq6eOMCKSNcHqJ38VsD3N4wTfuj8xsxgzizez+KS0Y6hcwA4nH+bV+I+55/lUfi1YCgaO44WLB/PLklLUr68ELyJZd86avJlNBUplsOk959xofwNwzsUCsQDR0dFnn8boAjBq3SheGdecXUd3woLXKLvhI3p1v4wHaiuzi0j2nTPJO+cePI/j7gDSthiX8a2TTOw8spMWE1oQty6OyL23EjE6jpb/rMYHcVC4cKijE5G8KlhdKMcAg8ysPd4Lr9cDC4NUVp7mcR5iF8fScvLbHEs+BdM/49bkt+g9Jj+33x7q6EQkr/MryZtZXaATUAIYb2bLnHOPOOdWm9kwYA2QAryqnjV/tiZpDU3GxDA3YQ75tj5AgUk9+PQ/19GihXc4GRERf/nbu2YkMDKTbW2Btv4cP1wlpyTz2ezPaPvzp5B8CYzvR+1Sjeg+26hQIdTRiUg4UX0xh83aOosmY2JYv38dtvKfFF3Ynm8+jeKf/1SvGREJPCX5HHLw5EHenvI2sUtiyX+0PIyayL/ufpT2S6B4JiMBi4j4S0k+yJxzxK2No/mEFiQeTYR5b1F608f07FKEhx8OdXQiEu6U5IMo4XACr054lTHrxxCZVAVGjeWtBlX5OA6KFAl1dCJyIVCSDySPB5KSSC1+Bd0Wd+fdqa04kZwCU7+i0onX6TUqkujocx9GRCRQlOQDxTeg2Mpf5xDT4CLmX3aEfFseIt/E7rR94xrefBPy5w91kCJyoVGSD5CTu7bzSYFZfPGSg5MRMGIAfynRkNjZxnXXhTo6EblQKckHwMwtM2kyJoYN9zoilv2TS6a1oUPH8jz/gqlbpIiElJK8H/af2E/LKS3pvbQ3+Y9eA3FTqHfLvXzzS0FKllJ2F5HQU5I/D845hq0eRouJ/2bvsX0w521K/PoBPTpfxJNPhjo6EZHfKcln07ZD23hl/CuM/3U8+ZOicSMm0aLe7bSNg0suCXV0IiJ/pCSfRameVDov7Eyrae9x6hQwuQPXH2lB75H5qF491NGJiGRMST4Llu9eTpOxTVi0cxGRWx7DxnWjzWtX07IlFCgQ6uhERDIX/kned4MSUVHZHgHsxOkTfPzTx7Sb246I5CtgzGCqF/0HPWcZN90UpHhFRAIoWHO85g6+G5QoUwZq1fI+zqKpm6ZyS7db+GLOF7DsOQr1Wkv35g34aaYSvIjkHX4leTOrZ2arzcxjZtFp1pc3sxNmtsz3093/UM9DUhLMnQspKd7fWZgofN/xfTw/6nke+v4htm+PgH7TqWO9Wbe0GE2bQkR4fyyKSJjxt7lmFfA00CODbRudc7f7eXz/REVBjRreBF+jhvdxJpxzDFo5iNd+fJ0Dxw/C7FYUW/8+Xb8tTN26OReyiEgg+Tsz1FoAy623dZrBjBl/bJPPoI1+84HNvDyuGZM2TaZA0l14hvekad1b+PwHuPzy0P4JIiL+CGbjQwUzW2pmP5lZzSCWc3YREVCy5O8JPk0bfUrKKb6e+zWVu1Zm2tqfYUInynfvy89Db6Z7dyV4Ecn7zlmTN7OpQKkMNr3nnBudydN2AeWcc/vMrCowyswqOecOZ3D8GCAGoFy5clmP/HykaaNfsmkOTXrcyZK9K8i/8UkY3ZH/HR5IK6pQqHg8UDm4sYiI5IBzJnnn3IPZPahzLhlI9i0vNrONwA1AfAb7xgKxANHR0S67ZWVLVBTH7r2LDwvOpUN1D5E798Co4dxx6dP08txDZebDZZdBxYpBDUNEJKcEpbnGzEqYWT7f8jXA9cCmYJSVHZM2TqZynR18fbcjYvlL5O+xhk4v/505syOofGAWrFwJ+/erC42IhA2/LryaWV2gE1ACGG9my5xzjwB/AVqb2WnAAzRzzu33O9rzlHQsiTcmvcHAlQMpdPRGGP4Tj97yF7ouhbJlz+wVCZXVRCMi4cXf3jUjgZEZrB8BjPDn2IHgnKP/8v68OelNDp44gs36gEvWtKJfx4LUr5/tG2BFRPKcsB3WYOP+jTQd15Rpm6dRaE8NPMN70vivFflqOBQrFuroRERyRtgl+dOpp2k/rz0fzfyI1NMFYEJXrjzQlJ5DInjggVBHJyKSs8IqyS/asYgmY5uwPHE5BTfVJXVMJ95uehUffgiFC4c6OhGRnBcWSf7oqaP8b/r/+Hbht+RPLgVxcVQuUpdeM+D220MdnYhI6IRFX8GlO1fwzYJviVjalIiua/i6SV3mz1eCFxEJi5r8qY01cB038EC1CnRfAhUqhDoiEZHcISySfO3aMD2uArVqqVukiEhaYZHkwTvumIiI/FFYtMmLiEjGlORFRMKYkryISBhTkhcRCWNK8iIiYUxJXkQkjCnJi4iEMSV5EZEw5leSN7OvzGydma0ws5Fmdnmabe+a2QYzW29mj/gdqYiIZJu/NfkpQGXn3K3AL8C7AGZWEWgAVAIeBbqemfNVRERyjl9J3jk32TmX4ns4HyjjW64DDHHOJTvnNgMbgGr+lCUiItkXyLFrGgNDfctX4U36ZyT41v2JmcUAMb6HR81svR8xFAf2+vH8YFFc2aO4skdxZU84xnV1ZhvOmeTNbCpQKoNN7znnRvv2eQ9IAQZmNzLnXCwQm93nZcTM4p1z0YE4ViApruxRXNmjuLLnQovrnEneOffg2bab2fPAk0Bt55zzrd4BlE2zWxnfOhERyUH+9q55FGgJPOWcO55m0xiggZkVNLMKwPXAQn/KEhGR7PO3Tb4zUBCYYt7ZOuY755o551ab2TBgDd5mnFedc6l+lpUVAWn2CQLFlT2KK3sUV/ZcUHHZ7y0sIiISbnTHq4hIGFOSFxEJY3kqyZtZPTNbbWYeM4tOt+2cwyiYWQUzW+Dbb6iZFQhSnEPNbJnvZ4uZLctkvy1mttK3X3wwYklX3kdmtiNNbI9nst+jvvO4wczeyYG4Mh0eI91+QT9f5/rbfZ0Jhvq2LzCz8sGII4Nyy5rZDDNb4/sfeC2DfWqZ2aE0r+8HORTbWV8X8/rWd85WmNkdORDTjWnOwzIzO2xmr6fbJ0fOl5n1MbM9ZrYqzbpiZjbFzH71/S6ayXOf8+3zq5k9d14BOOfyzA9wM3AjMBOITrO+IrAc70XgCsBGIF8Gzx8GNPAtdwdezoGYvwY+yGTbFqB4Dp6/j4D/nGOffL7zdw1QwHdeKwY5roeBSN/yF8AXoThfWfnbgVeA7r7lBsDQHHrtSgN3+JYvwTuMSPrYagHjcur9lNXXBXgcmAgYUB1YkMPx5QN2A1eH4nwBfwHuAFalWfcl8I5v+Z2M3vNAMWCT73dR33LR7Jafp2ryzrm1zrmM7og95zAK5u3+8wDwg2/Vd8D/BTHcM2XWBwYHs5wAqwZscM5tcs6dAobgPb9B4zIfHiOnZeVvr4P3vQPe91Jt3+scVM65Xc65Jb7lI8BaMrmLPBeqA/R3XvOBy82sdA6WXxvY6JzbmoNl/sY59zOwP93qtO+jzHLRI8AU59x+59wBvGOFPZrd8vNUkj+Lq4DtaR5nNIzCFcDBNMkk06EWAqgmkOic+zWT7Q6YbGaLfcM75ITmvq/MfTL5ipiVcxlMjfHW+jIS7POVlb/9t31876VDeN9bOcbXRFQFWJDB5rvNbLmZTTSzSjkU0rlel1C/pxqQeUUrFOcLoKRzbpdveTdQMoN9AnLeAjl2TUBYFoZRyA2yGOcznL0Wf69zboeZReG912Cd71M/KHEB3YA2eP8p2+BtSmrsT3mBiMtlfXiMgJ+vvMbMLgZGAK875w6n27wEb5PEUd/1llF4b0QMtlz7uviuuz2Fb4TcdEJ1vv7AOefMLGh92XNdknfnGEYhE1kZRmEf3q+Jkb4amF9DLZwrTjOLBJ4Gqp7lGDt8v/eY2Ui8zQV+/XNk9fyZWU9gXAabgjIkRRbO1/P8eXiM9McI+PlKJyt/+5l9Enyv8WV431tBZ2b58Sb4gc65uPTb0yZ959wEM+tqZsWdc0EdjCsLr0sohzl5DFjinEtMvyFU58sn0cxKO+d2+Zqu9mSwzw681w3OKIP3emS2hEtzzTmHUfAljhnA332rngOC+c3gQWCdcy4ho41mVsTMLjmzjPfi46qM9g2UdO2gdTMpbxFwvXl7IhXA+1V3TJDjymx4jLT75MT5ysrfPgbvewe876XpmX0oBZKv3b83sNY51z6TfUqduT5gZtXw/n8H9QMoi6/LGKCRr5dNdeBQmqaKYMv023Qozlcaad9HmeWiScDDZlbU17T6sG9d9gT7ynIgf/AmpgQgGUgEJqXZ9h7enhHrgcfSrJ8AXOlbvgZv8t8ADAcKBjHWfkCzdOuuBCakiWW572c13maLYJ+/74GVwArfm6x0+rh8jx/H23tjYw7FtQFv2+My30/39HHl1PnK6G8HWuP9AAIo5HvvbPC9l64J9vnxlXsv3ma2FWnO0+NAszPvM6C579wsx3sBu0YOxJXh65IuLgO6+M7pStL0jAtybEXwJu3L0qzL8fOF90NmF3Dal79exHsdZxrwKzAVKObbNxrolea5jX3vtQ3AC+dTvoY1EBEJY+HSXCMiIhlQkhcRCWNK8iIiYUxJXkQkjCnJi4iEMSV5EZEwpiQvIhLG/h8e03257HPmHwAAAABJRU5ErkJggg==" - }, - "metadata": { - "needs_background": "light" - } - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Parameter (name=fc.weight, shape=(1, 1), dtype=Float32, requires_grad=True) [[2.010547]]\n", - "Parameter (name=fc.bias, shape=(1,), dtype=Float32, requires_grad=True) [2.8695402]\n" - ] - } - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "After the training is complete, the weight parameters of the final model are printed. The value of weight is close to 2.0 and the value of bias is close to 3.0. As a result, the model training meets the expectation.\n", - "\n", - "## Summary\n", - "\n", - "We have learned the principles of the linear fitting algorithm, defined the corresponding algorithms in the MindSpore framework, understood the training process of such linear fitting models in MindSpore, and finally fitted a model function close to the objective function. In addition, you can adjust the dataset generation interval from (-10,10) to (-100,100) to check whether the weight values are closer to those of the objective function; adjust the learning rate to check whether the fitting efficiency changes; or explore how to use MindSpore to fit quadratic functions, such as $f(x)=ax^2+bx+c$, or higher-order functions." - ], - "metadata": {} - } - ], - "metadata": { - "kernelspec": { - "display_name": "MindSpore", - "language": "python", - "name": "mindspore" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.5" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} \ No newline at end of file diff --git a/tutorials/source_en/optimization.md b/tutorials/source_en/optimization.md deleted file mode 100644 index 21a86bd27f..0000000000 --- a/tutorials/source_en/optimization.md +++ /dev/null @@ -1,186 +0,0 @@ -# Training the Model - -`Ascend` `GPU` `CPU` `Beginner` `Model Development` - - - -After learning how to create a model and build a dataset in the preceding tutorials, you can start to learn how to set hyperparameters and optimize model parameters. - -## Hyperparameters - -Hyperparameters can be adjusted to control the model training and optimization process. Different hyperparameter values may affect the model training and convergence speed. - -Generally, the following hyperparameters are defined for training: - -- Epoch: specifies number of times that the dataset is traversed during training. -- Batch size: specifies the size of each batch of data to be read. -- Learning rate: If the learning rate is low, the convergence speed slows down. If the learning rate is high, unpredictable results such as no training convergence may occur. - -```python -epochs = 5 -batch_size = 64 -learning_rate = 1e-3 -``` - -## Loss Functions - -The **loss function** is used to evaluate the difference between **predicted value** and **actual value** of a model. Here, the absolute error loss function `L1Loss` is used. `mindspore.nn.loss` provides many common loss functions, such as `SoftmaxCrossEntropyWithLogits`, `MSELoss`, and `SmoothL1Loss`. - -The output value and target value are provided to compute the loss value. The method is as follows: - -```python -import numpy as np -import mindspore.nn as nn -from mindspore import Tensor - -loss = nn.L1Loss() -output_data = Tensor(np.array([[1, 2, 3], [2, 3, 4]]).astype(np.float32)) -target_data = Tensor(np.array([[0, 2, 5], [3, 1, 1]]).astype(np.float32)) -print(loss(output_data, target_data)) -``` - -```text - 1.5 -``` - -## Optimizer - -An optimizer is used to compute and update the gradient. The selection of the model optimization algorithm directly affects the performance of the final model. A poor effect may be caused by the optimization algorithm instead of the feature or model design. All optimization logic of MindSpore is encapsulated in the `Optimizer` object. Here, the Momentum optimizer is used. `mindspore.nn` provides many common optimizers, such as `Adam` and `Momentum`. - -You need to build an `Optimizer` object. This object can retain the current parameter status and update parameters based on the computed gradient. - -To build an `Optimizer`, we need to provide an iterator that contains parameters (must be variable objects) to be optimized. For example, set `params` to `net.trainable_params()` for all `parameter` that can be trained on the network. Then, you can set the `Optimizer` parameter options, such as the learning rate and weight attenuation. - -A code example is as follows: - -```python -from mindspore import nn - -optim = nn.Momentum(net.trainable_params(), 0.1, 0.9) -``` - -## Training - -A model training process is generally divided into four steps. - -1. Define a neural network. -2. Build a dataset. -3. Define hyperparameters, a loss function, and an optimizer. -4. Enter the epoch and dataset for training. - -Execute the following command to download and decompress the dataset to the specified location. - -```python -import os -import requests -import tarfile -import zipfile - -def download_dataset(url, target_path): - """download dataset""" - if not os.path.exists(target_path): - os.makedirs(target_path) - download_file = url.split("/")[-1] - if not os.path.exists(download_file): - res = requests.get(url, stream=True, verify=False) - if download_file.split(".")[-1] not in ["tgz","zip","tar","gz"]: - download_file = os.path.join(target_path, download_file) - with open(download_file, "wb") as f: - for chunk in res.iter_content(chunk_size=512): - if chunk: - f.write(chunk) - if download_file.endswith("zip"): - z = zipfile.ZipFile(download_file, "r") - z.extractall(path=target_path) - z.close() - if download_file.endswith(".tar.gz") or download_file.endswith(".tar") or download_file.endswith(".tgz"): - t = tarfile.open(download_file) - names = t.getnames() - for name in names: - t.extract(name, target_path) - t.close() - -download_dataset("https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/datasets/cifar-10-binary.tar.gz", "./datasets") -``` - -The code example for model training is as follows: - -```python -import mindspore.dataset as ds -import mindspore.dataset.transforms.c_transforms as C -import mindspore.dataset.vision.c_transforms as CV -from mindspore import nn, Tensor, Model -from mindspore import dtype as mstype -from mindspore.train.callback import LossMonitor - -DATA_DIR = "./datasets/cifar-10-batches-bin" - -# Define a neural network. -class Net(nn.Cell): - def __init__(self, num_class=10, num_channel=3): - super(Net, self).__init__() - self.conv1 = nn.Conv2d(num_channel, 6, 5, pad_mode='valid') - self.conv2 = nn.Conv2d(6, 16, 5, pad_mode='valid') - self.fc1 = nn.Dense(16 * 5 * 5, 120) - self.fc2 = nn.Dense(120, 84) - self.fc3 = nn.Dense(84, num_class) - self.relu = nn.ReLU() - self.max_pool2d = nn.MaxPool2d(kernel_size=2, stride=2) - self.flatten = nn.Flatten() - - def construct(self, x): - x = self.conv1(x) - x = self.relu(x) - x = self.max_pool2d(x) - x = self.conv2(x) - x = self.relu(x) - x = self.max_pool2d(x) - x = self.flatten(x) - x = self.fc1(x) - x = self.relu(x) - x = self.fc2(x) - x = self.relu(x) - x = self.fc3(x) - return x - -net = Net() -epochs = 5 -batch_size = 64 -learning_rate = 1e-3 - -# Build a dataset. -sampler = ds.SequentialSampler(num_samples=128) -dataset = ds.Cifar10Dataset(DATA_DIR, sampler=sampler) - -# Convert the data type. -type_cast_op_image = C.TypeCast(mstype.float32) -type_cast_op_label = C.TypeCast(mstype.int32) -HWC2CHW = CV.HWC2CHW() -dataset = dataset.map(operations=[type_cast_op_image, HWC2CHW], input_columns="image") -dataset = dataset.map(operations=type_cast_op_label, input_columns="label") -dataset = dataset.batch(batch_size) - -# Define hyperparameters, a loss function, and an optimizer. -optim = nn.Momentum(net.trainable_params(), learning_rate, 0.9) -loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean') -cb = LossMonitor() - -# Enter the epoch and dataset for training. -model = Model(net, loss_fn=loss, optimizer=optim) -model.train(epoch=epochs, train_dataset=dataset, callbacks=cb) -``` - -The output is as follows: - -```text -epoch: 1 step: 1, loss is 2.3025818 -epoch: 1 step: 2, loss is 2.3025775 -epoch: 2 step: 1, loss is 2.3025408 -epoch: 2 step: 2, loss is 2.3025331 -epoch: 3 step: 1, loss is 2.3024616 -epoch: 3 step: 2, loss is 2.302457 -epoch: 4 step: 1, loss is 2.3023522 -epoch: 4 step: 2, loss is 2.3023558 -epoch: 5 step: 1, loss is 2.3022182 -epoch: 5 step: 2, loss is 2.3022337 -``` diff --git a/tutorials/source_en/tensor.md b/tutorials/source_en/tensor.md deleted file mode 100644 index 8fbcdca76e..0000000000 --- a/tutorials/source_en/tensor.md +++ /dev/null @@ -1,230 +0,0 @@ -# Tensor - -`Ascend` `GPU` `CPU` `Beginner` - - - -Tensor is a basic data structure in the MindSpore network computing. - -Import the required modules and APIs: - -```python -import numpy as np -from mindspore import Tensor, context -from mindspore import dtype as mstype -context.set_context(mode=context.GRAPH_MODE, device_target="CPU") -``` - -## Initializing a Tensor - -There are multiple methods for initializing tensors. When building a tensor, you can pass the [Tensor](https://www.mindspore.cn/docs/api/en/master/api_python/mindspore/mindspore.Tensor.html), `float`, `int`, `bool`, `tuple`, `list`, and `NumPy.array` types. - -- **Generate a tensor based on data.** - -You can create a tensor based on data. The data type can be set or automatically inferred. - -```python -x = Tensor(0.1) -``` - -- **Generate a tensor from the NumPy array.** - -You can create a tensor from the NumPy array. - -```python -arr = np.array([1, 0, 1, 0]) -x_np = Tensor(arr) -``` - -If the initial value is `NumPy.array`, the generated `Tensor` data type corresponds to `NumPy.array`. - -- **Generate a tensor from the init** - -You can create a tensor with the `init`, `shape` and `dtype`. - -- `init`: Supported subclasses of incoming Subclass of [initializer](https://www.mindspore.cn/docs/api/zh-CN/master/api_python/mindspore.common.initializer.html). -- `shape`: Supported subclasses of incoming `list`, `tuple`, `int`. -- `dtype`: Supported subclasses of incoming [mindspore.dtype](https://www.mindspore.cn/docs/api/zh-CN/master/api_python/mindspore.html#mindspore.dtype). - -```python -from mindspore import Tensor -from mindspore import set_seed -from mindspore import dtype as mstype -from mindspore.common.initializer import One, Normal - -set_seed(1) - -tensor1 = Tensor(shape=(2, 2), dtype=mstype.float32, init=One()) -tensor2 = Tensor(shape=(2, 2), dtype=mstype.float32, init=Normal()) -print(tensor1) -print(tensor2) -``` - -```text - [[1. 1.] - [1. 1.]] - [[-0.00128023 -0.01392901] - [ 0.0130886 -0.00107818]] -``` - -The `init` is used for delayed initialization in parallel mode. Usually, it is not recommended to use `init` interface to initialize parameters in other conditions. - -- **Inherit attributes of another tensor to form a new tensor.** - -```python -from mindspore import ops -oneslike = ops.OnesLike() -x = Tensor(np.array([[0, 1], [2, 1]]).astype(np.int32)) -output = oneslike(x) -print(output) -``` - -```text - [[1 1] - [1 1]] -``` - -- **Output a constant tensor of a specified size.** - -`shape` is the size tuple of a tensor, which determines the dimension of the output tensor. - -```python -import mindspore.ops as ops - -shape = (2, 2) -ones = ops.Ones() -output = ones(shape, mstype.float32) -print(output) - -zeros = ops.Zeros() -output = zeros(shape, mstype.float32) -print(output) -``` - -```text - [[1. 1.] - [1. 1.]] - [[0. 0.] - [0. 0.]] -``` - -During `Tensor` initialization, dtype can be specified to, for example, `mstype.int32`, `mstype.float32` or `mstype.bool_`. - -## Tensor Attributes - -Tensor attributes include shape and data type (dtype). - -- shape: a tuple -- dtype: a data type of MindSpore - -```python -t1 = Tensor(np.zeros([1,2,3]), mstype.float32) -print("Datatype of tensor: {}".format(t1.dtype)) -print("Shape of tensor: {}".format(t1.shape)) -``` - -```text - Datatype of tensor: Float32 - Shape of tensor: (1, 2, 3) -``` - -## Tensor Operation - -There are many operations between tensors, including arithmetic, linear algebra, matrix processing (transposing, indexing, and slicing), and sampling. The following describes several operations. The usage of tensor computation is similar to that of NumPy. - -Indexing and slicing operations similar to NumPy: - -```python -tensor = Tensor(np.array([[0, 1], [2, 3]]).astype(np.float32)) -print("First row: {}".format(tensor[0])) -print("First column: {}".format(tensor[:, 0])) -print("Last column: {}".format(tensor[..., -1])) -``` - -```text - First row: [0. 1.] - First column: [0. 2.] - Last column: [1. 3.] -``` - -`Concat` connects a series of tensors in a given dimension. - -```python -data1 = Tensor(np.array([[0, 1], [2, 3]]).astype(np.float32)) -data2 = Tensor(np.array([[4, 5], [6, 7]]).astype(np.float32)) -op = ops.Concat() -output = op((data1, data2)) -print(output) -``` - -```text - [[0. 1.] - [2. 3.] - [4. 5.] - [6. 7.]] -``` - -`Stack` combines two tensors from another dimension. - -```python -data1 = Tensor(np.array([[0, 1], [2, 3]]).astype(np.float32)) -data2 = Tensor(np.array([[4, 5], [6, 7]]).astype(np.float32)) -op = ops.Stack() -output = op([data1, data2]) -print(output) -``` - -```text - [[[0. 1.] - [2. 3.]] - - [[4. 5.] - [6. 7.]]] -``` - -Common computation: - -```python -input_x = Tensor(np.array([1.0, 2.0, 3.0]), mstype.float32) -input_y = Tensor(np.array([4.0, 5.0, 6.0]), mstype.float32) -mul = ops.Mul() -output = mul(input_x, input_y) -print(output) -``` - -```text - [ 4. 10. 18.] -``` - -## Conversion Between Tensor and NumPy - -Tensor and NumPy can be converted to each other. - -### Tensor to NumPy - -```python -zeros = ops.Zeros() -output = zeros((2,2), mstype.float32) -print("output: {}".format(type(output))) -n_output = output.asnumpy() -print("n_output: {}".format(type(n_output))) -``` - -```text - output: - n_output: -``` - -### NumPy to Tensor - -```python -output = np.array([1, 0, 1, 0]) -print("output: {}".format(type(output))) -t_output = Tensor(output) -print("t_output: {}".format(type(t_output))) -``` - -```text - output: - t_output: -``` diff --git a/tutorials/source_zh_cn/index.rst b/tutorials/source_zh_cn/index.rst index fdcb4181c4..bcba1642a3 100644 --- a/tutorials/source_zh_cn/index.rst +++ b/tutorials/source_zh_cn/index.rst @@ -10,7 +10,6 @@ MindSpore教程 :glob: :maxdepth: 1 :caption: 初学教程 - :hidden: beginner/introduction beginner/quick_start -- Gitee