检查 torch::Tensor 是否为空的最佳方法是什么?

What's the best way of checking whether a torch::Tensor is empty?

我目前正在使用has_storage()方法来检查张量是否为空,但我想知道是否有比这更好的方法!除了初始化的 torch::Tensor 总是有存储空间而空的没有!

之外,使用它是否有任何影响?

是的,这里有一个细微差别:所有张量都没有相同的底层实现,有些实现无论如何都会有 has_storage return false。稀疏张量尤其如此(参见 here)。

但是我不知道有什么更好的方法。如果您使用稀疏张量(以及您的 opaque tensors,如果您需要它们 ^^),请务必正确跟踪它们

经过一番挖掘,事实证明最好的解决方案是使用 .numel() 方法,其中 returns 张量的元素数量。
总结:

  • 要知道张量是否已分配(类型和存储),请使用 defined()。
  • 要知道分配的张量是否有零个元素,使用numel()
  • 要知道一个张量是否被分配以及它是否有零元素,使用defined()然后numel()

旁注:
空张量(例如使用 torch::Tensor t; 创建的张量)returns 在使用 .numel() 时为零,而 size/sizes 将导致异常。

对于返回空张量(在我上面刚刚解释的意义上)的情况,这是一个完美的检查。可以简单地做:

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

reference