2

我想知道如何std::vector<torch::Tensor>在模块类的前向传递中返回 a,我在文档中阅读了FORWARD_HAS_DEFAULT_ARGS的宏,但并不真正了解如何使用它,以及如何使用它来实现返回一个向量作为回报。先感谢您。

4

1 回答 1

2

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

此宏允许在其 forward 方法中使用默认参数的模块在 Sequential 模块中使用。

所以这不是你所追求的。

我假设您正在返回torch::Tensor包含在std::vector. 你可以这样做,但你应该在像这样返回后适当地解压它:

# 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 非常相似,如有疑问,请参阅文档。

于 2020-05-24T22:27:09.813 回答