torch.nn.utils.prune.global_unstructured¶
- torch.nn.utils.prune.global_unstructured(parameters, pruning_method, importance_scores=None, **kwargs)[源代码]¶
全局修剪与
parameters中所有参数对应的张量,通过应用指定的pruning_method。通过以下方式就地修改模块:
添加一个名为
name+'_mask'的命名缓冲区,对应于修剪方法应用于参数name的二进制掩码。将参数
name替换为其修剪后的版本,而原始(未修剪)参数存储在一个名为name+'_orig'的新参数中。
- Parameters
参数 (可迭代的(模块, 名称) 元组) – 以全局方式修剪的模型参数,即通过聚合所有权重来决定修剪哪些权重。模块必须是
nn.Module类型,名称必须是字符串。pruning_method (函数) – 来自此模块的有效剪枝函数, 或者用户实现的满足实现指南的自定义函数,并且具有
PRUNING_TYPE='unstructured'。importance_scores (dict) – 一个字典,将 (模块, 名称) 元组映射到相应参数的重要性分数张量。该张量的形状应与参数相同,用于计算剪枝的掩码。 如果未指定或为 None,则将使用参数本身来代替其重要性分数。
kwargs – 其他关键字参数,例如: amount (int 或 float): 要在指定参数中剪枝的参数数量。 如果
float,应在 0.0 到 1.0 之间,并表示要剪枝的参数比例。如果int,它表示要剪枝的参数的绝对数量。
- Raises
TypeError – 如果
PRUNING_TYPE != 'unstructured'
注意
由于全局结构化剪枝在参数大小未归一化的情况下没有太大意义,我们现在将全局剪枝的范围限制为非结构化方法。
示例
>>> from torch.nn.utils import prune >>> from collections import OrderedDict >>> net = nn.Sequential(OrderedDict([ ... ('first', nn.Linear(10, 4)), ... ('second', nn.Linear(4, 1)), ... ])) >>> parameters_to_prune = ( ... (net.first, 'weight'), ... (net.second, 'weight'), ... ) >>> prune.global_unstructured( ... parameters_to_prune, ... pruning_method=prune.L1Unstructured, ... amount=10, ... ) >>> print(sum(torch.nn.utils.parameters_to_vector(net.buffers()) == 0)) tensor(10)