问题标签 [torchscript]
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.
python - 从 python 导出的模型在 C++ 中加载时会给出不同的结果
问题描述
所以我有使用 PyTorch 用 python 编写的模型类:
在 python 环境中使用时,它工作得非常好。我已经对其进行了训练,在测试集上获得了约 65% 的准确率,并希望使用 TorchScript 将其导出,然后导入 C++ 应用程序。
这是用于导出的代码:
在将其导入 C++ 之前,我已经检查了模型是否正确导出,方法是将其导入 python 脚本,torch.jit.load
并再次对照我的测试数据集进行检查,以获得与预期相同的约 65% 的准确度。
因此,下一个合乎逻辑的步骤是将模型导入 C++ 程序,并使用相同的数据评估加载的模型。这是代码:
实际问题
但是发生的事情是在 C++ 中计算的准确度等于 ~12%。为什么?
到目前为止我尝试/发现了什么:
- 将模型加载到 C++ 中时的所有预测都是相同的(等于
6
)。当模型在 python 中加载时,一切都很好。 - 获取后的所有计算
outputs
在 Python 和 C++ 中都是相同的,所以问题不在于我计算准确性的方式。 - 使用
torch::manual_seed
什么都不做。(它不应该改变任何东西,但为什么不尝试......) torch::NoGradGuard
也什么都不做。- 我还确保测试数据在 Python 和 C++ 中以相同的顺序进入模型。
- 在这两种情况下,模型都在 eval 模式下运行
更新 1
torch.ones
使用python 和 c++对静态输入检查加载的模型仍然会产生不同的结果。
按照@gspr 的要求更新 2 Python 代码:
save - RuntimeError:用于酸洗的未知 IValue 类型:设备
我想将 pytorch 模型转换为 torchscript,这model
是一个 pytorchLSTM
模块。
第1步:score_pos
如预期正常
第 2 步:转换为 torchscript 模块
score_pos_scripted
第3步:脚本模块运行的分数相同score_pos
但顺序错误
第4步:保存torchscript模块错误!
错误消息(我的 pytorch 版本:1.3.1):
有人可以帮我解决第 2 步和第 4 步的错误吗?
pytorch - 在 C++ 中使用 *.pth 模型
我想使用我用 pytorch 训练的 yolo3 模型在 C++ 中运行推理。我无法使用 pytorch 提供的跟踪和脚本进行转换。我在转换过程中遇到此错误
python - 澄清 PyTorch 上的 TorchScripts 和 JIT
只是想澄清我对 JIT 和 TorchScripts 工作方式的理解并澄清一个特定的例子。
因此,如果我没有错torch.jit.script
,将我的方法或模块转换为 TorchScript。我可以在 python 之外的环境中使用我的 TorchScript 编译模块,但也可以在 python 中使用它并进行预期的改进和优化。一个类似的情况torch.jit.trace
是跟踪权重和操作,但大致遵循类似的想法。
如果是这种情况,TorchScripted 模块通常应该至少与 python 解释器的典型推理时间一样快。在进行了一些实验后,我观察到它通常比典型的解释器推理时间要慢,并且在阅读后发现显然 TorchScripted 模块需要“预热”一下,以实现其最佳性能。这样做时,我看到推理时间没有任何变化,它变得更好但不足以称为对典型的做事方式(python解释器)的改进。此外,我使用了一个名为 的第三方库torch_tvm
,如果启用该库,据说可以将任何方式的 jit-ing 模块的推理时间减半。
直到现在这一切都没有发生,我真的无法说出原因。
以下是我的示例代码,以防我做错了什么 -
以下是上述代码在我的 CPU 上的结果 -
对此的任何帮助或澄清将不胜感激!
python - 转换 Pytorch Yolact (.pth) 模型以在 C++ 中部署
我正在使用YOLACT++,我想使用 C++ 部署它。最初模型保存为 yolact.pth 文件,我从无法直接将 .pth 转换为可以在 C++ 中调用的 .pt 文件的问题中意识到这个问题,我需要先将其转换为 ONNX输出 yolact.onnx 作为输出。我在问题中使用此解决方案将其转换为 ONNX ,在此问题下方的评论中,您可以看到他用于从 yolact.pth 实现 yolact.onnx 转换模型的终端命令。
所以我的问题是我真的不明白接下来如何使用 C++ 部署它。我应该寻找从 yolact.onnx 转换为 yolact.pt 的解决方案,还是可以从 C++ 调用 yolact.onnx?在此工作流程的一个问题中给出了一个有趣的方向: Pytorch->ONNX->NCNN,他在 ARM 设备上使用 C++ 推理对其进行了测试。这就是我要找的。我对 C++ 不是很熟悉,所以我不知道方向。
我还尝试将其添加到调用模型的 eval.py 末尾:
我得到了错误:
第 570 行是:
我把它注释掉了,它在第 574 行的下一个“timer.env”上给出了错误,依此类推!
c++ - 在 C++ 中加载 torchscript 模型时如何解决“RuntimeError:预期的标量类型 Double 但发现 Float”
我尝试加载torchscript
模型C++
,但出现错误
RuntimeError:预期的标量类型 Double,但发现 Float。
完整的输出是
输入数据实际上是双精度类型。我尝试在此处.double()
使用以下但无法运行。我的代码:make
请给我一些建议好吗?
python - ValueError:您必须指定decoder_input_ids 或decoder_inputs_embeds
尝试将question-generation
t5 模型转换为torchscript
模型,同时执行此错误
ValueError:您必须指定decoder_input_ids 或decoder_inputs_embeds
这是我在 colab 上运行的代码。
得到这个错误
如何解决这个问题?或者有没有更好的方法将 t5 模型转换为torchscript
.
谢谢你。
pytorch - 如果我在 Cuda 上跟踪 PyTorch 网络,我可以在 CPU 上使用它吗?
torch.jit.trace
我在兼容 CUDA 的 GPU 服务器上跟踪了我的神经网络。当我在同一台服务器上重新加载该 Trace 时,我可以重新加载它并正常使用它。现在,当我将它下载到我的笔记本电脑上(用于快速测试)时,当我尝试加载跟踪时,我得到:
我不能在跟踪上在 GPU 和 CPU 之间切换吗?还是有其他事情发生?
pytorch - 如何从 jit::script::module 访问模块属性,例如卷积步长
我目前正在编写一个 C++ 程序,该程序需要对 torchScript 格式的 CNN 模型的结构进行一些分析。我正在使用 C++ 火炬库,它在 torch.org 上显示的方式,像这样加载到模型中:
据我所知,module
由一组嵌套的集合组成,torch::jit::script::Module
其中最低的代表内置函数。我访问那些最低的模块如下:
该函数递归地遍历模块并打印最低级别的名称,这些名称对应于torch脚本的内置函数。
我现在的问题是,如何访问那些内置函数的详细信息,例如卷积的步长?
我一生都无法弄清楚如何访问模块的这些基本属性。
nvidia - Torchscript 与 TensorRT 进行实时推理
我已经训练了一个对象检测模型,用于实时应用的生产。我有以下两个选择。谁能建议在 Jetson Xavier 上运行推理以获得最佳性能的最佳方法是什么?也欢迎任何其他建议。
- 将模型转换为 ONXX 格式并与 TensorRT 一起使用
- 将模型保存为 Torchscript 并在 C++ 中运行推理