python - 如何将 PyTorch 张量转换为 C++ torch::Tensor,反之亦然?

标签 python c++ pytorch pybind11 libtorch

我想使用 pybind11 在 C++ 模块中接收包含 PyTorch Tensor 的字典,并返回包含 C++ torch::Tensor 的一些修改的结果字典。就我所寻找的而言,似乎没有明确的方法可以将 PyTorch Tensor 转换为 C++ Tensor,以及将 C++ Tensor 转换为 PyTorch Tensor。在最后一次试验中,我尝试将 PyObject 转换为 torch::Tensor 但似乎效果不佳。 ( https://discuss.pytorch.org/t/is-it-possible-to-get-pyobject-from-a-torch-tensor/85980/2 ) 我想知道它是否正确,是否有任何解决方法。我在下面分享了我的代码片段。

py::dict quantize(py::dict target) {
    ...
    for (auto item: target) {
        py::str key(item.first);
        torch::Tensor test = item.second.ptr(); // it fails to compile
    }
    ...
    return py::dict("name"_a="test", "tensor"_a=torch::rand({3, 3, 3})); // it fails on runtime
}

最佳答案

PyObject * THPVariable_Wrap(at::Tensor t);

at::Tensor& THPVariable_Unpack(PyObject* obj);

我猜这两个就是你要找的。

关于python - 如何将 PyTorch 张量转换为 C++ torch::Tensor,反之亦然?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66024389/

相关文章:

python - 如何使用不同大小的列表创建 Python 字典?

python - python 中的点积

python - django .env 文件无法像教程所解释的那样工作

c++ - 重载 + 运算符以添加分数

python - 升级到 PyTorch 1.9 时的潜在错误 ImportError : cannot import name 'int_classes' from 'torch._six'

python - 从 numpy 数组中查找并删除列

c++ - 制作一个简单的 C++ 键盘记录器

c++ - QJsonValueRef 与 QJsonValue

python - 运行时错误 ("grad can be implicitly created only for scalar outputs")

optimization - Pytorch - backward() 函数应该在 epoch 或 batch 的循环中吗?