From 9078518bfbf4dacb34123f74cd80d01098724ba9 Mon Sep 17 00:00:00 2001 From: ougongchang Date: Wed, 22 Apr 2020 15:48:01 +0800 Subject: [PATCH] add histogram summary in train script English translation of histogram is added --- .../advanced_use/images/histogram.png | Bin 0 -> 48031 bytes .../advanced_use/images/histogram_func.png | Bin 0 -> 3648 bytes .../advanced_use/visualization_tutorials.md | 63 +++++++++++++----- .../advanced_use/visualization_tutorials.md | 39 ++++++----- 4 files changed, 70 insertions(+), 32 deletions(-) create mode 100644 tutorials/source_en/advanced_use/images/histogram.png create mode 100644 tutorials/source_en/advanced_use/images/histogram_func.png diff --git a/tutorials/source_en/advanced_use/images/histogram.png b/tutorials/source_en/advanced_use/images/histogram.png new file mode 100644 index 0000000000000000000000000000000000000000..5b240083bd7fe971b55537386e5e4ca6090a6bd2 GIT binary patch literal 48031 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 nLB#Bpx~u @@ -72,6 +73,28 @@ class CrossEntropyLoss(nn.Cell): return loss +class MyOptimizer(Optimizer): + """Optimizer definition.""" + def __init__(self, learning_rate, params, ......): + ...... + # Initialize ScalarSummary + self.sm_scalar = P.ScalarSummary() + self.histogram_summary = P.HistogramSummary() + self.param_count = len(self.parameters) + self.weight_names = [param.name for param in self.parameters] + + def construct(self, grads): + ...... + # Record learning rate here + self.sm_scalar("learning_rate", learning_rate) + + # Record weight + for i in range(self.param_count): + self.histogram_summary(self.weight_names[i], self.paramters[i]) + + ...... + + class Net(nn.Cell): """Net definition.""" def __init__(self): @@ -86,20 +109,6 @@ class Net(nn.Cell): self.sm_image("image", data) ...... return out - - -class MyOptimizer(Optimizer): - """Optimizer definition.""" - def __init__(self, learning_rate, ......): - ...... - # Initialize ScalarSummary - self.sm_scalar = P.ScalarSummary() - - def construct(self, grads): - ...... - # Record learning rate here - self.sm_scalar("learning_rate", learning_rate) - ...... ``` Step 2: Use the `Callback` mechanism to add the required callback instance to specify the data to be recorded during training. @@ -129,7 +138,7 @@ def test_summary(): # Init network and Model net = Net() loss_fn = CrossEntropyLoss() - optim = MyOptimizer(learning_rate=0.01) + optim = MyOptimizer(learning_rate=0.01, params=network.trainable_params()) model = Model(net, loss_fn=loss_fn, optimizer=optim, metrics=None) # Init SummaryRecord and specify a folder for storing summary log files @@ -155,7 +164,7 @@ def test_summary(): summary_writer.close() ``` -After completing the script, use the `save_graphs` option of `context` to record the computational graph after operator fusion. +Use the `save_graphs` option of `context` to record the computational graph after operator fusion. `ms_output_after_hwopt.pb` is the computational graph after operator fusion. > Currently MindSpore supports recording computational graph after operator fusion for Ascend 910 AI processor only. @@ -359,4 +368,24 @@ Figure 13 shows the dataset lineage function area, which visualizes the paramete Figure 14: Dataset lineage list -Figure 14 shows the data processing and augmentation information of all model trainings. \ No newline at end of file +Figure 14 shows the data processing and augmentation information of all model trainings. + +### Parameter Distribution + +The parameter distribution in a form of a histogram displays tensors specified by a user. + +![histogram.png](./images/histogram.png) + +Figure 15: Histogram + +Figure 15 shows tensors recorded by a user in a form of a histogram. Click the upper right corner to zoom in the histogram. + +![histogram_func.png](./images/histogram_func.png) + +Figure 16: Function area of the parameter distribution histogram + +Figure 16 shows the function area of the parameter distribution histogram, including: + +- Tag selection: Select the required tags to view the corresponding histogram. +- Vertical axis: Select any of `Step`, `Relative time`, and `Absolute time` as the data displayed on the vertical axis of the histogram. +- Angle of view: Select either `Front` or `Top`. `Front` view refers to viewing the histogram from the front view. In this case, data between different steps is overlapped. `Top` view refers to viewing the histogram at an angle of 45 degrees. In this case, data between different steps can be presented. \ No newline at end of file diff --git a/tutorials/source_zh_cn/advanced_use/visualization_tutorials.md b/tutorials/source_zh_cn/advanced_use/visualization_tutorials.md index e1d3b50061..b2f7648b53 100644 --- a/tutorials/source_zh_cn/advanced_use/visualization_tutorials.md +++ b/tutorials/source_zh_cn/advanced_use/visualization_tutorials.md @@ -78,6 +78,28 @@ class CrossEntropyLoss(nn.Cell): return loss +class MyOptimizer(Optimizer): + """Optimizer definition.""" + def __init__(self, learning_rate, params, ......): + ...... + # Initialize ScalarSummary + self.sm_scalar = P.ScalarSummary() + self.histogram_summary = P.HistogramSummary() + self.param_count = len(self.parameters) + self.weight_names = [param.name for param in self.parameters] + + def construct(self, grads): + ...... + # Record learning rate here + self.sm_scalar("learning_rate", learning_rate) + + # Record weight + for i in range(self.param_count): + self.histogram_summary(self.weight_names[i], self.paramters[i]) + + ...... + + class Net(nn.Cell): """Net definition.""" def __init__(self): @@ -93,19 +115,6 @@ class Net(nn.Cell): ...... return out - -class MyOptimizer(Optimizer): - """Optimizer definition.""" - def __init__(self, learning_rate, ......): - ...... - # Initialize ScalarSummary - self.sm_scalar = P.ScalarSummary() - - def construct(self, grads): - ...... - # Record learning rate here - self.sm_scalar("learning_rate", learning_rate) - ...... ``` 步骤二:通过 `Callback` 的机制,添加所需的Callback实例来指定训练过程中所需要记录的数据。 @@ -135,7 +144,7 @@ def test_summary(): # Init network and Model net = Net() loss_fn = CrossEntropyLoss() - optim = MyOptimizer(learning_rate=0.01) + optim = MyOptimizer(learning_rate=0.01, params=network.trainable_params()) model = Model(net, loss_fn=loss_fn, optimizer=optim, metrics=None) # Init SummaryRecord and specify a folder for storing summary log files @@ -161,7 +170,7 @@ def test_summary(): summary_writer.close() ``` -完成脚本后,可以通过`context`的`save_graphs`选项配置记录算子融合后的计算图。 +可以通过脚本中`context`的`save_graphs`选项配置记录算子融合后的计算图。 其中`ms_output_after_hwopt.pb`为算子融合后的计算图。 > 目前MindSpore仅支持在Ascend 910 AI处理器上导出算子融合后的计算图。 -- Gitee