问题标签 [libtorch]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 检查 torch::Tensor 是否为空的最佳方法是什么?
我目前正在使用该has_storage()
方法来检查张量是否为空,但是我想知道除此之外还有什么更好的方法!torch::Tensor
以及除了初始化总是有存储而空的没有的事实之外,使用它是否有任何影响!
c++ - libtorch 中的 np.delete 等价物是什么?
似乎我们np.delete
在 libtorch 中还没有等价物,那么我们如何模拟它的行为呢?例如,我试图在 libtorch 中重写以下代码:
我该怎么办?我考虑过切片,但我不确定是否有我不知道的影响。这就是我想出的:
火炬:
这是一个示例演示,以测试它们的结果是否相同:
这是 libtorch 中的 cpp 计数器部分:
它们都打印相同的输出,所以我在这里遗漏了什么,或者这实际上是在 libtorch 中实现删除的合理方式?
我还有什么其他可能更有效的方法来实现/模拟np.delete()
?
c++ - PyTorch C++ API 中的 randperm 不应该返回默认类型为 int 的张量吗?
当我尝试randperm
使用 C++ PyTorch API 生成置换整数索引列表时,生成的张量具有元素类型CPUFloatType{10}
而不是整数类型:
返回
它不能用于张量的索引,因为元素类型是浮点数而不是整数类型。当尝试使用my_tensor.index(shuffled_indices)
我得到
环境:
- python-pytorch,Arch Linux 上的版本 1.6.0-2
- g++ (GCC) 10.1.0
为什么会这样?
c++ - Libtorch C++ 和 pytorch 的不同输出
我在 pytorch 和 libtorch 中使用相同的跟踪模型,但我得到不同的输出。
蟒蛇代码:
C++ 代码:
该模型给出了(1x512)
大小输出张量,如下所示。
Python 输出
C++ 输出
使用
- 火炬 1.6.0
- Libtorch 1.6.0
- 视觉工作室 2019
- 视窗 10
- 库达 10.1
matlab - MEX 文件中的意外标准异常(pytorch 模型转发)
当我从 Matlab 调用 mex api 时,我遇到了一个意外的标准异常。
我将 2 个 pytorch DNN 模型导出到“A.pt”和“B.pt”文件。
我实现了从“.pt”文件加载模型并运行模型(转发)的 c++ 函数。
c++ 实现工作正常,我可以从模型中得到正确的结果。
我将加载和运行转发函数构建到“.dll”库中,并实现了一个可以调用它们的 mex api 函数。
当我在Matlab环境中调用mex api时,2个模型加载正常,第一个模型向前运行正常。
但是,当向前运行第二个模型时,我得到了以下异常。
MEX 文件中的意外标准异常
What():以下操作在 TorchScript 解释器中失败。
TorchScript 的回溯(最后一次调用):
RuntimeError:TorchScript 解释器中的以下操作失败。
TorchScript 的回溯(最后一次调用):
RuntimeError:LoadLibraryA 中的错误
我不知道为什么 c++ 实现可以正常工作,但是当通过 Matlab 的 mex api 调用它时会发生异常。
因为加载和运行前向功能没有改变,所以我期望得到完全相同的结果。
由于没有调用堆栈打印,因此更难以调试。
有没有办法获得调用堆栈?
请给我任何建议。
提前致谢。
-环境 - - - - - - - - - - - - - - - -
c++ 编译器:Visual Studio 2017 社区
matlab : R2020a
火炬:1.6
火炬:1.5
蟒蛇:3.6
库达:10.2
c++ - 如何将 torch::Tensor 转换为 cv::InputArray?
我正在尝试使用cv::getAffineTransform()
,但我一直坚持如何将张量转换为对应的cv::InputArray
. 我已经尝试过这些来面对访问冲突:
我在这里做错了什么?有没有办法共享底层缓冲区并完全避免复制?
c++ - libtorch 中 numpy.spacing(1) 的等价物是什么?
似乎 pytorch 确实有/公开了finfo
链接,但我在libtorch
. 它甚至可以在 libtorch 中使用吗?使用 torch.finfo 我可以轻松做到:
我相信这是对应物/等价物,np.spacing(1)
但在 libtorch 中我不能做同样的事情,因为我找不到任何finfo
课程痕迹。我该怎么办?
c++ - 如何将 torch::tensor 形状与其他一些形状进行比较?
我正在尝试将 atorch::Tensor
与sizes
其他东西进行比较,但似乎我做错了。
我试过了:
总是返回假。
我也试过:
这也返回false。由于 IntArratRef 本身不拥有存储空间,因此我尝试了:
但它失败了,说:
我目前正在单独比较每个维度,这远非理想,更不用说麻烦了。这里有什么问题?
c++ - 如何将张量列表转换为 Torch::Tensor?
我正在尝试将以下 Python 代码转换为等效的 libtorch:
在 Pytorch 中,我们可以简单地使用torch.stack
或简单地使用torch.tensor()
如下:
但是,在 libtorch 中,这并不成立,那就是我不能简单地这样做:
甚至使用 astd::vector
都不起作用。torch::stack 也是如此。我目前正在使用三个torch::stack
来完成这项工作:
那么有没有更好的方法来做到这一点?我们可以用单线做到这一点吗?
c++ - 如何正确地将 cv::Mat 转换为具有完美匹配值的 torch::Tensor?
我正在尝试在 C++ 中的 jit 跟踪模型上运行推理,目前我在 Python 中获得的输出与我在 C++ 中获得的输出不同。
最初我认为这是由 jit 模型本身引起的,但现在我不这么认为,因为我发现 C++ 代码中的输入张量存在一些小的偏差。我相信我按照文档的指示做了所有事情,这样也可以在torch::from_blob
. 我不知道!
因此,为了确定是哪种情况,这里是 Python 和 C++ 中的代码片段以及用于测试它的示例输入。
这是示例图像:
对于 Pytorch,运行以下代码片段:
对于 C++:
C++/Libtorch 张量值 ( img.index({Slice(), Slice(), Slice(None, 10), Slice(None, 10)});
):
顺便说一下,这些是标准化/预处理之前的张量值:
Python:
共产党:
如您所见,乍一看,它们可能看起来相同,但仔细观察,您会发现输入中有许多小的偏差!如何避免这些更改,并获得 C++ 中的确切值?
我想知道是什么导致了这种奇怪的现象发生!