PyTorch C++ 前端向前返回多个张量

PyTorch C++ FrontEnd returning multiple Tensors in forward

本文关键字:张量 返回 C++ 前端 PyTorch      更新时间:2023-10-16

我想知道如何在模块类的正向传递中返回std::vector<torch::Tensor>, 我在文档中读到了FORWARD_HAS_DEFAULT_ARGS宏,但并没有真正 了解如何使用它,以及如何使用它来返回向量作为回报。 提前谢谢你。

FORWARD_HAS_DEFAULT_ARGS是一个C++宏,根据文档:

此宏启用在其转发中具有默认参数的模块 要在顺序模块中使用的方法。

所以这不是你所追求的。

我假设您返回std::vector中包含的多个torch::Tensor值。你可以这样做,但你应该在像这样返回后适当地解压缩它:

# Interprets returned IValue as your desired return type
# You may have to use module.forward(inputs) depending how you loaded model
auto outputs = module->forward(inputs).toTensorVector();
# Print first tensor
std::cout << outputs[0] << std::endl;

如果要从方法返回不同类型的多个值forward则应只返回包含所需类型的std::tuple

在此之后,您可以像这样解压缩它(对于两个torch::Tensor返回值((来源在这里(:

auto outputs = module->forward(inputs).toTuple();
torch::Tensor out1 = outputs->elements()[0].toTensor();
torch::Tensor out2 = outputs->elements()[1].toTensor(); 

您还可以连接pytorch张量(如果这就是您要返回的全部并且它们的形状相同(,并使用view或类似方法将其解压缩。C++前端与Python的非常相似,如有疑问,请参阅文档。