mindspore_gs

class mindspore_gs.CompAlgo(config=None)[源代码]

金箍棒中算法的基类。

参数:
  • config (dict) - 模型压缩的用户配置,默认值为None。算法相关配置由派生类设置,基类属性列举如下:

    • save_mindir (bool) - 如果为 true,则在训练后自动导出 MindIR,否则不导出。 默认值:否。

    • save_mindir_path (str) - 导出MindIR的路径,路径包括目录和文件名,可以是相对路径或绝对路径,用户需要保证写入权限。默认值:’./network’。

apply(network: Cell)[源代码]

定义如何压缩输入的 network 。此方法必须由所有算法子类重写。

参数:
  • network (Cell) - 将被压缩的网络。

返回:

压缩后的网络。

callbacks(*args, **kwargs)[源代码]

定义训练时需要完成的任务。算法子类必须在子回调函数的最后调用基类回调函数。

参数:
  • args (Union[list, tuple, optional]) - 配置给函数的参数。

  • kwargs (Union[dict, optional]) - 关键字参数。

返回:

回调实例的列表。

convert(net_opt: Cell, ckpt_path='')[源代码]

定义如何在导出到MindIR之前将压缩网络转换为标准网络。

参数:
  • net_opt (Cell) - 要转换的网络,即 CompAlgo.apply 的输出。

  • ckpt_path (str) - net_opt 权重文件的路径。默认值为空字符串,表示不将权重文件加载到 net_opt

返回:

转换后的网络实例。

样例:

>>> from mindspore_gs.quantization import SimulatedQuantizationAwareTraining as SimQAT
>>> ## 1) Define network to be trained
>>> network = LeNet(10)
>>> ## 2) Define MindSpore Golden Stick Algorithm, here we use base algorithm.
>>> algo = SimQAT()
>>> ## 3) Apply MindSpore Golden Stick algorithm to origin network.
>>> network = algo.apply(network)
>>> ## 4) Then you can start training, after which you can convert a compressed network to a standard
>>> ##    network, there are two ways to do that.
>>> ## 4.1) Convert without checkpoint.
>>> net_deploy = algo.convert(network)
>>> ## 4.2) Convert with checkpoint.
>>> net_deploy = algo.convert(network, ckpt_path)
loss(loss_fn: callable)[源代码]

定义如何调整算法的损失函数。如果当前算法不关心损失函数,子类不需要复写此方法。

参数:
  • loss_fn (callable) - 原损失函数。

返回:

调整后的损失函数。

set_save_mindir(save_mindir: bool)[源代码]

设置训练后是否自动导出MindIR。

参数:
  • save_mindir (bool) - 如为真,则在训练后自动导出MindIR,否则不自动导出。

异常:
  • TypeError - save_mindir 数据类型不是bool。

样例:

>>> import mindspore as ms
>>> from mindspore_gs.quantization import SimulatedQuantizationAwareTraining as SimQAT
>>> import numpy as np
>>> ## 1) Define network to be trained
>>> network = LeNet(10)
>>> ## 2) Define MindSpore Golden Stick Algorithm, here we use base algorithm.
>>> algo = SimQAT()
>>> ## 3) Enable automatically export MindIR after training.
>>> algo.set_save_mindir(save_mindir=True)
>>> ## 4) Set MindIR output path.
>>> algo.set_save_mindir_path(save_mindir_path="./lenet")
>>> ## 5) Apply MindSpore Golden Stick algorithm to origin network.
>>> network = algo.apply(network)
>>> ## 6) Set up Model.
>>> train_dataset = create_custom_dataset()
>>> net_loss = ms.nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction="mean")
>>> net_opt = ms.nn.Momentum(network.trainable_params(), 0.01, 0.9)
>>> model = ms.Model(network, net_loss, net_opt, metrics={"Accuracy": ms.train.Accuracy()})
>>> ## 7) Config callback in model.train, start training, then MindIR will be exported.
>>> model.train(1, train_dataset, callbacks=algo.callbacks())
set_save_mindir_path(save_mindir_path: str)[源代码]

设置导出MindIR的路径,仅当 save_mindir 为True时才生效。

参数:
  • save_mindir_path (str) - 导出MindIR的路径,路径包括目录和文件名,可以是相对路径,也可以是绝对路径,用户需要保证写入权限。

异常:
  • ValueError - save_mindir_path 不是非空字符串。