目录

安装和导入ONNX运行时

载入ONNX模型

使用ONNX运行时进行预测

摘要和后续步骤

参考文献


  • 下载源547.1 KB

系列文章列表如下:

ONNX系列一 --- 带有ONNX的便携式神经网络

ONNX系列二 --- 使用ONNX使Keras模型可移植

ONNX系列三 --- 使用ONNX使PyTorch AI模型可移植

ONNX系列四 --- 使用ONNX使TensorFlow模型可移植

ONNX系列五 --- 在C#中使用可移植的ONNX AI模型

ONNX系列六 --- 在Java中使用可移植的ONNX AI模型

ONNX系列七 --- 在Python中使用可移植的ONNX AI模型

在关于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 ereturn 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].nameresult = onnx_session.run(None, {input_name: image_samples})probabilities = np.array(result[0])print(type(probabilities))print(probabilities)# Generate arg maxes for predictionspredictions = 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

ONNX系列七 --- 在Python中使用可移植的ONNX AI模型相关推荐

  1. ONNX系列六 --- 在Java中使用可移植的ONNX AI模型

    目录 安装和导入ONNX运行时 载入ONNX模型 使用ONNX运行时进行预测 摘要和后续步骤 参考文献 下载源547.1 KB 系列文章列表如下: ONNX系列一 --- 带有ONNX的便携式神经网络 ...

  2. ONNX系列五 --- 在C#中使用可移植的ONNX AI模型

    目录 安装和导入ONNX运行时 载入ONNX模型 使用ONNX运行时进行预测 摘要和后续步骤 参考文献 下载源547.1 KB 系列文章列表如下: ONNX系列一 --- 带有ONNX的便携式神经网络 ...

  3. python字典、列表、元祖使用场景_python学习第七讲,python中的数据类型,列表,元祖,字典,之元祖使用与介绍...

    python学习第七讲,python中的数据类型,列表,元祖,字典,之元祖使用与介绍 一丶元祖 1.元祖简介 元祖跟列表类似.只不过是有区别的. 如下: tuple(元祖英文) 跟列表类似, 元素不能 ...

  4. python编程常用类型_Python 高级编程系列__03:python 中常见的内置类型

    python 中,对象有三个特征:身份.特征.值. 身份:可以理解为对象在内存中的地址.可以用 id 来查看对象的地址. >>> a=3 >>> id(a) 432 ...

  5. imooc《Python入门与实战》学习总结(七)Python中的面向对象

    # 面向对象 # 类是现实世界或思维世界中的实体在计算机中的反映 # 行为的主体与特征 # ① 类 class 命名规则:首字母大写,尽量不用下划线,用驼峰方式 Student, UserStuden ...

  6. 【Python面试必看系列】之Python 中的三元运算子

    Q 4. 解释一下 Python 中的三元运算子 python中并没有c++中的三元算子 : c=a>b?a:b //意思是如果a>b就将a赋值给c,否则将b赋值给c. 但是python中 ...

  7. Python 学习系列(4) 在Python中建立N维数组并赋初值

    在Python中,由于不像C++/Java这样的语言可以方便的用a[i][j]=0的方式,建立二维数组并赋初值,所以需要一个相对巧妙的方法. 可以用列表解析的方式,eg: >>> m ...

  8. spark python教程_spark2.x由浅入深深到底系列七之python开发spark环境配置

    课程咨询以及领取大额优惠请加微信:bigdatatang01 以下是在mac操作系统上配置用python开发spark的环境 一.安装python spark2.2.0需要python的版本是Pyth ...

  9. 知识点讲解七:Python中的异常处理机制

    异常的处理机制 try:result = 4 / 0 except Exception as e:print('输出异常:'+str(e)) else:print("try子句没有异常,输出 ...

最新文章

  1. 谷歌深度学习公开课任务 5: Word2VecCBOW
  2. Android中Alertdialog对话框点击消失?
  3. QT集成QML和JavaScript
  4. python异常处理结构_python-异常处理
  5. python3.7游戏_python3.7+django环境搭建
  6. ip camera芯片级解决方案
  7. 关于npm 的注意事项
  8. wpf tabcontrol嵌套自动跳转上层_Python Selenium包应对嵌套网页的方法和简单 js 脚本运行的实现...
  9. Android工程重新编译问题
  10. 【Linux 内核 内存管理】内存映射相关数据结构 ① ( vm_area_struct 结构体 | task_struct、mm_struct、vm_area_struct 3 个结构体之间的关系)
  11. VPX,CompactPCI serial 总线
  12. Windows补丁修复- Microsoft Windows HTTP.sys远程代码执行漏洞 (MS15-034)(CVE-2015-1635)
  13. 关于android的广告词,关于android:随心译无广告的专属实时翻译神器
  14. Vim文本编辑器及文本处理常用操作
  15. Excel:12 个操作小技巧
  16. go语言实现发送邮件带附件
  17. MATLAB连续LTI系统的时域分析(十)
  18. 计算机科学与技术大学博士后,清华大学博士后
  19. ubuntu自动挂载smba服务器
  20. 消防给水及消火栓系统技术规范_消防给水及消火栓系统技术规范13、14 习题

热门文章

  1. bootstraptable不显示数据_单片机显示原理
  2. python读hadoop_python读取hdfs并返回dataframe教程
  3. socket io 不使用redis_为什么Redis单线程能够达到数十万、百万级的QPS?
  4. jsp mysql更新表数据库_一个关于JSP更新数据库MySQL中的表的问题!
  5. java装饰模式_Java装饰者模式实例详解
  6. h5封装去底部_Appium—Native+H5混合APP的自动化
  7. 移动端的注册登录设计灵感!
  8. 宁波送餐机器人_重磅合作丨擎朗送餐机器人进驻外婆家,让等餐顾客不再流失...
  9. Madagascar编程的Makefile文件配置
  10. 图解tcmalloc内存分配器