ONNX系列二 --- 使用ONNX使Keras模型可移植
目录
Keras简介
快速浏览模型
安装和导入转换器
将Keras模型转换为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年使用便携式神经网络的系列文章中,您将学习如何将Keras模型转换为便携式ONNX格式。
由于ONNX并不是用于构建和训练模型的框架,因此我将首先简要介绍Keras。对于从头开始并考虑将Keras用作构建和训练模型的框架的工程师而言,这将很有用。
Keras简介
Keras被设计为构建神经网络的接口。这意味着它不包含用于训练和提供模型的运行时。它的接口在设计时就考虑了人类用户——高水平且使用直观。当您查看在Keras中创建模型的代码时,很容易看到所有涉及的层及其作用。
Keras最初是由Google工程师撰写的研究项目。因此,它最终找到了进入TensorFlow的方式,因此,如果您安装了2.0,则说明您已经安装了Keras。
快速浏览模型
下面的代码创建并训练了一个预测MNIST数据集中数字的模型。(这是本系列文章附带的完整的端到端演示的摘录。)在下一部分中,我们将把这个模型转换为ONNX格式。
def build_model():model = keras.Sequential([keras.Input(shape=input_shape),layers.Conv2D(32, kernel_size=(3, 3), activation="relu"),layers.MaxPooling2D(pool_size=(2, 2)),layers.Conv2D(64, kernel_size=(3, 3), activation="relu"),layers.MaxPooling2D(pool_size=(2, 2)),layers.Flatten(),layers.Dropout(0.5),layers.Dense(num_classes, activation="softmax"),])return modeldef train_model(model, x_train, y_train):model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, validation_split=0.1)
安装和导入转换器
在将Keras模型转换为ONNX之前,您将需要安装keras2onnx软件包,因为Keras或TensorFlow不包含该软件包。以下命令将Keras转换为ONNX转换实用程序:
pip install keras2onnx
安装后,可以使用以下导入将转换器导入到模块中:
import keras2onnx
将Keras模型转换为ONNX
将Keras模型转换为ONNX就像运行下面所示的函数一样简单。唯一必需的代码行是用于转换模型并将转换后的模型保存到文件系统的行。关于keras2onnx转换器的值得注意的是,它仅需要模型作为参数。这使转换变得容易并且不易出错。用于其他框架的其他转换器需要有关模型输入的信息,这很容易出错。
def export_to_onnx(model):# convert to onnx modelonnx_model = keras2onnx.convert_keras(model, model.name)# Add metadata to the ONNX model.meta = onnx_model.metadata_props.add()meta.key = "creation_date"meta.value = datetime.datetime.now().strftime("%m/%d/%Y, %H:%M:%S")meta = onnx_model.metadata_props.add()meta.key = "author"meta.value = 'keithpij'onnx_model.doc_string = 'MNIST model'onnx_model.model_version = 3 # This must be an integer or long.keras2onnx.save_model(onnx_model, ONNX_MODEL_FILE)
将元数据添加到模型的代码是最佳实践。随着用于训练模型的数据的发展,模型也将随之发展。因此,将元数据添加到模型中是一个好主意,以便您可以将其与以前的模型区分开。上面的示例将模型的简短描述添加到doc_string属性中并设置版本。creation_date和author是添加到metadata_props属性包中的自定义属性。您可以使用此属性包自由创建尽可能多的自定义属性。不幸的是,该model_version属性需要一个整数或长整数,因此您将无法使用major.minor.revision语法像服务一样对其进行版本控制。
摘要和后续步骤
keras2onnx软件包符合Keras本身的设计目标。它直观且易于使用。在本文中,我为那些寻求用于构建和训练神经网络的深度学习框架的人提供了Keras的简要概述。然后,我展示了如何使用kera2onnx软件包将Keras模型转换为ONNX格式。
由于本文的目的是演示将Keras模型转换为ONNX格式,因此我没有详细介绍如何构建和培训Keras模型。本文的代码示例包含探索Keras本身的代码。所述keras_mnist.py模块是一个完整的端至端演示的是示出了如何加载数据、探索图像和训练模型。
接下来,我们将研究如何将PyTorch模型转换为ONNX。
参考文献
- https://www.tensorflow.org/
- https://keras.io/
- https://github.com/onnx/keras-onnx
- https://github.com/keithpij/onnx-lab
ONNX系列二 --- 使用ONNX使Keras模型可移植相关推荐
- ONNX系列四 --- 使用ONNX使TensorFlow模型可移植
目录 TensorFlow简介 安装和导入转换器 快速浏览模型 将TensorFlow模型转换为ONNX 摘要和后续步骤 参考文献 下载源547.1 KB 系列文章列表如下: ONNX系列一 --- ...
- ONNX系列三 --- 使用ONNX使PyTorch AI模型可移植
目录 PyTorch简介 导入转换器 快速浏览模型 将PyTorch模型转换为ONNX 摘要和后续步骤 参考文献 下载源547.1 KB 系列文章列表如下: ONNX系列一 --- 带有ONNX的便携 ...
- ONNX系列五 --- 在C#中使用可移植的ONNX AI模型
目录 安装和导入ONNX运行时 载入ONNX模型 使用ONNX运行时进行预测 摘要和后续步骤 参考文献 下载源547.1 KB 系列文章列表如下: ONNX系列一 --- 带有ONNX的便携式神经网络 ...
- ONNX系列一 --- 带有ONNX的便携式神经网络
目录 介绍 模型的问题 运行时问题 下一步 代码示例 参考文献 下载源547.1 KB 系列文章列表如下: ONNX系列一 --- 带有ONNX的便携式神经网络 ONNX系列二 --- 使用ONNX使 ...
- 【Python学习系列二十】scikit-learn库模型持久化
场景:需要将模型保存到内存,或磁盘. 代码: # -*- coding: utf-8 -*-import pandas as pd import pickle as pkl from sklearn. ...
- ONNX系列七 --- 在Python中使用可移植的ONNX AI模型
目录 安装和导入ONNX运行时 载入ONNX模型 使用ONNX运行时进行预测 摘要和后续步骤 参考文献 下载源547.1 KB 系列文章列表如下: ONNX系列一 --- 带有ONNX的便携式神经网络 ...
- ONNX系列六 --- 在Java中使用可移植的ONNX AI模型
目录 安装和导入ONNX运行时 载入ONNX模型 使用ONNX运行时进行预测 摘要和后续步骤 参考文献 下载源547.1 KB 系列文章列表如下: ONNX系列一 --- 带有ONNX的便携式神经网络 ...
- Pytorch的pth模型转onnx,再用ONNX Runtime调用推理(附python代码)
我做的是一个简单的二分类任务,用了个vgg11,因为要部署到应用,所以将 PyTorch 中定义的模型转换为 ONNX 格式,然后在 ONNX Runtime 中运行它,那就不用了在机子上配pytor ...
- Python: 从PYTORCH导出模型到ONNX,并使用ONNX运行时运行它
Python: 从PYTORCH导出模型到ONNX,并使用ONNX运行时运行它 本教程我们将描述如何将PyTorch中定义的模型转换为ONNX格式,然后使用ONNX运行时运行它. ONNX运行时是一个 ...
最新文章
- MySql常用命令集Mysql常用命令showdatabases;显示数据库createdatab
- cwRsync 同步时报错 STATUS_ACCESS_VIOLATION
- 编程中的蛇形填空问题_在线编程问题当中的蛇形矩阵问题
- Java黑皮书课后题第8章:8.29(相同的数组)如果两个二维数组m1和m2具有相同的内容,则它们是相同的。编写一个方法,如果m1和m2相同的话,返回true
- 关于vs2008设计视图假死的原因及解决方案总结
- 一段可自动点击运行代码(只偷偷的点一次)
- 95-30-060-java.util-HashSet
- 不是所有学计算机的都是肖奈,为什么《微微一笑很倾城》中贝微微肖奈学习都很拔尖,却都不考研...
- android 连接魅族调试,魅族 PRO6 开启USB调试模式
- android screencap,android – “adb screencap /sdcard/screenshot.raw”生成什么格式? (没有“-p”标志)...
- VUE中隐藏和限制DIV或其他HTML元素
- 编程语言的宗教狂热和十字军东征 (转)
- python判断今天周几_如何用python判断今天是星期几
- 电源管理之pmu驱动分析
- 传记-《硅谷钢铁侠》书中的精髓:从埃隆·马斯克的精神世界和人格特质里,找寻成功的秘密。
- C\C ++语言 文件备份实验
- 语音处理/语音识别基础(三)- 声音的特征和声音的能量
- 去除nginx.conf文件中注释和空格行方法
- android下面res目录
- Excel转Json工具(支持GUI模式和命令行模式)
热门文章
- jsp mysql更新表数据库_一个关于JSP更新数据库MySQL中的表的问题!
- 根据不同条件查询_刑事立案要符合哪些条件,怎么查看立案没有
- html 展示 python结果_在HTML中显示Python值
- java 认证和授权_SpringSecurity一:认证和授权
- python websocket server模块_Python 3.5.2实现websocket服务端(四): WebSocketServer类实现...
- 简单获取PNG免扣素材,提升设计效率
- 国内人气设计师交流平台集设
- UI素材模板|新拟态新趋势图标ICON
- 素材干货|UI设计师不会插画?不难搞!有了这些模板,作品安了!
- android中activity布局,Android中登录布局展示Activity