将权重和偏差转换为稀疏张量火炬

时间:2020-06-13 03:41:56

标签: python neural-network pytorch conv-neural-network tensor

我正在尝试将torch.nn.Parameters转换为稀疏张量。 Pytorch文档说Parameters是Tensor's的子类。 Tensor支持to_sparse方法,但是如果我将Parameters转换为稀疏,它会给我:
TypeError: cannot assign 'torch.cuda.sparse.FloatTensor' as parameter 'weight' (torch.nn.Parameter or None expected)
是否有一种方法可以绕过这一点,并为参数使用稀疏张量?
这是产生问题的示例代码:

for name, module in net.named_modules():
    if isinstance(module, torch.nn.Conv2d):
        module.weight = module.weight.data.to_sparse()
        module.bias = module.bias.data.to_sparse()

1 个答案:

答案 0 :(得分:1)

torch.Tensor.to_sparse()返回张量的稀疏副本,由于它是module.weight的实例,因此无法分配给torch.nn.Parameter。因此,您应该这样做:

module.weight = torch.nn.Parameter(module.weight.data.to_sparse())
module.bias = torch.nn.Parameter(module.bias.data.to_sparse())

请注意,Parameters是Tensor的特定类型,被标记为nn.Module的参数,因此它们与普通Tensor不同。