mindspore_gs
- class mindspore_gs.CompAlgo(config=None)[源代码]
金箍棒中算法的基类。
- 参数:
config (dict) - 模型压缩的用户配置,默认值为
None
。算法相关配置由派生类设置,基类属性列举如下:save_mindir (bool) - 如果为
True
,则在训练后自动导出 MindIR,否则不导出。 默认值:False
。save_mindir_path (str) - 导出MindIR的路径,路径包括目录和文件名,可以是相对路径或绝对路径,用户需要保证写入权限。默认值:
'./network'
。
- abstract apply(network: Cell, **kwargs)[源代码]
定义如何压缩输入的 network 。此方法必须由所有算法子类重写。
- 参数:
network (Cell) - 将被压缩的网络。
kwargs (Dict) - 用于子类的可扩展入参。
- 返回:
压缩后的网络。
- 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())