mindspore.SummaryRecord

class mindspore.SummaryRecord(log_dir, file_prefix='events', file_suffix='_MS', network=None, max_file_size=None, raise_exception=False, export_options=None)[源代码]

SummaryRecord用于记录summary数据和lineage数据。

该方法将在一个指定的目录中创建summary文件和lineage文件,并将数据写入文件。

它通过执行 record 方法将数据写入文件。除了通过 summary算子 记录网络的数据外,SummaryRecord还支持通过 自定义回调函数和自定义训练循环 记录数据。

Note

  • 使用SummaryRecord时,需要将代码放置到 if __name__ == “__main__” 中运行。

  • 确保在最后关闭SummaryRecord,否则进程不会退出。请参阅下面的示例部分,了解如何用两种方式正确关闭SummaryRecord。

  • 每次训练只允许创建一个SummaryRecord实例,否则会导致数据写入异常。

  • SummaryRecord仅支持Linux系统。

  • 编译MindSpore时,设置 -s on 关闭维测功能后,SummaryRecord不可用。

参数:

  • log_dir (str) - log_dir 是用来保存summary文件的目录。

  • file_prefix (str) - 文件的前缀。默认值:events

  • file_suffix (str) - 文件的后缀。默认值:_MS

  • network (Cell) - 表示用于保存计算图的网络。默认值:None。

  • max_file_size (int, 可选) - 可写入磁盘的每个文件的最大大小(以字节为单位)。例如,预期写入文件最大不超过4GB,则设置 max_file_size=4*1024**3 。默认值:None,表示无限制。

  • raise_exception (bool, 可选) - 设置在记录数据中发生RuntimeError或OSError异常时是否抛出异常。默认值:False,表示打印错误日志,不抛出异常。

  • export_options (Union[None, dict]) - 可以将保存在summary中的数据导出,并使用字典自定义所需的数据和文件格式。注:导出的文件大小不受 max_file_size 的限制。例如,您可以设置{‘tensor_format’:’npy’}将Tensor导出为 npy 文件。支持导出的数据类型如下所示。默认值:None,表示不导出数据。

    • tensor_format (Union[str, None]) - 自定义导出的Tensor的格式。支持[“npy”, None]。默认值:None,表示不导出Tensor。

      • npy:将Tensor导出为NPY文件。

异常:

  • TypeError: max_file_size 不是整型,或 file_prefixfile_suffix 不是字符串。

  • ValueError: 编译MindSpore时,设置 -s on 关闭了维测功能。

样例:

>>> import mindspore as ms
>>> if __name__ == '__main__':
...     # use in with statement to auto close
...     with ms.SummaryRecord(log_dir="./summary_dir") as summary_record:
...         pass
...
...     # use in try .. finally .. to ensure closing
...     try:
...         summary_record = ms.SummaryRecord(log_dir="./summary_dir")
...     finally:
...         summary_record.close()
add_value(plugin, name, value)[源代码]

添加需要记录的值。

参数:

  • plugin (str) - 数据类型标签。

    • graph:代表添加的数据为计算图。

    • scalar:代表添加的数据为标量。

    • image:代表添加的数据为图片。

    • tensor:代表添加的数据为张量。

    • histogram:代表添加的数据为直方图。

    • train_lineage:代表添加的数据为训练阶段的lineage数据。

    • eval_lineage:代表添加的数据为评估阶段的lineage数据。

    • dataset_graph:代表添加的数据为数据图。

    • custom_lineage_data:代表添加的数据为自定义lineage数据。

    • LANDSCAPE: 代表添加的数据为地形图。

  • name (str) - 数据名称。

  • value (Union[Tensor, GraphProto, TrainLineage, EvaluationLineage, DatasetGraph, UserDefinedInfo,LossLandscape]) - 待存储的值。

    • 当plugin为”graph”时,参数值的数据类型应为”GraphProto”对象。具体详情,请参见 mindspore/ccsrc/anf_ir.proto

    • 当plugin为”scalar”、”image”、”tensor”或”histogram”时,参数值的数据类型应为”Tensor”对象。

    • 当plugin为”train_lineage”时,参数值的数据类型应为”TrainLineage”对象。具体详情,请参见 mindspore/ccsrc/lineage.proto

    • 当plugin为”eval_lineage”时,参数值的数据类型应为”EvaluationLineage”对象。具体详情,请参见 mindspore/ccsrc/lineage.proto

    • 当plugin为”dataset_graph”时,参数值的数据类型应为”DatasetGraph”对象。具体详情,请参见 mindspore/ccsrc/lineage.proto

    • 当plugin为”custom_lineage_data”时,参数值的数据类型应为”UserDefinedInfo”对象。具体详情,请参见 mindspore/ccsrc/lineage.proto

    • 当plugin为”LANDSCAPE”时,参数值的数据类型应为”LossLandscape”对象。具体详情,请参见 mindspore/ccsrc/summary.proto

异常:

  • ValueError: plugin 的值不在可选值内。

  • TypeError: name 不是非空字符串,或当 plugin 为”scalar”、”image”、”tensor”或”histogram”时,value 的数据类型不是”Tensor”对象。

样例:

>>> import mindspore as ms
>>> from mindspore import Tensor
>>> if __name__ == '__main__':
...     with ms.SummaryRecord(log_dir="./summary_dir", file_prefix="xx_", file_suffix="_yy") \
...             as summary_record:
...         summary_record.add_value('scalar', 'loss', Tensor(0.1))
close()[源代码]

将缓冲区中的数据立刻写入文件并关闭SummaryRecord。请使用with语句或try…finally语句进行自动关闭。

样例:

>>> import mindspore as ms
>>> if __name__ == '__main__':
...     try:
...         summary_record = ms.SummaryRecord(log_dir="./summary_dir")
...     finally:
...         summary_record.close()
flush()[源代码]

刷新缓冲区,将缓冲区中的数据写入磁盘。

调用该函数以确保所有挂起事件都已写入到磁盘。

样例:

>>> import mindspore as ms
>>> if __name__ == '__main__':
...     with ms.SummaryRecord(log_dir="./summary_dir", file_prefix="xx_", file_suffix="_yy") \
...             as summary_record:
...         summary_record.flush()
property log_dir

获取日志文件的完整路径。

返回:

str,日志文件的完整路径。

样例:

>>> import mindspore as ms
>>> if __name__ == '__main__':
...     with ms.SummaryRecord(log_dir="./summary_dir", file_prefix="xx_", file_suffix="_yy") \
...             as summary_record:
...         log_dir = summary_record.log_dir
record(step, train_network=None, plugin_filter=None)[源代码]

记录summary。

参数:

  • step (int) - 表示当前的step。

  • train_network (Cell) - 表示用于保存计算图的训练网络。默认值:None,表示当原始网络的图为None时,不保存计算图。

  • plugin_filter (Callable[[str], bool], 可选) - 过滤器函数,用于过滤需要写入的标签项。默认值:None。

返回:

bool,表示记录是否成功。

异常:

  • TypeError: step 不为整型,或 train_network 的类型不为 mindspore.nn.Cell

样例:

>>> import mindspore as ms
>>> if __name__ == '__main__':
...     with ms.SummaryRecord(log_dir="./summary_dir", file_prefix="xx_", file_suffix="_yy") \
...             as summary_record:
...         result = summary_record.record(step=2)
...         print(result)
...
True
set_mode(mode)[源代码]

设置模型运行阶段。不同的阶段会影响记录数据的内容。

参数:

  • mode (str) - 待设置的网络阶段,可选值为”train”或”eval”。

    • train:代表训练阶段。

    • eval:代表评估阶段,此时 summary_record 不会记录summary算子的数据。

异常:

ValueError: mode 的值不在可选值内。

样例:

>>> import mindspore as ms
>>> if __name__ == '__main__':
...     with ms.SummaryRecord(log_dir="./summary_dir", file_prefix="xx_", file_suffix="_yy") \
...             as summary_record:
...         summary_record.set_mode('eval')