如何解决如何用其他 pytorch 函数替换 torch.sparse?
我想使用其他 Pytorch 函数替换 torch.sparse 函数。
i = torch.LongTensor([[0,1,1],[2,2]])
v = torch.FloatTensor([3,4,5])
out1 = torch.sparse.FloatTensor(i,v,torch.Size([2,3])).to_dense()
out2 = ???
out1 == out2
> tensor(True)
背景:
我正在将 Pytorch 模型转换为 CoreML,但在 torch.norm 函数中定义的 sparse_coo_tensor 操作符未使用 CoreMLTools 实现。
有些人遇到了这个问题,但 CoreMLTools 仍然不受支持。所以我想在没有 torch.sparse.FloatTensor 中使用的运算符的情况下替换它。
我尝试过 torch.sparse_coo_tensor
但它不受支持。
我创建了一个简单的合作笔记本来重现这一点。请使用以下 colab 对其进行测试。 https://colab.research.google.com/drive/1TzpeJqEcmCy4IuXhhl6LChFocfZVaR1Q?usp=sharing
我之前在stackoverflow上询问过不同的操作符,所以请参考。 How to replace torch.norm with other pytorch function?
解决方法
如果我正确理解 sparse_coo 格式,i
的两行只是复制 v
值的坐标。这意味着您可以改为创建矩阵,例如:
def dense_from_coo(i,v):
rows = i[0].max()+1
cols = i[1].max()+1
out = torch.zeros(rows,cols)
out[i[0],i[1]] = v
return out
print(dense_from_coo(i,v))
>>> tensor([[0.,0.,3.],[4.,5.]])
print(torch.sparse.FloatTensor(i,v,torch.Size([2,3])).to_dense())
>>> tensor([[0.,5.]])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。