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这里有。(可能与火炬非常相似(

这也是可能的

coords = coords.long()
grid[coords[0],coords[1]] = torch.Tensor([1,2,3,4])
tensor([[1., 0., 2.],
[0., 0., 3.],
[0., 0., 4.]])

coords = [[0, 0, 1, 2],
[0, 2, 2, 2]]

然后:

torch.stack([torch.stack(x) for x in coords])

相关内容

  • 没有找到相关文章

最新更新