4

我目前正在使用该has_storage()方法来检查张量是否为空,但是我想知道除此之外还有什么更好的方法!torch::Tensor以及除了初始化总是有存储而空的没有的事实之外,使用它是否有任何影响!

4

2 回答 2

6

经过一番挖掘,事实证明,最好的解决方案是使用.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
}

参考

于 2020-08-22T07:47:19.283 回答
1

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

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

于 2020-08-19T13:38:17.757 回答