C++ 不是python,所以像unpacking 和* 这样的结构显然不起作用。 (, ) 也是如此,您应该使用可以“自动投射”到 IntArrayRef 的对象。
创建对象基础知识
ArrayRef 是一个模板类,这意味着它可以容纳不同的 C++ 类型,而IntArrayRef 是ArrayRef<int> 的别名。这个类有一些构造函数(例如,来自标准 C 样式数组、std::vector、std::array 或 std::initializer_list)。
torch::zeros 和 view method of torch::Tensor 都需要这个确切的对象。
你可以做的是:
/* auto to feel more "Pythonic" */
auto img = torch::zeros({100, 100}, torch::kF32);
auto tmg = img.view({1, 1, 100, 100});
{1, 1, 100, 100} 是std::initializer_list<int> 类型,因此可以从中构造ArrayRef<int>(又名IntArrayRef)(可能会移动,因为该对象是rvalue)。
torch::zeros 也会发生同样的情况。
这种情况下更简单的方法
使用unsqueeze 可以更轻松地完成您的工作,如下所示:
auto img = torch::zeros({100, 100}, torch::kF32);
auto unsqueezed = img.unsqueeze(0).unsqueeze(0);
0 在维度中的位置。
关于 libtorch
总而言之如果您想使用 C++,请至少阅读参考并检查类型。我同意文档可以使用一些工作,但如果您了解 C++,即使是有时可能需要的源代码也不应该太难理解。