torch.nn.utils.prune.global_unstructured#
- torch.nn.utils.prune.global_unstructured(parameters, pruning_method, importance_scores=None, **kwargs)[源代码]#
通过应用指定的
pruning_method
,全局性地修剪parameters
中所有参数对应的张量。通过以下方式就地修改模块:
添加一个名为
name+'_mask'
的命名缓冲区,对应于剪枝方法应用于参数name
的二值掩码。用剪枝后的版本替换参数
name
,同时将原始(未剪枝)参数存储在一个名为name+'_orig'
的新参数中。
- 参数
parameters (Iterable of (module, name) tuples) – 要以全局方式进行剪枝的模型参数,即在决定剪枝哪些参数之前先聚合所有权重。module 必须是
nn.Module
类型,name 必须是字符串。pruning_method (function) – 来自此模块的有效剪枝函数,或者用户实现的满足实现指南并具有
PRUNING_TYPE='unstructured'
的自定义函数。importance_scores (dict) – 一个字典,将 (module, name) 元组映射到对应的参数的重要性分数张量。该张量应与参数具有相同的形状,并用于计算剪枝的掩码。如果未指定或为 None,则将使用参数本身作为其重要性分数。
kwargs – 其他关键字参数,例如:amount (int 或 float):要在指定参数中进行剪枝的参数数量。如果为
float
,应介于 0.0 和 1.0 之间,表示要剪枝的参数的比例。如果为int
,表示要剪枝的参数的绝对数量。
- 引发
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)