From cfaed73e89c68a33c9ebba8da4e93aa02d1b3786 Mon Sep 17 00:00:00 2001 From: chengxiao <2335846400@qq.com> Date: Tue, 30 Jun 2020 19:54:54 +0800 Subject: [PATCH] Modify the calculation diagram and data diagram visualization tutorial. --- .../calculate_and_datagraphic.ipynb | 116 +++++++++++------- 1 file changed, 75 insertions(+), 41 deletions(-) diff --git a/tutorials/notebook/mindinsight/calculate_and_datagraphic.ipynb b/tutorials/notebook/mindinsight/calculate_and_datagraphic.ipynb index 33245276fb..9bfee03663 100644 --- a/tutorials/notebook/mindinsight/calculate_and_datagraphic.ipynb +++ b/tutorials/notebook/mindinsight/calculate_and_datagraphic.ipynb @@ -9,29 +9,31 @@ "\n", "## 计算图与数据图概述\n", "\n", - "MindInsight是一款强大的可视化工具。计算图的生成是通过将模型训练过程中的每个计算节点关联后所构成的,初体验者可以通过查看计算图,掌握整个模型的计算走向结构,数据流以及控制流的信息。对于高阶的使用人员,能够通过计算图验证计算节点的输入输出是否正确,并验证整个计算过程是否符合预期。数据图是展示的数据处理上的信息,在MindInsight可视化面板中查看数据处理的图,能够更加直观的查看数据预处理的每一个环节,并帮助提升模型性能。\n", + "计算图的生成是通过将模型训练过程中的每个计算节点关联后所构成的,初体验者可以通过查看计算图,掌握整个模型的计算走向结构,数据流以及控制流的信息。对于高阶的使用人员,能够通过计算图验证计算节点的输入输出是否正确,并验证整个计算过程是否符合预期。数据图展示的是数据预处理的过程,在MindInsight可视化面板中可查看数据处理的图,能够更加直观地查看数据预处理的每一个环节,并帮助提升模型性能。\n", + "\n", + "接下来我们用一个图片分类的项目来体验计算图与数据图的生成与使用。\n", " \n", "## 本次体验的整体流程\n", "1、体验模型的数据选择使用MNIST数据集,MNIST数据集整体数据量比较小,更适合体验使用。\n", "\n", - "2、设定一个网络,本次的体验使用LeNet网络。\n", + "2、初始化一个网络,本次的体验使用LeNet网络。\n", + "\n", + "3、增加可视化功能的使用,并设定只记录计算图与数据图。\n", "\n", - "3、加载训练数据集并进行训练,训练完成后,查看结果并保存模型文件。\n", + "4、加载训练数据集并进行训练,训练完成后,查看结果并保存模型文件。\n", "\n", - "4、启用MindInsight的可视化图界面,进行训练过程的核对。" + "5、启用MindInsight的可视化图界面,进行训练过程的核对。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### 数据集加载\n", - "\n", - "#### 数据集来源\n", + "### 数据集来源\n", "\n", - "##### 方法一\n", + "方法一\n", "\n", - "从以下网址下载,并将数据包解压后放在Jupyter的工作目录下\n", + "从以下网址下载,并将数据包解压后放在Jupyter的工作目录下。\n", "\n", "- 训练数据集:{\"http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz\",\"http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz\"}\n", "- 测试数据集:{\"http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz\",\"http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz\"}\n", @@ -61,8 +63,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##### 方法二\n", - "- 直接执行下面代码,会自动进行训练集的下载与解压,但是整个过程根据网络好坏情况会需要花费几分钟时间。" + "方法二\n", + "\n", + "直接执行以下代码,会自动进行训练集的下载与解压,但是整个过程根据网络好坏情况会需要花费几分钟时间。" ] }, { @@ -75,7 +78,7 @@ "from urllib.parse import urlparse\n", "import gzip \n", "\n", - "def unzipfile(gzip_path):\n", + "def unzip_file(gzip_path):\n", " \"\"\"unzip dataset file\n", " Args:\n", " gzip_path: dataset file path\n", @@ -156,11 +159,11 @@ " shift_nml = -1 * 0.1307 / 0.3081\n", "\n", " \"\"\"define map operations\"\"\"\n", + " type_cast_op = C.TypeCast(mstype.int32)\n", " resize_op = CV.Resize((resize_height, resize_width), interpolation=Inter.LINEAR) # Bilinear mode\n", " rescale_nml_op = CV.Rescale(rescale_nml, shift_nml)\n", " rescale_op = CV.Rescale(rescale, shift)\n", " hwc2chw_op = CV.HWC2CHW()\n", - " type_cast_op = C.TypeCast(mstype.int32)\n", "\n", " \"\"\"apply map operations on images\"\"\"\n", " mnist_ds = mnist_ds.map(input_columns=\"label\", operations=type_cast_op, num_parallel_workers=num_parallel_workers)\n", @@ -186,7 +189,7 @@ "\n", "1、准备训练脚本,在训练脚本中指定计算图的超参数信息,使用`Summary`保存到日志中,接着再运行训练脚本。\n", "\n", - "2、启动MindInsight,启动命令成功后,就可以访问命令执行后显示的地址,查看可视化界面。\n", + "2、启动MindInsight,启动成功后,就可以通过访问命令执行后显示的地址,查看可视化界面。\n", "\n", "3、访问可视化地址成功后,就可以对图界面进行查询等操作。" ] @@ -196,9 +199,12 @@ "metadata": {}, "source": [ "#### 初始化网络\n", - "- 导入构建网络所使用的模块。\n", - "- 构建能够初始化参数的函数。\n", - "- 创建网络,在网络中设置参数。" + "\n", + "1、导入构建网络所使用的模块。\n", + "\n", + "2、构建初始化参数的函数。\n", + "\n", + "3、创建网络,在网络中设置参数。" ] }, { @@ -232,16 +238,7 @@ "\n", "\n", "class LeNet5(nn.Cell):\n", - " \"\"\"\n", - " Lenet network\n", - "\n", - " Args:\n", - " num_class (int): Num classes. Default: 10.\n", - "\n", - " Returns:\n", - " Tensor, output tensor\n", - "\n", - " \"\"\"\n", + " \n", " def __init__(self, num_class=10, channel=1):\n", " super(LeNet5, self).__init__()\n", " self.num_class = num_class\n", @@ -276,10 +273,13 @@ "source": [ "#### 主程序运行\n", "\n", - "- 首先在主函数下调用所需要用到的接口,并在主函数之前导入相应接口。\n", - "- 本此体验主要完成计算图与数据图的可视化,定义变量`specified={'collect_graph': True,'collect_dataset_graph': True}`,在`specified`字典中,键名`collect_graph`值设置为`True`,表示记录计算图;键名`collect_dataset_graph`值设置为`True`,表示记录数据图。\n", - "- 定义完`specified`变量后,传参到`summary_collector`中,最后将`summary_collector`传参到`model`中。\n", - "- 至此,模型中就有了计算图与数据图的可视化功能。" + "1、首先在主函数之前调用所需要的模块,并在主函数之前使用相应接口。\n", + "\n", + "2、本次体验主要完成计算图与数据图的可视化,定义变量`specified={'collect_graph': True,'collect_dataset_graph': True}`,在`specified`字典中,键名`collect_graph`值设置为`True`,表示记录计算图;键名`collect_dataset_graph`值设置为`True`,表示记录数据图。\n", + "\n", + "3、定义完`specified`变量后,传参到`summary_collector`中,最后将`summary_collector`传参到`model`中。\n", + "\n", + "至此,模型中就有了计算图与数据图的可视化功能。" ] }, { @@ -317,7 +317,7 @@ " model.train(epoch=2, train_dataset=ds_train, callbacks=[time_cb, ckpoint_cb, LossMonitor(), summary_collector], dataset_sink_mode=False)\n", "\n", " print(\"============== Starting Testing ==============\")\n", - " param_dict = load_checkpoint(\"checkpoint_lenet-3_1875.\")\n", + " param_dict = load_checkpoint(\"checkpoint_lenet-3_1875.ckpt\")\n", " load_param_into_net(network, param_dict)\n", " ds_eval = create_dataset(\"./MNIST_Data/test/\")\n", " acc = model.eval(ds_eval, dataset_sink_mode=False)\n", @@ -331,6 +331,7 @@ "### 启动MindInsight\n", "- 启动MindInsigh服务命令:`mindinsigh start --summary-base-dir=/path/ --port=8080`;\n", "- 执行完服务命令后,访问给出的地址,查看MindInsigh可视化结果。\n", + "\n", "![title](https://gitee.com/mindspore/docs/raw/master/tutorials/notebook/mindinsight/images/005.png)" ] }, @@ -345,10 +346,7 @@ "- 节点信息:显示当前所查看节点的信息,包括名称、类型、属性、输入和输出。便于在训练结束后,核对计算正确性时查看。\n", "- 图例:图例中包括命名空间、聚合节点、虚拟节点、算子节点、常量节点,通过不同图形来区分。\n", "\n", - "\n", - "\n", - "![title](https://gitee.com/mindspore/docs/raw/master/tutorials/notebook/mindinsight/images/004.png)\n", - "![title](https://gitee.com/mindspore/docs/raw/master/tutorials/notebook/mindinsight/images/003.png)" + "![title](https://gitee.com/mindspore/docs/raw/master/tutorials/notebook/mindinsight/images/004.png)" ] }, { @@ -356,13 +354,49 @@ "metadata": {}, "source": [ "### 数据图信息\n", - "- `TypeCast`:在数据集`create_data`函数中,使用:`TypeCase(mstype.int32)`。将数据类型转换成我们所设置的类型。\n", - "- `Resize`:在数据集`create_data`函数中,使用:`resize_height`,`resize_width = 32,32`;`Resize(resize_height,resize_width = 32,32)`。可以将数据的大小做调整。\n", - "- `Rescale`:在数据集`create_data`函数中,使用:`rescale = 1.0 / 255.0`;`Rescale(rescale,shift)`。可以重新数据格式。\n", + "\n", + "数据图所展示的顺序与数据集使用处代码顺序对应\n", + "\n", + "1、首先是从加载数据集`mnist_ds = ds.MnistDataset(data_path)`开始,对应数据图中`MnistDataset`。\n", + "\n", + "2、在以下所示代码中,是数据预处理的一些方法,顺序与数据图中所示顺序对应。\n", + "\n", + "`\n", + "type_cast_op = C.TypeCast(mstype.int32)\n", + "resize_op = CV.Resize((resize_height, resize_width), interpolation=Inter.LINEAR)\n", + "rescale_nml_op = CV.Rescale(rescale_nml, shift_nml)\n", + "rescale_op = CV.Rescale(rescale, shift)\n", + "hwc2chw_op = CV.HWC2CHW()\n", + "mnist_ds = mnist_ds.map(input_columns=\"label\", operations=type_cast_op, num_parallel_workers=num_parallel_workers)\n", + "mnist_ds = mnist_ds.map(input_columns=\"image\", operations=resize_op, num_parallel_workers=num_parallel_workers)\n", + "mnist_ds = mnist_ds.map(input_columns=\"image\", operations=rescale_op, num_parallel_workers=num_parallel_workers)\n", + "mnist_ds = mnist_ds.map(input_columns=\"image\", operations=rescale_nml_op, num_parallel_workers=num_parallel_workers)\n", + "mnist_ds = mnist_ds.map(input_columns=\"image\", operations=hwc2chw_op, num_parallel_workers=num_parallel_workers)\n", + "`\n", + "\n", + "- `TypeCast`:在数据集`create_data`函数中,使用:`TypeCase(mstype.int32)`,将数据类型转换成我们所设置的类型。\n", + "- `Resize`:在数据集`create_data`函数中,使用:`Resize(resize_height,resize_width = 32,32)`,可以将数据的高和宽做调整。\n", + "- `Rescale`:在数据集`create_data`函数中,使用:`rescale = 1.0 / 255.0`;`Rescale(rescale,shift)`,可以重新数据格式。\n", "- `HWC2CHW`:在数据集`create_data`函数中,使用:`HWC2CHW()`,此方法可以将数据所带信息与通道结合,一并加载。\n", + "\n", + "3、前面的几个步骤是数据集的预处理顺序,后面几个步骤是模型加载数据集时要定义的参数,顺序与数据图中对应。\n", + "\n", + "`\n", + "buffer_size = 10000\n", + "mnist_ds = mnist_ds.shuffle(buffer_size=buffer_size) # 10000 as in LeNet train script\n", + "mnist_ds = mnist_ds.batch(batch_size, drop_remainder=True)\n", + "mnist_ds = mnist_ds.repeat(repeat_size)\n", + "`\n", + " \n", "- `Shuffle`:在数据集`create_data`函数中,使用:`buffer_size = 10000`,后面数值可以支持自行设置,表示一次缓存数据的数量。\n", "- `Batch`:在数据集`create_data`函数中,使用:`batch_size = 32`。支持自行设置,表示将整体数据集划分成小批量数据集,每一个小批次作为一个整体进行训练。\n", - "- `Repeat`:在数据集`create_data`函数中,使用:`repeat_size = 1`,支持自行设定,表示的是一次运行中要训练的次数。\n", + "- `Repeat`:在数据集`create_data`函数中,使用:`repeat_size = 1`,支持自行设定,表示的是一次运行中要训练的次数。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "![title](https://gitee.com/mindspore/docs/raw/master/tutorials/notebook/mindinsight/images/001.png)" ] }, @@ -372,7 +406,7 @@ "source": [ "### 关闭MindInsight\n", "\n", - "- 在视察完成后,可执行此命令`mindinsight stop --port=8080`,关闭MindInsight。" + "- 查看完成后,在命令行中可执行此命令`mindinsight stop --port=8080`,关闭MindInsight。" ] } ], -- Gitee