在Python中使用可移植的ONNX AI模型(译文)
By S.F.
本文链接 https://www.kyfws.com/news/using-portable-onnx-ai-models-in-python/
版权声明 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
- 4 分钟阅读 - 1838 个词 阅读量 0在Python中使用可移植的ONNX AI模型(译文)
原文地址:https://www.codeproject.com/Articles/5278507/Using-Portable-ONNX-AI-Models-in-Python
原文作者:Keith Pijanowski
译文由本站翻译
前言
在本文中,我简要介绍了ONNX运行时和ONNX格式. 在这里,我展示了如何在ONNX运行时中使用Python加载和运行ONNX模型. 下载源547.1 KB 在关于2020年使用便携式神经网络的系列文章中,您将学习如何在x64架构上安装ONNX并在Python中使用它. 微软与Facebook和AWS共同开发了ONNX. ONNX格式和ONNX运行时都具有行业支持,以确保所有重要框架都能够将其图形导出到ONNX,并且这些模型可以在任何硬件配置上运行. ONNX Runtime是用于运行已转换为ONNX格式的机器学习模型的引擎.传统机器学习模型和深度学习模型(神经网络)都可以导出为ONNX格式.运行时可以在Linux,Windows和Mac上运行,并且可以在各种芯片体系结构上运行.它还可以利用诸如GPU和TPU之类的硬件加速器.但是,没有针对操作系统,芯片体系结构和加速器的每种组合的安装包,因此,如果不使用任何一种常见组合,则可能需要从源代码构建运行时.检查ONNX运行时网站,以获取所需组合的安装说明.本文将展示如何在具有默认CPU的x64体系结构和具有GPU的x64体系结构上安装ONNX Runtime. 除了可以在许多硬件配置上运行之外,还可以从大多数流行的编程语言中调用运行时.本文的目的是展示如何在Python中使用ONNX Runtime.我将展示如何安装onnxruntime软件包.安装ONNX Runtime后,我将先前导出的MNIST模型加载到ONNX Runtime中,并使用它进行预测.
安装和导入ONNX运行时
在使用ONNX Runtime之前,您需要安装onnxruntime软件包.以下命令将在具有默认CPU的x64体系结构上安装运行时:
pip install onnxruntime
要将运行时安装在带有GPU的x64架构上,请使用以下命令:
pip install onnxruntime-gpu
安装后,可以使用以下" import"语句将其"导入"到模块中:
import onnxruntime
载入ONNX模型
将ONNX模型加载到ONNX Runtime中与转换一样简单,实际上只是一行代码.以下功能说明了如何将ONNX模型加载到ONNX运行时. ONNX模型的实际加载只是一个命令.
def load_onnx_model(onnx_model_file):
try:
session = onnxruntime.InferenceSession(onnx_model_file)
except (InvalidGraph, TypeError, RuntimeError) as e:
# It is possible for there to be a mismatch between the onnxruntime and the
# version of the onnx model format.
print(e)
raise e
return session
使用ONNX运行时进行预测
以下功能显示了如何使用在加载ONNX模型时创建的ONNX会话.这里有几件事值得注意.首先,您需要查询会话以获取其输入.这是使用会话的get_inputs()方法完成的.此输入的名称用于创建输入字典,该输入字典将传递到会话的run命令.我们的MNIST模型只有一个输入参数,即图像列表. (在" image_samples"参数中.)如果模型具有多个输入参数,则" get_inputs()“将为每个参数都有一个条目.
def onnx_infer(onnx_session, image_samples):
input_name = onnx_session.get_inputs()[0].name
result = onnx_session.run(None, {input_name: image_samples})
probabilities = np.array(result[0])
print(type(probabilities))
print(probabilities)
# Generate arg maxes for predictions
predictions = np.argmax(probabilities, axis=1)
return predictions
大多数神经网络不会直接返回预测.它们返回每个输出类的概率列表.对于我们的MNIST模型,每个图像的返回值将是10个概率的列表.可能性最高的条目是预测.您可以做一个有趣的测试,将ONNX模型在创建模型的框架中运行时返回的概率与从原始模型返回的概率进行比较.理想情况下,模型格式和运行时的更改不应更改任何产生的概率.这将使每当模型发生更改时都可以运行良好的单元测试.
摘要和后续步骤
在本文中,我简要介绍了ONNX运行时和ONNX格式.然后,我展示了如何在ONNX运行时中使用Python加载和运行ONNX模型. 本文的代码示例包含一个工作的Console应用程序,该应用程序演示了此处显示的所有技术.此代码示例是Github存储库的一部分,该存储库探讨了使用神经网络来预测MNIST数据集中发现的数字.具体来说,有一些示例显示了如何在Keras,PyTorch,TensorFlow 1.0和TensorFlow 2.0中创建神经网络. 如果您想了解有关导出为ONNX格式和使用ONNX运行时的更多信息,请查阅本系列的其他文章.
参考文献
- https://microsoft.github.io/onnxruntime/
- https://microsoft.github.io/onnxruntime/python/api_summary.html
- https://github.com/keithpij/onnx-lab
许可
本文以及所有相关的源代码和文件均已获得The Code Project Open License (CPOL)的许可。
Python AI neural 新闻 翻译