如何最好地检查 torch::Tensor 是否为空?

9

我目前正在使用 has_storage() 方法来检查张量是否为空,但我想知道是否有更好的方法!另外,除了已初始化的 torch::Tensor 始终具有存储空间而空张量则没有之外,是否还涉及其他任何影响!

2个回答

9
经过一些调查,发现解决这个问题的最佳方法是使用 .numel() 方法,该方法返回一个张量所包含元素的数量。
总结如下:
  • 要了解一个张量是否已分配(包括类型和存储),请使用 defined()。
  • 要了解已分配张量是否有零个元素,请使用numel()
  • 要了解一个张量是否已分配以及它是否有零个元素,请使用defined() 然后使用 numel()

附注:
空张量(例如使用 torch::Tensor t; 创建的张量)在使用 .numel() 时会返回零,而其大小/尺寸将导致异常。

这是一种完美的检查方法,用于处理返回空张量(上述意义中的空张量)的情况。可以简单地执行以下操作:

if (!tensor.numel())
{
    std::cout<<"tensor is empty!" << std::endl;
    // do other checks you wish to do
}

参考链接


2

是的,在这里有一个小细节:所有张量并非都具有相同的底层实现,某些实现将会无论如何返回 false,例如稀疏张量(见这里)。

然而,我不知道是否有更好的方法。如果使用了稀疏张量(和不透明张量,如果你以后需要它们^^),请确保正确跟踪它们。


非常感谢您的时间和详细解答,再次感谢。 - Hossein

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接