本文介绍了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没有关于这方面的详细文档,但numpyhere。(可能与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:从坐标张量到网格张量的可微运算的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-15 07:21