转换
模型剪枝的主要API和入口点。
函数
导出一个修剪后的子网到一个常规模型。 |
|
将常规的PyTorch模型转换为支持设计空间优化的模型。 |
- convert(model, mode)
将常规的PyTorch模型转换为支持设计空间优化的模型。
- Parameters:
模型 (模块 | 类型[模块] | 元组 | 可调用对象) – 一个类似模型的对象。可以是一个nn.Module、一个模型类类型,或者一个元组。 元组必须是以下形式之一:
(model_cls,)或(model_cls, args)或(model_cls, args, kwargs)。 模型将被初始化为model_cls(*args, **kwargs)。mode (_ModeDescriptor | str | List[_ModeDescriptor | str] | List[Tuple[str, Dict[str, Any]]]) –
一个(或多个)字符串或模式,或包含模式及其配置的元组列表,用于指示转换过程中所需的模式(和配置)。模式为模型优化设置不同的算法。以下模式可用:
"autonas":model将被转换为搜索空间,并设置为自动执行基于 AutoNAS 的模型训练、评估和搜索所需的操作。该模式的配置在AutoNASConfig中描述。
如果模式参数指定为字典,则键应指示模式,值指定每个模式的配置。如果未提供,则将使用默认配置。
- Returns:
一个保留了原始权重的转换模型,可用于模型优化。
- Return type:
模块
注意
请注意,在转换过程中不支持模型包装器(如DataParallel/DistributedDataParallel)。请在转换过程之后包装模型。
注意
convert()依赖于 monkey patching 来增强forward()、eval()和train()方法以及增强单个模块以使其动态化。这使得转换与这些方法和模块的其他 monkey patch 不兼容!请注意,convert()仍然完全兼容继承。注意
可以使用glob表达式在合格的子模块名称上为各个层自定义配置,例如,如上例中所示的
nn.Conv2d。配置中出现在字典前面的键具有较低的优先级,例如,
backbone.stages.1.0.spatial_conv将具有out_channels_ratio[0.334, 0.5, 0.667, 1.0],而不是[1.0]。也支持没有层限定符的配置条目,例如,如上例中所示的
nn.Sequential。支持在不同层中混合使用带有和不带有层限定符的配置,例如,如上例中所示的
nn.Conv2d和nn.Sequential。对于特定层类型,仅支持带有或不带有层限定符的配置。使用
*作为匹配任何图层的通配符。
- export(model, strict=True, calib=False)
导出一个修剪后的子网到一个常规模型。
- Parameters:
model (Module) – 要导出的修剪子网。
strict (bool) – 当配置不包含所有必要键时引发错误。
calib (bool) – 是否校准要导出的子网。
- Returns:
当前活动的子网以常规PyTorch模型格式显示。
- Return type:
模块
注意
如果模型是一个包装器,例如 DistributedDataParallel,它将被解包,例如,
model.module将被返回。