【问题标题】:What's the best way of checking whether a torch::Tensor is empty?检查 torch::Tensor 是否为空的最佳方法是什么?
【发布时间】:2020-12-08 07:06:49
【问题描述】:

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

【问题讨论】:

    标签: c++ torch libtorch


    【解决方案1】:

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

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

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

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

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

    reference

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 再次非常感谢。非常感谢您的时间和解释清楚的答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-23
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多