我正在尝试将torch.nn.Parameters
转换为稀疏张量。Pytorch 文档说参数是张量的子类。张量支持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()
火炬。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
张量是一种特定类型的张量,被标记为来自nn.Module
的参数,因此它们与普通张量不同。