Pytorch 用torch.sparse张量替换层权重

Pytorch 用torch.sparse张量替换层权重,pytorch,sparse-matrix,tensor,Pytorch,Sparse Matrix,Tensor,假设我定义了一个层C=nn.Conv2d(1,3,3,bias=False),即1个输入通道,3个输出通道,内核大小为3x3。因此,该层的内部重量为形状张量(3,1,3,3);我可以用C.weight.data访问这个。现在假设这个内部权重非常稀疏;它充满了零,只有几个非零值。我可以通过以下方法轻松地从权重构造稀疏张量: idx = C.weight.data.nonzero().T values = C.weight.data[C.weight.data!=0] sp_T = torch.sp

假设我定义了一个层
C=nn.Conv2d(1,3,3,bias=False)
,即1个输入通道,3个输出通道,内核大小为3x3。因此,该层的内部重量为形状张量
(3,1,3,3)
;我可以用C.weight.data访问这个。现在假设这个内部权重非常稀疏;它充满了零,只有几个非零值。我可以通过以下方法轻松地从权重构造稀疏张量:

idx = C.weight.data.nonzero().T
values = C.weight.data[C.weight.data!=0]
sp_T = torch.sparse.FloatTensor(idx, values, C.weight.data.size())
是否有可能以某种方式将conv层的权重存储为这个稀疏张量?我试着简单地执行
C.weight.data=sp\u T
,但它抛出了一个错误。如果我们能够以这种稀疏的方式将所有权重存储在一个模型中,那将非常方便