当前MindSpore支持将标量、图像、计算图、训练优化过程、模型超参等信息保存到summary日志文件中,并通过可视化界面进行展示。计算图数据仅能在图模式下记录,训练优化过程数据收集及地形图绘制的详细流程可参考。
MindSpore目前支持多种方式将数据记录到summary日志文件中。
在MindSpore中通过 机制提供支持快速简易地收集一些常见的信息,包括计算图,损失值,学习率,参数权重等信息的 ,叫做 。
在编写训练脚本时,仅需要实例化 ,并将其应用到 或者 中, 即可自动收集一些常见信息。 详细的用法可以参考 文档中 。
下面仅展示使用SummaryCollector自动收集数据的关键代码, 可以到gitee下载。
使用summary功能时,建议将的参数设置为。请参考文末的注意事项。
MindSpore除了提供 能够自动收集一些常见数据,还提供了Summary API,支持在网络中自定义收集其他的数据,比如每一个卷积层的输入,或在损失函数中的损失值等。
当前支持的Summary API:
记录方式如下面的步骤所示, 可以到gitee下载。
步骤一:在继承 的衍生类的 函数中调用Summary API来采集图像或标量数据或者其他数据。
比如,定义网络时,在网络的 中记录图像数据;定义损失函数时,在损失函数的 中记录损失值。
如果要记录动态学习率,可以定义优化器时,在优化器的 中记录学习率。
样例代码如下:
步骤二:在训练脚本中,实例化 ,并将其应用到 。
样例代码如下:
MindSpore支持自定义Callback, 并允许在自定义Callback中将数据记录到summary日志文件中,并通过可视化页面进行查看。
下面的样例代码则展示在自定义Callback函数中通过 模块记录网络输入到summary日志文件中。 详细的用法可以参考 文档中 。
下面展示了自定义Callback记录数据的关键样例代码, 可以到gitee下载。
上面的三种方式,支持记录计算图, 损失值等多种数据。除此以外,MindSpore还支持保存训练中其他阶段的计算图,通过 将训练脚本中 的 选项设置为 ,可以记录其他阶段的计算图,其中包括API融合后的计算图。
在保存的文件中, 即为API融合后的计算图,可以使用可视化页面对其进行查看。
如果训练时不是使用MindSpore提供的 接口,而是模仿 的 接口自由控制循环的迭代次数。则可以模拟 ,使用下面的方式记录summary API数据。
下面的例子,将演示如何使用summary API以及 的 接口在自定义训练循环中记录数据。 可以到gitee下载。 更多 的教程,请。需要说明的是,不会自动记录计算图,您需要手动传入继承了的网络实例以记录计算图。此外,生成计算图的内容仅包含您在方法中使用到的代码和函数。
由于和写数据是非进程安全的。所以在单机多卡的场景中,需要确保每张卡保存数据的目录不一样。在分布式场景下,我们通过函数设置summary目录。
示例代码如下:
除了上述使用方式外,使用summary API时还有一个记录梯度信息的技巧。请注意此技巧需要和上述的某一种使用方式同时使用。