# 训练过程可视¶

## 操作流程¶

• 准备训练脚本，并在训练脚本中指定标量、图像、计算图、模型超参等信息记录到summary日志文件，接着运行训练脚本。

• 启动MindInsight，并通过启动参数指定summary日志文件目录，启动成功后，根据IP和端口访问可视化界面，默认访问地址为 `http://127.0.0.1:8080`

• 在训练过程中，有数据写入summary日志文件时，即可在页面中查看可视的数据。

## 准备训练脚本¶

### 基础写法¶

```from mindspore import context, Tensor, nn
from mindspore.common import dtype as mstype
from mindspore.ops import operations as P
from mindspore.ops import functional as F
from mindspore.nn import Optimizer

class CrossEntropyLoss(nn.Cell):
"""Loss function definition."""
def __init__(self):
super(CrossEntropyLoss, self).__init__()
self.cross_entropy = P.SoftmaxCrossEntropyWithLogits()
self.mean = P.ReduceMean()
self.one_hot = P.OneHot()
self.on_value = Tensor(1.0, mstype.float32)
self.off_value = Tensor(0.0, mstype.float32)

# Init ScalarSummary
self.sm_scalar = P.ScalarSummary()

def construct(self, logits, label):
label = self.one_hot(label, F.shape(logits)[1], self.on_value, self.off_value)
loss = self.cross_entropy(logits, label)[0]
loss = self.mean(loss, (-1,))

# Record loss
self.sm_scalar("loss", loss)
return loss

class Net(nn.Cell):
"""Net definition."""
def __init__(self):
super(Net, self).__init__()
......

# Init ImageSummary
self.sm_image = P.ImageSummary()

def construct(self, data):
# Record image by Summary operator
self.sm_image("image", data)
......
return out

class MyOptimizer(Optimizer):
"""Optimizer definition."""
def __init__(self, learning_rate, ......):
......
# Initialize ScalarSummary
self.sm_scalar = P.ScalarSummary()

......
# Record learning rate here
self.sm_scalar("learning_rate", learning_rate)
......
```

• `SummaryStep` 用于指定记录summary数据的步骤间隔，每隔指定步骤记录一次数据。

• `TrainLineage` 用于记录模型训练相关的参数信息。

• `EvalLineage` 用于记录模型测试相关的参数信息。

```from mindinsight.lineagemgr import TrainLineage, EvalLineage
from mindspore import Model, nn, context
from mindspore.train.callback import SummaryStep
from mindspore.train.summary.summary_record import SummaryRecord

def test_summary():
# Init context env
context.set_context(mode=context.GRAPH_MODE, device_target='Ascend')
# Init hyperparameter
epoch = 2
# Init network and Model
net = Net()
loss_fn = CrossEntropyLoss()
optim = MyOptimizer(learning_rate=0.01)
model = Model(net, loss_fn=loss_fn, optimizer=optim, metrics=None)

# Init SummaryRecord and specify a folder for storing summary log files
# and specify the graph that needs to be recorded
summary_writer = SummaryRecord(log_dir='./summary', network=net)
summary_callback = SummaryStep(summary_writer, flush_step=10)

# Init TrainLineage to record the training information
train_callback = TrainLineage(summary_writer)

# Prepare mindrecord_dataset for training
train_ds = create_mindrecord_dataset_for_training()
model.train(epoch, train_ds, callbacks=[summary_callback, train_callback])

# Init EvalLineage to record the evaluation information
eval_callback = EvalLineage(summary_writer)

# Prepare mindrecord_dataset for testing
eval_ds = create_mindrecord_dataset_for_testing()
model.eval(eval_ds, callbacks=[eval_callback])

# Close summary
summary_writer.close()
```

## MindInsight相关命令¶

### 查看命令帮助信息¶

```mindinsight --help
```

### 查看版本信息¶

```mindinsight --version
```

### 启动服务¶

```mindinsight start [-h] [--config <CONFIG>] [--workspace <WORKSPACE>]
[--summary-base-dir <SUMMARY_BASE_DIR>]
```

• `-h, --help` : 显示启动命令的帮助信息。

• `--config <CONFIG>` : 指定配置文件或配置模块，CONFIG为物理文件路径（file:/path/to/config.py）或Python可识别的模块路径（python:path.to.config.module）。

• `--workspace <WORKSPACE>` : 指定工作目录路径，WORKSPACE默认为 \$HOME/mindinsight。

• `--port <PORT>` : 指定Web可视化服务端口，取值范围是1~65535，PORT默认为8080。

• `--reload-interval <RELOAD_INTERVAL>` : 指定加载数据的时间间隔（单位：秒），设置为0时表示只加载一次数据，RELOAD_INTERVAL默认为3秒。

• `--summary-base-dir <SUMMARY_BASE_DIR>` : 指定加载训练日志数据的根目录路径，MindInsight将遍历此路径下的直属子目录，查找文件名符合正则表达式’summary.\d+’或’.pb\$’的日志文件。若某个直属子目录包含日志文件，则该子目录被识别为日志文件目录，若根目录包含日志文件，则根目录被识别为日志文件目录。SUMMARY_BASE_DIR默认为当前目录路径。

### 停止服务¶

```mindinsight stop [-h] [--port PORT]
```

• `-h, --help` : 显示停止命令的帮助信息。

• `--port <PORT>` : 指定Web可视化服务端口，取值范围是1~65535，PORT默认为8080。

### 查看服务进程信息¶

MindInsight向用户提供Web服务，可通过以下命令，查看当前运行的Web服务进程。

```ps -ef | grep mindinsight
```

```lsof -p <PID> | grep access
```

```gunicorn  <PID>  <USER>  <FD>  <TYPE>  <DEVICE>  <SIZE/OFF>  <NODE>  <WORKSPACE>/log/gunicorn/access.log
```

## 可视化组件¶

### 计算图可视化¶

• 文件选择框: 可以选择查看不同文件的计算图。

• 搜索框：可以对节点进行搜索，输入节点名称点击回车，即可展示该节点。

• 缩略图：展示整个网络图结构的缩略图，在查看超大图结构时，方便查看当前浏览的区域。

• 节点信息：展示选中的节点的基本信息，包括节点的名称、属性、输入节点、输出节点等信息。

• 图例：展示的是计算图中各个图标的含义。

### 标量可视化¶

• 全屏展示即全屏展示该标量曲线，再点击一次即可恢复。

• 切换Y轴比例是指可以将Y轴坐标进行对数转换。

• 开启/关闭框选是指可以框选图中部分区域，并放大查看该区域， 可以在已放大的图形上叠加框选。

• 分步回退是指对同一个区域连续框选并放大查看时，可以逐步撤销操作。

• 还原图形是指进行了多次框选后，点击此按钮可以将图还原回原始状态。

• 标签：提供了对所有标签进行多项选择的功能，用户可以通过勾选所需的标签，查看对应的标量信息。

• 水平轴：可以选择“步骤”、“相对时间”、“绝对时间”中的任意一项，来作为标量曲线的水平轴。

• 平滑度：可以通过调整平滑度，对标量曲线进行平滑处理。

• 标量合成：可以选中两条标量曲线进行合成并展示在一个图中，以方便对两条曲线进行对比或者查看合成后的图。

### 图像可视化¶

• 标签：提供了对所有标签进行多项选择的功能，用户可以通过勾选所需的标签，查看对应的图片信息。

• 亮度调整：可以调整所展示的所有图片亮度。

• 对比度调整：可以调整所展示的所有图片对比度。

### 数据图可视化¶

• 图例：展示数据溯源图中各个图标的含义。

• 数据处理流水线：展示训练所使用的数据处理流水线，可以选择图中的单个节点查看详细信息。

• 节点信息：展示选中的节点的基本信息，包括使用的数据处理和增强算子的名称、参数等。