我想知道如何返回 std::vector<torch::Tensor>
在我的模块类的前向传递中,
我在文档中阅读了有关 FORWARD_HAS_DEFAULT_ARGS 的宏,但并没有真正了解
了解如何使用它,以及如何使用它来返回 vector 。
预先感谢您。
最佳答案
FORWARD_HAS_DEFAULT_ARGS
是一个 C++ 宏,根据 documentation :
This macro enables a module with default arguments in its forward method to be used in a Sequential module.
所以这不是你想要的。
我假设您返回 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
返回值)(来源 here ):
auto outputs = module->forward(inputs).toTuple();
torch::Tensor out1 = outputs->elements()[0].toTensor();
torch::Tensor out2 = outputs->elements()[1].toTensor();
您还可以连接 pytorch
张量(如果这就是您返回的所有张量,并且它们具有相同的形状)并使用 view
或类似的方法来解压它。 C++ 前端与 Python 的前端非常相似,如果有疑问,请参阅文档。
关于c++ - PyTorch C++ 前端向前返回多个张量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61988134/