是否可以使用 C++ 训练在 tensorflow 和 pytorch 中开发的 ONNX 模型?

Posted

技术标签:

【中文标题】是否可以使用 C++ 训练在 tensorflow 和 pytorch 中开发的 ONNX 模型?【英文标题】:Is it possible to train ONNX models developed in tensorflow and pytorch with C++? 【发布时间】:2021-12-19 12:32:15 【问题描述】:

我想知道是否可以使用转换为 onnx 模型的 tensorflow 和 pytorch 模型来使用 C++ Api 来训练它们,就像在 e.g. https://gist.github.com/asimshankar/5c96acd1280507940bad9083370fe8dc 带有张量流模型。我刚刚找到了使用 onnx 进行推理的示例。这个想法是能够在 python 中使用 tensorflow 和 pytorch 进行原型设计,转换为 onnx 模型,并在 C++ 中使用统一的 API 来进行推理和训练。获取一些(获取的链接)信息会有很大帮助。

【问题讨论】:

【参考方案1】:

ONNX 运行时支持训练,但不支持 C++。您可以使用 ORT 和 Pytorch 训练 ONNX 模型。请看这里https://onnxruntime.ai/docs/get-started/training-pytorch.html

【讨论】:

【参考方案2】:

ONNX's GitHub page 建议它可以用于推理,但能够用它训练所有模型似乎并不合理(从开发角度来看)。

目前我们专注于推理(评分)所需的能力。

虽然有一些困难,比如总是写backpropagationfeedforwarding更难,而且支持它会使框架大小翻倍,这不是ONNX的目标,因为已经有很多框架了为了这。要训​​练你需要所有的参数,GPU 和 CPU 中的函数导数(如果它的性能低于其他框架,这将是一个大问题,因为没有人会使用它)。还有许多其他因素使统一框架变得困难(例如,支持通过网络在多个 GPU 上进行训练)。(所以在我们看来,这很棒,但在他们看来,这太难了)

但是我们可以看到框架中添加了一些用于训练的功能,在这种情况下可以train transformer models

另外,在PyTorch 中训练变形金刚你可以看到this link

【讨论】:

谢谢,我想这是有道理的。我对找到解决方案不太乐观,但获得其他意见很有帮助。

以上是关于是否可以使用 C++ 训练在 tensorflow 和 pytorch 中开发的 ONNX 模型?的主要内容,如果未能解决你的问题,请参考以下文章

将在 tensorflow 中训练的神经网络部署到 Torch C++ 的最佳方法是啥?

如何使用 tensorflow 数据集训练 sklearn 模型?

如何在 Tensorflow 2 中的模型训练期间捕获任何异常

如何在 C++ 代码中运行 Yolov5 tensorflow model.pb?

如何在 C++ 中保存和恢复 TensorFlow 图及其状态?

一行代码切换TensorFlow与PyTorch,模型训练也能用俩框架