【发布时间】:2020-12-08 07:06:49
【问题描述】:
我目前正在使用has_storage() 方法来检查张量是否为空,但我想知道除此之外还有什么更好的方法!以及除了初始化的torch::Tensor 总是有一个存储而一个空的没有这个事实之外,使用它是否有任何影响!
【问题讨论】:
我目前正在使用has_storage() 方法来检查张量是否为空,但我想知道除此之外还有什么更好的方法!以及除了初始化的torch::Tensor 总是有一个存储而一个空的没有这个事实之外,使用它是否有任何影响!
【问题讨论】:
经过一番挖掘,事实证明,最好的解决方案是使用.numel() 方法,该方法返回张量具有的元素数量。
总结:
numel()
defined()然后numel()
旁注:
当使用.numel() 时,空张量(例如使用torch::Tensor t; 创建的张量)返回零,而大小/大小将导致异常。
对于返回空张量(在我上面刚刚解释的意义上)的这种情况,这是一个完美的检查。可以简单地做:
if (!tensor.numel())
{
std::cout<<"tensor is empty!" << std::endl;
// do other checks you wish to do
}
【讨论】:
是的,这里有一个细微差别:所有张量都没有相同的底层实现,有些实现无论如何都会有has_storage 返回false。稀疏张量尤其如此(请参阅here)。
但是我不知道有什么更好的方法。如果你使用它们,请确保正确跟踪你的稀疏张量(以及你的opaque tensors,如果你需要它们是^^)
【讨论】: