C++
не python
, поэтому конструкции типа unpacking
с *
, очевидно, не будут работать. То же самое касается (, )
, вы должны использовать объект, который может быть "автоматически приведен" к IntArrayRef
.
Основы создания объектов
ArrayRef
является шаблон класса , что означает, что он может содержать различные типы C ++, а IntArrayRef
является псевдонимом для ArrayRef<int>
. Этот класс имеет несколько конструкторов (например, из стандартного массива C, std::vector
, std::array
или std::initializer_list
).
Оба torch::zeros
и view
метод 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>
( aka IntArrayRef
) может быть построен из него (вероятно, перемещен, поскольку этот объект является rvalue
).
То же самое происходит для torch::zeros
.
Более простой способ для этого случая
То, что у вас есть, может быть выполнено проще, хотя бы с unsqueeze
вот так:
auto img = torch::zeros({100, 100}, torch::kF32);
auto unsqueezed = img.unsqueeze(0).unsqueeze(0);
Где 0
в измерении.
О libtorch
В целом прочитайте справку и отметьте как минимум , если вы хотите работать с C ++. Я согласен, что документы могут использовать некоторую работу, но если вы знаете что-то о C ++, не должно быть слишком сложно следовать даже в исходном коде, который иногда может понадобиться.