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