|
-
- Class mindspore.train.callback.SummaryCollector(summary_dir, collect_freq=10, collect_specified_data=None, keep_default_action=True, custom_lineage_data=None, collect_tensor_freq=None, max_file_size=None, export_options=None)
-
- SummaryCollector可以收集一些常用信息。
-
- 它可以帮助收集loss、学习率、计算图等。
- SummaryCollector还可以允许summary算子将数据收集到summary文件中。
-
- 注:
- 1. 不允许在回调列表中存在多个SummaryCollector实例。
- 2. 并非所有信息都可以在训练阶段或评估阶段收集的。
- 3. SummaryCollector始终记录summary算子收集的数据。
- 4. SummaryCollector仅支持Linux系统。
-
- 参数:
- summary_dir (str):收集的数据将存储到此目录。
- 如果目录不存在,将自动创建。
- collect_freq (int):设置数据收集的频率,频率应大于零,单位为`step`。如果设置了频率,将在(current steps % freq)等于0时收集数据,并且将随时收集第一个step。
- 需要注意的是,如果使用数据下沉模式,单位将变成`epoch`。
- 不建议过于频繁地收集数据,因为这可能会影响性能。默认值:10。
- collect_specified_data (Union[None, dict]):对收集的数据进行自定义操作。
- 默认情况下,如果该参数设为None,则默认收集所有数据。
- 您可以使用字典自定义需要收集的数据类型。
- 例如,您可以设置{'collect_metric':False}不去收集metrics。
- 支持控制的数据如下。默认值:None。
-
- - collect_metric (bool):表示是否收集训练metrics,目前只收集loss。
- 把第一个输出视为loss,并且算出其平均数。
- 可选值:True/False。默认值:True。
- - collect_graph (bool):表示是否收集计算图。目前只收集训练计算图。可选值:True/False。默认值:True。
- - collect_train_lineage (bool):表示是否收集训练阶段的lineage数据,该字段将显示在MindInsight的lineage页面上。可选值:True/False。默认值:True。
- - collect_eval_lineage (bool):表示是否收集评估阶段的lineage数据,该字段将显示在MindInsight的lineage页面上。可选值:True/False。默认值:True。
- - collect_input_data (bool):表示是否为每次训练收集数据集。
- 目前仅支持图像数据。
- 如果数据集中有多列数据,则第一列应为图像数据。
- 可选值:True/False。默认值:True。
- - collect_dataset_graph (bool):表示是否收集训练阶段的数据集图。
- 可选值:True/False。默认值:True。
- - histogram_regular (Union[str, None]):收集参数分布页面的权重和偏置,并在MindInsight中展示。此字段允许常规字符串控制要收集的参数。
- 不建议一次收集太多参数,因为这会影响性能。
- 注:如果收集的参数太多并且内存不足,训练将会失败。
- 默认值:None,表示只收集前五个参数。
- keep_default_action (bool):此字段影响collect_specified_data字段的收集行为。
- True:表示设置指定数据后,默认收集非指定数据。
- False:表示设置指定数据后,只收集指定数据,不收集其他数据。可选值:True/False,默认值:True。
- custom_lineage_data (Union[dict, None]):允许您自定义数据并将数据显示在MingInsight的lineage页面上。在自定义数据中,key支持str类型,value支持str、int和float类型。默认值:None,表示不存在自定义数据。
- collect_tensor_freq (Optional[int]):语义与`collect_freq`的相同,但仅控制TensorSummary。
- 由于TensorSummary数据太大,无法与其他summary数据进行比较,因此此参数用于降低收集量。默认情况下,收集TensorSummary数据的最大step数量为20,但不会超过收集其他summary数据的step数量。
- 例如,给定`collect_freq=10`,当总step数量为600时,TensorSummary将收集20个step,而收集其他summary数据时会收集61个step。但当总step数量为为20时,TensorSummary和其他summary将收集3个step。
- 另外请注意,在并行模式下,会平均分配总的step数量,这会影响TensorSummary收集的step的数量。
- 默认值:None,表示要遵循上述规则。
- max_file_size (Optional[int]):可写入磁盘的每个文件的最大大小(以字节为单位)。
- 例如,如果不大于4GB,则设置`max_file_size=4*1024**3`。
- 默认值:None,表示无限制。
- export_options (Union[None, dict]):表示对导出的数据执行自定义操作。
- 注:导出的文件的大小不受max_file_size的限制。
- 您可以使用字典自定义导出的数据。例如,您可以设置{'tensor_format':'npy'}将tensor导出为NPY文件。
- 支持控制的数据如下所示。
- 默认值:None,表示不导出数据。
-
- - tensor_format (Union[str, None]):自定义导出的tensor的格式。支持["npy", None]。
- 默认值:None,表示不导出tensor。
-
- - npy:将tensor导出为NPY文件。
-
- 异常:
- ValueError:参数值与预期的不同。
- TypeError:参数类型与预期的不同。
- RuntimeError:数据采集过程中出现错误。
-
- 示例:
- >>> import mindspore.nn as nn
- >>> from mindspore import context
- >>> from mindspore.train.callback import SummaryCollector
- >>> from mindspore import Model
- >>> from mindspore.nn import Accuracy
- >>>
- >>> if __name__ == '__main__':
- ... # 如果device_target是GPU,则将device_target设为GPU。
- ... context.set_context(mode=context.GRAPH_MODE, device_target="Ascend")
- ... mnist_dataset_dir = '/path/to/mnist_dataset_directory'
- ... # model_zoo.office.cv.lenet.src.dataset.py中显示的create_dataset方法的详细信息
- ... ds_train = create_dataset(mnist_dataset_dir, 32)
- ... # model_zoo.official.cv.lenet.src.lenet.py中显示的LeNet5的详细信息
- ... network = LeNet5(10)
- ... net_loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction="mean")
- ... net_opt = nn.Momentum(network.trainable_params(), 0.01, 0.9)
- ... model = Model(network, net_loss, net_opt, metrics={"Accuracy": Accuracy()}, amp_level="O2")
- ...
- ... # 简单用法:
- ... summary_collector = SummaryCollector(summary_dir='./summary_dir')
- ... model.train(1, ds_train, callbacks=[summary_collector], dataset_sink_mode=False)
- ...
- ... # 不收集metric,收集第一层参数。默认收集其他数据。
- ... specified={'collect_metric': False, 'histogram_regular': '^conv1.*'}
- ... summary_collector = SummaryCollector(summary_dir='./summary_dir', collect_specified_data=specified)
- ... model.train(1, ds_train, callbacks=[summary_collector], dataset_sink_mode=False)
|