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



我正在尝试将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的参数,因此它们与普通张量不同。

相关内容

  • 没有找到相关文章

最新更新