如何获得 torch::Tensor 形状

How to get torch::Tensor shape

如果我们<<一个torch::Tensor

#include <torch/script.h>
int main()
{
    torch::Tensor input_torch = torch::zeros({2, 3, 4});
    std::cout << input_torch << std::endl;
    return 0;
}

我们看到了

(1,.,.) = 
  0  0  0  0
  0  0  0  0
  0  0  0  0

(2,.,.) = 
  0  0  0  0
  0  0  0  0
  0  0  0  0
[ CPUFloatType{2,3,4} ]

如何得到张量形状(即2,3,4)?我在 https://pytorch.org/cppdocs/api/classat_1_1_tensor.html?highlight=tensor 中搜索了一个 API 电话,但没有找到。而且我搜索了operator<<重载代码,也没找到。

你可以使用torch::sizes()方法

IntArrayRef sizes()

相当于python中的形状。此外,您可以通过调用 torch::size(dim) 访问给定 ax(维度)的特定大小。这两个功能都在您链接的 API 页面中

嗯,我一直在使用 torch::_shape_as_tensor(tensor),它给了你另一个张量对象

对我有用的是:

#include <torch/script.h>
int main()
{
    torch::Tensor input_torch = torch::zeros({2, 3, 4});

    std::cout << "dim 0: " << input_torch.sizes()[0] << std::endl;
    std::cout << "dim 1: " << input_torch.sizes()[1] << std::endl;
    std::cout << "dim 2: " << input_torch.sizes()[2] << std::endl;

    assert(input_torch.sizes()[0]==2);
    assert(input_torch.sizes()[1]==3);
    assert(input_torch.sizes()[2]==4);
    
    return 0;
}

平台:

libtorch 1.11.0
CUDA 11.3