mindspore.train
mindspore.train.summary
使用SummaryRecord将需要的数据存储为summary文件和lineage文件,使用方法包括自定义回调函数和自定义训练循环。保存的summary文件使用MindInsight进行可视化分析。
- class mindspore.train.summary.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_prefix 和 file_suffix 不是字符串。 
- ValueError: 编译MindSpore时,设置 -s on 关闭了维测功能。 
 - 样例: - >>> from mindspore.train.summary import SummaryRecord >>> if __name__ == '__main__': ... # use in with statement to auto close ... with SummaryRecord(log_dir="./summary_dir") as summary_record: ... pass ... ... # use in try .. finally .. to ensure closing ... try: ... summary_record = 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”对象。 
 - 样例: - >>> from mindspore import Tensor >>> from mindspore.train.summary import SummaryRecord >>> if __name__ == '__main__': ... with 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语句进行自动关闭。 - 样例: - >>> from mindspore.train.summary import SummaryRecord >>> if __name__ == '__main__': ... try: ... summary_record = SummaryRecord(log_dir="./summary_dir") ... finally: ... summary_record.close() 
 - flush()[源代码]
- 刷新缓冲区,将缓冲区中的数据写入磁盘。 - 调用该函数以确保所有挂起事件都已写入到磁盘。 - 样例: - >>> from mindspore.train.summary import SummaryRecord >>> if __name__ == '__main__': ... with SummaryRecord(log_dir="./summary_dir", file_prefix="xx_", file_suffix="_yy") as summary_record: ... summary_record.flush() 
 - property log_dir
- 获取日志文件的完整路径。 - 返回: - str,日志文件的完整路径。 - 样例: - >>> from mindspore.train.summary import SummaryRecord >>> if __name__ == '__main__': ... with 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 。 
 - 样例: - >>> from mindspore.train.summary import SummaryRecord >>> if __name__ == '__main__': ... with 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 的值不在可选值内。 - 样例: - >>> from mindspore.train.summary import SummaryRecord >>> if __name__ == '__main__': ... with SummaryRecord(log_dir="./summary_dir", file_prefix="xx_", file_suffix="_yy") as summary_record: ... summary_record.set_mode('eval') 
 
mindspore.train.callback
- class mindspore.train.callback.Callback[源代码]
- 用于构建Callback函数的基类。Callback函数是一个上下文管理器,在运行模型时被调用。 可以使用此机制进行一些自定义操作。 - Callback函数可以在step或epoch开始前或结束后执行一些操作。 要创建自定义Callback,需要继承Callback基类并重载它相应的方法,有关自定义Callback的详细信息,请查看 Callback。 - 样例: - >>> import numpy as np >>> from mindspore import Model, nn >>> from mindspore.train.callback import Callback >>> from mindspore import dataset as ds >>> class Print_info(Callback): ... def step_end(self, run_context): ... cb_params = run_context.original_args() ... print("step_num: ", cb_params.cur_step_num) >>> >>> print_cb = Print_info() >>> data = {"x": np.float32(np.random.rand(64, 10)), "y": np.random.randint(0, 5, (64,))} >>> dataset = ds.NumpySlicesDataset(data=data).batch(32) >>> net = nn.Dense(10, 5) >>> loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean') >>> optim = nn.Momentum(net.trainable_params(), 0.01, 0.9) >>> model = Model(net, loss_fn=loss, optimizer=optim) >>> model.train(1, dataset, callbacks=print_cb) step_num: 2 
- class mindspore.train.callback.LossMonitor(per_print_times=1)[源代码]
- 监控训练的loss。 - 如果loss是NAN或INF,则终止训练。 - Note - 如果 per_print_times 为0,则不打印loss。 - 参数: - per_print_times (int) - 表示每隔多少个step打印一次loss。默认值:1。 
 - 异常: - ValueError - 当 per_print_times 不是整数或小于零。 
 - 样例: - >>> from mindspore import Model, nn >>> >>> net = LeNet5() >>> loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean') >>> optim = nn.Momentum(net.trainable_params(), 0.01, 0.9) >>> model = Model(net, loss_fn=loss, optimizer=optim) >>> data_path = './MNIST_Data' >>> dataset = create_dataset(data_path) >>> loss_monitor = LossMonitor() >>> model.train(10, dataset, callbacks=loss_monitor) 
- class mindspore.train.callback.TimeMonitor(data_size=None)[源代码]
- 监控训练时间。 - 参数: - data_size (int) - 表示每隔多少个step打印一次信息。如果程序在训练期间获取到Model的 batch_num ,则将把 data_size 设为 batch_num ,否则将使用 data_size 。默认值:None。 
 - 异常: - ValueError - data_size 不是正整数。 
 - 样例: - >>> from mindspore import Model, nn >>> >>> net = LeNet5() >>> loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean') >>> optim = nn.Momentum(net.trainable_params(), 0.01, 0.9) >>> model = Model(net, loss_fn=loss, optimizer=optim) >>> data_path = './MNIST_Data' >>> dataset = create_dataset(data_path) >>> time_monitor = TimeMonitor() >>> model.train(10, dataset, callbacks=time_monitor) 
- class mindspore.train.callback.ModelCheckpoint(prefix='CKP', directory=None, config=None)[源代码]
- checkpoint的回调函数。 - 在训练过程中调用该方法可以保存网络参数。 - Note - 在分布式训练场景下,请为每个训练进程指定不同的目录来保存checkpoint文件。否则,可能会训练失败。 如果在 model 方法中使用此回调函数,默认将会把优化器中的参数保存到checkpoint文件中。 - 参数: - prefix (str) - checkpoint文件的前缀名称。默认值:’CKP’。 
- directory (str) - 保存checkpoint文件的文件夹路径。默认情况下,文件保存在当前目录下。默认值:None。 
- config (CheckpointConfig) - checkpoint策略配置。默认值:None。 
 - 异常: - ValueError - 如果prefix参数不是str类型或包含’/’字符。 
- ValueError - 如果directory参数不是str类型。 
- TypeError - config不是CheckpointConfig类型。 
 - property latest_ckpt_file_name
- 返回最新的checkpoint路径和文件名。 
 
- 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文件中。 - Note - 使用SummaryCollector时,需要将代码放置到 if __name__ == “__main__” 中运行。 
- 不允许在回调列表中存在多个SummaryCollector实例。 
- 并非所有信息都可以在训练阶段或评估阶段收集。 
- SummaryCollector始终记录summary算子收集的数据。 
- SummaryCollector仅支持Linux系统。 
- 编译MindSpore时,设置 -s on 关闭维测功能后,SummaryCollector不可用。 
 - 参数: - summary_dir (str) - 收集的数据将存储到此目录。如果目录不存在,将自动创建。 
- collect_freq (int) - 设置数据收集的频率,频率应大于零,单位为 step 。如果设置了频率,将在(current steps % freq)=0时收集数据,并且将总是收集第一个step。需要注意的是,如果使用数据下沉模式,单位将变成 epoch 。不建议过于频繁地收集数据,因为这可能会影响性能。默认值:10。 
- collect_specified_data (Union[None, dict]) - 对收集的数据进行自定义操作。您可以使用字典自定义需要收集的数据类型。例如,您可以设置{‘collect_metric’:False}不去收集metrics。支持控制的数据如下。默认值:None,收集所有数据。 - collect_metric (bool) - 表示是否收集训练metrics,目前只收集loss。把第一个输出视为loss,并且算出其平均数。默认值:True。 
- collect_graph (bool) - 表示是否收集计算图。目前只收集训练计算图。默认值:True。 
- collect_train_lineage (bool) - 表示是否收集训练阶段的lineage数据,该字段将显示在MindInsight的 lineage页面 上。默认值:True。 
- collect_eval_lineage (bool) - 表示是否收集评估阶段的lineage数据,该字段将显示在MindInsight的lineage页面上。默认值:True。 
- collect_input_data (bool) - 表示是否为每次训练收集数据集。目前仅支持图像数据。如果数据集中有多列数据,则第一列应为图像数据。默认值:True。 
- collect_dataset_graph (bool) - 表示是否收集训练阶段的数据集图。默认值:True。 
- histogram_regular (Union[str, None]) - 收集参数分布页面的权重和偏置,并在MindInsight中展示。此字段允许正则表达式控制要收集的参数。不建议一次收集太多参数,因为这会影响性能。注:如果收集的参数太多并且内存不足,训练将会失败。默认值:None,表示只收集网络的前五个超参。 
- collect_landscape (Union[dict, None]) - 表示是否收集创建loss地形图所需要的参数。如果设置None,则不收集任何参数。默认收集所有参数并且将会保存在 {summary_dir}/ckpt_dir/train_metadata.json 文件中。 - landscape_size (int) - 指定生成loss地形图的图像分辨率。例如:如果设置为128,则loss地形图的分辨率是128*128。注意:计算loss地形图的时间随着分辨率的增大而增加。默认值:40。可选值:3-256。 
- unit (str) - 指定训练过程中保存checkpoint时,下方参数 intervals 以何种形式收集模型权重。例如:将 intervals 设置为[[1, 2, 3, 4]],如果 unit 设置为step,则收集模型权重的频率单位为step,将保存1-4个step的模型权重,而 unit 设置为epoch,则将保存1-4个epoch的模型权重。默认值:step。可选值:epoch/step。 
- create_landscape (dict) - 选择创建哪种类型的loss地形图,分为训练过程loss地形图(train)和训练结果loss地形图(result)。默认值:{“train”: True, “result”: True}。可选值:True/False。 
- num_samples (int) - 创建loss地形图所使用的数据集的大小。例如:在图像数据集中,您可以设置 num_samples 是128,这意味着将有128张图片被用来创建loss地形图。注意:num_samples 越大,计算loss地形图时间越长。默认值:128。 
- intervals (List[List[int]]) - 指定loss地形图的区间。例如:如果用户想要创建两张训练过程的loss地形图,分别为1-5epoch和6-10epoch,则用户可以设置[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]。注意:每个区间至少包含3个epoch。 
 
 
- keep_default_action (bool) - 此字段影响 collect_specified_data 字段的收集行为。True:表示设置指定数据后,其他数据按默认设置收集。False:表示设置指定数据后,只收集指定数据,不收集其他数据。默认值:True。 
- custom_lineage_data (Union[dict, None]) - 允许您自定义数据并将数据显示在MindInsight的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: 编译MindSpore时,设置 -s on 关闭了维测功能。 
 - 样例: - >>> 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__': ... # If the device_target is GPU, set the device_target to "GPU" ... context.set_context(mode=context.GRAPH_MODE, device_target="Ascend") ... mnist_dataset_dir = '/path/to/mnist_dataset_directory' ... # The detail of create_dataset method shown in model_zoo.official.cv.lenet.src.dataset.py ... ds_train = create_dataset(mnist_dataset_dir, 32) ... # The detail of LeNet5 shown in model_zoo.official.cv.lenet.src.lenet.py ... 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") ... ... # Simple usage: ... summary_collector = SummaryCollector(summary_dir='./summary_dir') ... model.train(1, ds_train, callbacks=[summary_collector], dataset_sink_mode=False) ... ... # Do not collect metric and collect the first layer parameter, others are collected by default ... 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) 
- class mindspore.train.callback.CheckpointConfig(save_checkpoint_steps=1, save_checkpoint_seconds=0, keep_checkpoint_max=5, keep_checkpoint_per_n_minutes=0, integrated_save=True, async_save=False, saved_network=None, append_info=None, enc_key=None, enc_mode='AES-GCM', exception_save=False)[源代码]
- 保存checkpoint时的配置策略。 - Note - 在训练过程中,如果数据集是通过数据通道传输的,建议将 save_checkpoint_steps 设为循环下沉step数量的整数倍数,否则,保存checkpoint的时机可能会有偏差。建议同时只设置一种触发保存checkpoint策略和一种保留checkpoint文件总数策略。如果同时设置了 save_checkpoint_steps 和 save_checkpoint_seconds ,则 save_checkpoint_seconds 无效。如果同时设置了 keep_checkpoint_max 和 keep_checkpoint_per_n_minutes ,则 keep_checkpoint_per_n_minutes 无效。 - 参数: - save_checkpoint_steps (int) - 每隔多少个step保存一次checkpoint。默认值:1。 
- save_checkpoint_seconds (int) - 每隔多少秒保存一次checkpoint。不能同时与 save_checkpoint_steps 一起使用。默认值:0。 
- keep_checkpoint_max (int) - 最多保存多少个checkpoint文件。默认值:5。 
- keep_checkpoint_per_n_minutes (int) - 每隔多少分钟保存一个checkpoint文件。不能同时与 keep_checkpoint_max 一起使用。默认值:0。 
- integrated_save (bool) - 在自动并行场景下,是否合并保存拆分后的Tensor。合并保存功能仅支持在自动并行场景中使用,在手动并行场景中不支持。默认值:True。 
- async_save (bool) - 是否异步执行保存checkpoint文件。默认值:False。 
- saved_network (Cell) - 保存在checkpoint文件中的网络。如果 saved_network 没有被训练,则保存 saved_network 的初始值。默认值:None。 
- append_info (list) - 保存在checkpoint文件中的信息。支持”epoch_num”、”step_num”和dict类型。dict的key必须是str,dict的value必须是int、float或bool中的一个。默认值:None。 
- enc_key (Union[None, bytes]) - 用于加密的字节类型key。如果值为None,则不需要加密。默认值:None。 
- enc_mode (str) - 仅当 enc_key 不设为None时,该参数有效。指定了加密模式,目前支持AES-GCM和AES-CBC。默认值:AES-GCM。 
- exception_save (bool) - 当有异常发生时,是否保存当前checkpoint文件。默认值:False。 
 - 异常: - ValueError - 输入参数的类型不正确。 
 - 样例: - >>> from mindspore import Model, nn >>> from mindspore.train.callback import ModelCheckpoint, CheckpointConfig >>> from mindspore.common.initializer import Normal >>> >>> class LeNet5(nn.Cell): ... def __init__(self, num_class=10, num_channel=1): ... super(LeNet5, self).__init__() ... self.conv1 = nn.Conv2d(num_channel, 6, 5, pad_mode='valid') ... self.conv2 = nn.Conv2d(6, 16, 5, pad_mode='valid') ... self.fc1 = nn.Dense(16 * 5 * 5, 120, weight_init=Normal(0.02)) ... self.fc2 = nn.Dense(120, 84, weight_init=Normal(0.02)) ... self.fc3 = nn.Dense(84, num_class, weight_init=Normal(0.02)) ... self.relu = nn.ReLU() ... self.max_pool2d = nn.MaxPool2d(kernel_size=2, stride=2) ... self.flatten = nn.Flatten() ... ... def construct(self, x): ... x = self.max_pool2d(self.relu(self.conv1(x))) ... x = self.max_pool2d(self.relu(self.conv2(x))) ... x = self.flatten(x) ... x = self.relu(self.fc1(x)) ... x = self.relu(self.fc2(x)) ... x = self.fc3(x) ... return x >>> >>> net = LeNet5() >>> loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean') >>> optim = nn.Momentum(net.trainable_params(), 0.01, 0.9) >>> model = Model(net, loss_fn=loss, optimizer=optim) >>> data_path = './MNIST_Data' >>> dataset = create_dataset(data_path) >>> config = CheckpointConfig(saved_network=net) >>> ckpoint_cb = ModelCheckpoint(prefix='LeNet5', directory='./checkpoint', config=config) >>> model.train(10, dataset, callbacks=ckpoint_cb) - property append_dict
- 获取需要额外保存到checkpoint中的字典的值。 - 返回: - Dict: 字典中的值。 
 - property async_save
- 获取是否异步保存checkpoint。 - 返回: - Bool: 是否异步保存checkpoint。 
 - property enc_key
- 获取加密的key值。 - 返回: - (None, bytes): 加密的key值。 
 - property enc_mode
- 获取加密模式。 - 返回: - str: 加密模式。 
 - property integrated_save
- 获取是否合并保存拆分后的Tensor。 - 返回: - Bool: 获取是否合并保存拆分后的Tensor。 
 - property keep_checkpoint_max
- 获取最多保存checkpoint文件的数量。 - 返回: - Int: 最多保存checkpoint文件的数量。 
 - property keep_checkpoint_per_n_minutes
- 获取每隔多少分钟保存一个checkpoint文件。 - 返回: - Int: 每隔多少分钟保存一个checkpoint文件。 
 - property save_checkpoint_seconds
- 获取每隔多少秒保存一次checkpoint文件。 - 返回: - Int: 每隔多少秒保存一次checkpoint文件。 
 - property save_checkpoint_steps
- 获取每隔多少个step保存一次checkpoint文件。 - 返回: - Int: 每隔多少个step保存一次checkpoint文件。 
 - property saved_network
- 获取需要保存的网络。 - 返回: - Cell: 需要保存的网络。 
 
- class mindspore.train.callback.RunContext(original_args)[源代码]
- 提供模型的相关信息。 - 在Model方法里提供模型的相关信息。 回调函数可以调用 request_stop() 方法来停止迭代。 - 参数: - original_args (dict) - 模型的相关信息。 
 
- class mindspore.train.callback.LearningRateScheduler(learning_rate_function)[源代码]
- 用于在训练期间更改学习率。 - 参数: - learning_rate_function (Function) - 在训练期间更改学习率的函数。 
 - 样例: - >>> import numpy as np >>> from mindspore import Model >>> from mindspore.train.callback import LearningRateScheduler >>> import mindspore.nn as nn >>> from mindspore import dataset as ds ... >>> def learning_rate_function(lr, cur_step_num): ... if cur_step_num%1000 == 0: ... lr = lr*0.1 ... return lr ... >>> lr = 0.1 >>> momentum = 0.9 >>> net = nn.Dense(10, 5) >>> loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean') >>> optim = nn.Momentum(net.trainable_params(), learning_rate=lr, momentum=momentum) >>> model = Model(net, loss_fn=loss, optimizer=optim) ... >>> data = {"x": np.float32(np.random.rand(64, 10)), "y": np.random.randint(0, 5, (64,))} >>> dataset = ds.NumpySlicesDataset(data=data).batch(32) >>> model.train(1, dataset, callbacks=[LearningRateScheduler(learning_rate_function)], ... dataset_sink_mode=False) 
- class mindspore.train.callback.SummaryLandscape(summary_dir)[源代码]
- SummaryLandscape可以帮助您收集loss地形图的信息。通过计算loss,可以在PCA(Principal Component Analysis)方向或者随机方向创建地形图。 - Note - 使用SummaryLandscape时,需要将代码放置到 if __name__ == “__main__” 中运行。 
- SummaryLandscape仅支持Linux系统。 
 - 参数: - summary_dir (str) - 该路径将被用来保存创建地形图所使用的数据。 
 - 样例: - >>> import mindspore.nn as nn >>> from mindspore import context >>> from mindspore.train.callback import SummaryCollector, SummaryLandscape >>> from mindspore import Model >>> from mindspore.nn import Loss, Accuracy >>> >>> if __name__ == '__main__': ... # If the device_target is Ascend, set the device_target to "Ascend" ... context.set_context(mode=context.GRAPH_MODE, device_target="GPU") ... mnist_dataset_dir = '/path/to/mnist_dataset_directory' ... # The detail of create_dataset method shown in model_zoo.official.cv.lenet.src.dataset.py ... ds_train = create_dataset(mnist_dataset_dir, 32) ... # The detail of LeNet5 shown in model_zoo.official.cv.lenet.src.lenet.py ... 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()}) ... # Simple usage for collect landscape information: ... interval_1 = [1, 2, 3, 4, 5] ... summary_collector = SummaryCollector(summary_dir='./summary/lenet_interval_1', ... collect_specified_data={'collect_landscape':{"landscape_size": 4, ... "unit": "step", ... "create_landscape":{"train":True, ... "result":False}, ... "num_samples": 2048, ... "intervals": [interval_1]} ... }) ... model.train(1, ds_train, callbacks=[summary_collector], dataset_sink_mode=False) ... ... # Simple usage for visualization landscape: ... def callback_fn(): ... network = LeNet5(10) ... net_loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction="mean") ... metrics = {"Loss": Loss()} ... model = Model(network, net_loss, metrics=metrics) ... mnist_dataset_dir = '/path/to/mnist_dataset_directory' ... ds_eval = create_dataset(mnist_dataset_dir, 32) ... return model, network, ds_eval, metrics ... ... summary_landscape = SummaryLandscape('./summary/lenet_interval_1') ... # parameters of collect_landscape can be modified or unchanged ... summary_landscape.gen_landscapes_with_multi_process(callback_fn, ... collect_landscape={"landscape_size": 4, ... "create_landscape":{"train":False, ... "result":False}, ... "num_samples": 2048, ... "intervals": [interval_1]}, ... device_ids=[1]) - gen_landscapes_with_multi_process(callback_fn, collect_landscape=None, device_ids=None, output=None)[源代码]
- 使用多进程来生成地形图。 - 参数: - callback_fn (python function) - Python函数对象,用户需要写一个没有输入的函数,返回值要求如下。 - mindspore.train.Model:用户的模型。 
- mindspore.nn.Cell:用户的网络。 
- mindspore.dataset:创建loss所需要的用户数据集。 
- mindspore.nn.Metrics:用户的评估指标。 
 
- collect_landscape (Union[dict, None]) - 创建loss地形图所用的参数含义与SummaryCollector同名字段一致。此处设置的目的是允许用户可以自由修改创建loss地形图参数。默认值:None。 - landscape_size (int) - 指定生成loss地形图的图像分辨率。例如:如果设置为128,则loss地形图的分辨率是128*128。计算loss地形图的时间随着分辨率的增大而增加。默认值:40。可选值:3-256。 
- create_landscape (dict) - 选择创建哪种类型的loss地形图,分为训练过程loss地形图(train)和训练结果loss地形图(result)。默认值:{“train”: True, “result”: True}。可选值:True/False。 
- num_samples (int) - 创建loss地形图所使用的数据集的大小。例如:在图像数据集中,您可以设置 num_samples 是128,这意味着将有128张图片被用来创建loss地形图。注意:num_samples 越大,计算loss地形图时间越长。默认值:128。 
- intervals (List[List[int]]) - 指定创建loss地形图所需要的checkpoint区间。例如:如果用户想要创建两张训练过程的loss地形图,分别为1-5epoch和6-10epoch,则用户可以设置[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]。注意:每个区间至少包含3个epoch。 
 
- device_ids (List(int)) - 指定创建loss地形图所使用的目标设备的ID。例如:[0, 1]表示使用设备0和设备1来创建loss地形图。默认值:None。 
- output (str) - 指定保存loss地形图的路径。默认值:None。默认保存路径与summary文件相同。 
 
 
- class mindspore.train.callback.History[源代码]
- 将网络输出的相关信息记录到 History 对象中。 - 用户不自定义训练网络或评估网络情况下,记录的内容将为损失值;用户自定义了训练网络/评估网络的情况下,如果定义的网络返回 Tensor 或 numpy.ndarray,则记录此返回值均值,如果返回 tuple 或 list,则记录第一个元素。 - Note - 通常使用在 mindspore.Model.train 中。 - 样例: - >>> import numpy as np >>> import mindspore.dataset as ds >>> from mindspore.train.callback import History >>> from mindspore import Model, nn >>> data = {"x": np.float32(np.random.rand(64, 10)), "y": np.random.randint(0, 5, (64,))} >>> train_dataset = ds.NumpySlicesDataset(data=data).batch(32) >>> net = nn.Dense(10, 5) >>> crit = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean') >>> opt = nn.Momentum(net.trainable_params(), 0.01, 0.9) >>> history_cb = History() >>> model = Model(network=net, optimizer=opt, loss_fn=crit, metrics={"recall"}) >>> model.train(2, train_dataset, callbacks=[history_cb]) >>> print(history_cb.epoch) >>> print(history_cb.history) {'epoch': [1, 2]} {'net_output': [1.607877, 1.6033841]} 
- class mindspore.train.callback.LambdaCallback(epoch_begin=None, epoch_end=None, step_begin=None, step_end=None, begin=None, end=None)[源代码]
- 用于自定义简单的callback。 - 使用匿名函数构建callback,定义的匿名函数将在 mindspore.Model.{train | eval} 的对应阶段被调用。 - 请注意,callback的每个阶段都需要一个位置参数:run_context。 - Note - 这是一个会变更或删除的实验性接口。 
 - 参数: - epoch_begin (Function) - 每个epoch开始时被调用。 
- epoch_end (Function) - 每个epoch结束时被调用。 
- step_begin (Function) - 每个step开始时被调用。 
- step_end (Function) - 每个step结束时被调用。 
- begin (Function) - 模型训练、评估开始时被调用。 
- end (Function) - 模型训练、评估结束时被调用。 
 - 样例: - >>> import numpy as np >>> import mindspore.dataset as ds >>> from mindspore.train.callback import LambdaCallback >>> from mindspore import Model, nn >>> data = {"x": np.float32(np.random.rand(64, 10)), "y": np.random.randint(0, 5, (64,))} >>> train_dataset = ds.NumpySlicesDataset(data=data).batch(32) >>> net = nn.Dense(10, 5) >>> crit = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean') >>> opt = nn.Momentum(net.trainable_params(), 0.01, 0.9) >>> lambda_callback = LambdaCallback(epoch_end= ... lambda run_context: print("loss: ", run_context.original_args().net_outputs)) >>> model = Model(network=net, optimizer=opt, loss_fn=crit, metrics={"recall"}) >>> model.train(2, train_dataset, callbacks=[lambda_callback]) loss: 1.6127687 loss: 1.6106578 
mindspore.train.train_thor
转换为二阶相关的类和函数。
- class mindspore.train.train_thor.ConvertModelUtils[源代码]
- 该接口用于增加计算图,提升二阶算法THOR运行时的性能。 - static convert_to_thor_model(model, network, loss_fn=None, optimizer=None, metrics=None, amp_level='O0', loss_scale_manager=None, keep_batchnorm_fp32=False)[源代码]
- 该接口用于增加计算图,提升二阶算法THOR运行时的性能。 - 参数: - model (Object) - 用于训练的高级API。 Model 将图层分组到具有训练特征的对象中。 
- network (Cell) - 训练网络。 
- loss_fn (Cell) - 目标函数。默认值:None。 
- optimizer (Cell) - 用于更新权重的优化器。默认值:None。 
- metrics (Union[dict, set]) - 在训练期间由模型评估的词典或一组度量。例如:{‘accuracy’, ‘recall’}。默认值:None。 
- amp_level (str) - 混合精度训练的级别。支持[“O0”, “O2”, “O3”, “auto”]。默认值:”O0”。 - O0 - 不改变。 
- O2 - 将网络转换为float16,使用动态loss scale保持BN在float32中运行。 
- O3 - 将网络强制转换为float16,并使用附加属性 keep_batchnorm_fp32=False 。 
- auto - 在不同设备中,将级别设置为建议级别。GPU上建议使用O2,Ascend上建议使用O3。建议级别基于专家经验,不能总是一概而论。用户应指定特殊网络的级别。 
 
- loss_scale_manager (Union[None, LossScaleManager]) - 如果为None,则不会按比例缩放loss。否则,通过LossScaleManager和优化器缩放loss不能为None。这是一个关键参数。例如,使用 loss_scale_manager=None 设置值。 
- keep_batchnorm_fp32 (bool) - 保持BN在 float32 中运行。如果为True,则将覆盖之前的级别设置。默认值:False。 
 - 返回: - model (Object) - 用于训练的高级API。 Model 将图层分组到具有训练特征的对象中。 - 支持平台:
- Ascend- GPU
 - 样例: - >>> from mindspore import nn >>> from mindspore import Tensor >>> from mindspore.nn import thor >>> from mindspore import Model >>> from mindspore import FixedLossScaleManager >>> from mindspore.train.callback import LossMonitor >>> from mindspore.train.train_thor import ConvertModelUtils >>> >>> net = Net() >>> dataset = create_dataset() >>> temp = Tensor([4e-4, 1e-4, 1e-5, 1e-5], mstype.float32) >>> opt = thor(net, learning_rate=temp, damping=temp, momentum=0.9, loss_scale=128, frequency=4) >>> loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean') >>> loss_scale = FixedLossScaleManager(128, drop_overflow_update=False) >>> model = Model(net, loss_fn=loss, optimizer=opt, loss_scale_manager=loss_scale, metrics={'acc'}, ... amp_level="O2", keep_batchnorm_fp32=False) >>> model = ConvertModelUtils.convert_to_thor_model(model=model, network=net, loss_fn=loss, optimizer=opt, ... loss_scale_manager=loss_scale, metrics={'acc'}, ... amp_level="O2", keep_batchnorm_fp32=False) >>> loss_cb = LossMonitor() >>> model.train(1, dataset, callbacks=loss_cb, sink_size=4, dataset_sink_mode=True)