本文介绍了PyTorch:从坐标张量到网格张量的可微运算的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个张量,看起来像
coords = torch.Tensor([[0, 0, 1, 2],
[0, 2, 2, 2]])
第一行是网格上对象的x坐标,第二行是相应的y坐标。
我需要一种可微的方式(即渐变可以流动)来从该张量转到相应的网格张量,其中1表示该位置(行索引、列索引)中存在对象,而0表示没有对象:
grid = torch.Tensor([[1, 0, 1],
[0, 0, 1],
[0, 0, 1]])
一般来说,coords
可以很大(网格大小为300x300)。如果coords
是稀疏张量,我可以简单地对其调用to_dense
,但由于应用程序特定的各种原因,我不能将coords
存储为稀疏张量。此外,我无法从coords
创建新的稀疏张量并对其调用to_dense
,因为创建新的张量是不可微的。
如有任何帮助,我们将不胜感激!
推荐答案
我不确定您所说的"可区分"是什么意思,但这里有一种使用高级索引进行区分的简单方法。
coords = coords.long()
grid[coords[0],coords[1]] = 1
tensor([[1., 0., 1.],
[0., 0., 1.],
[0., 0., 1.]])
我认为Torch没有关于这方面的详细文档,但numpy
有here。(可能与TORCH非常相似)
这也是可能的
coords = coords.long()
grid[coords[0],coords[1]] = torch.Tensor([1,2,3,4])
tensor([[1., 0., 2.],
[0., 0., 3.],
[0., 0., 4.]])
这篇关于PyTorch:从坐标张量到网格张量的可微运算的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!