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

标签 c++ pytorch libtorch

我想知道如何返回 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/

相关文章:

c++ - 为什么我的归并排序最后会放一个随机的 4?

c++ - STL中如何设置自定义默认比较函数

c++ - OpenCV:findContours 异常

c++ - 尝试构建 torchscript 扩展会导致 INVALID TYPE : Only int64_t and bool are supported as an integral argument type error

c++ - 如果我改变形状,Pytorch C++ (libtorch) 会输出不同的结果

c++ - 我应该更喜欢通过嵌套的 typedef 还是继承来调用模板元函数?

python - 如何加载部分预训练的 pytorch 模型?

save - 有什么理由保存预训练的 BERT 分词器?

python - 如何在 pytorch 中创建数据集并将其保存到文件中以供以后使用?

cmake - 链接静态库 pytorch 在构建过程中找不到其内部函数