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

问题描述

我目前正在使用has_storage()方法来检查张量是否为空,但是我想知道是否还有其他更好的方法!以及使用此操作是否有任何其他含义,除了已初始化的torch::Tensor总是具有存储空间而空的 ElevatedButton( onpressed: () => Navigator.of(context,rootNavigator: true) .push(MaterialPageRoute( fullscreenDialog: true,builder: (context) => UserLoginPage(),)),child: Text('Login to continue'),),却没有存储空间之外!

解决方法

是的,这里有一个细微的差别:所有张量都不具有相同的基础实现,并且某些实现无论如何都将has_storage返回false。稀疏张量尤其如此(请参见here)。

但是我不知道有什么更好的方法。只要确保正确使用了稀疏张量(以及opaque tensors,如果需要它们,^^)就可以正确地跟踪它们

,

经过一番挖掘,得出的结论是,最好的解决方案是使用.numel()方法,该方法返回张量具有的元素数。
总结:

  • 要了解是否已分配张量(类型和存储),请使用define()。
  • 要了解分配的张量是否具有零个元素,请使用numel()
  • 要了解张量是否已分配以及张量是否为零,请使用defined(),然后使用numel()

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

这是对返回空的张量(在我上面刚刚解释过的意义上)的情况下的一种完美检查:

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

ref