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运行时是一个 ...
最新文章
- Python关于%matplotlib inline
- background 距离右边固定距离
- 阿里云系列——3.企业网站备案步骤---2018-1-4
- 十分钟了解分布式计算:Spark
- 华为畅享9s可以升级鸿蒙吗,珍珠全面屏!华为畅享9S/9e正式发布:千元三摄加持...
- SQL的各种连接(cross join、inner join、full join)的用法理解
- PDF文档解析,公司公告信息抽取(附数据集)
- struts2中struts:iterator标签的使用
- python流程自动化_python selenium 自动化流程的一些总结与思考
- 基于OptiSystem的波分+时分复用混合光网络系统
- python写图片爬取软件_python抓取整个网站图片
- MapInfo MIF/MID文件格式描述
- vue json对象转数组
- PR软件下载Adobe Premiere Pro CC 2019安装教程
- Visio2013下载及激活破解工具
- 面试时如何做自我介绍?聪明的应聘者只聚焦1点
- 排序算法——鸽巢排序 Pigeonhole sort
- [PTA] 7-6 厘米换算英尺英寸
- rdma_RDMA:基本原理和自举探索
- mysql导vertica_vertica从其他表迁移数据到新表(insertinto语句用法实例)
热门文章
- 哈夫曼树编码和译码c语言,C++哈夫曼树编码和译码的实现
- ueditor上传图片回调_springboot+mybatis+oss整合ueditor
- html5图片比例控制,按比例调整图像大小以适应HTML5画布
- 设计干货 | 时尚简约海报模板
- LOGO设计没有灵感?5种方法来寻找标志设计的灵感和想法
- php读入输入_php-读取用户输入并检查数据类型
- 联想小新模式切换不了_精彩,不止一屏!联想多款消费新品亮相秋季发布会
- django跳转到其他页面的方式
- NVIDIA Tesla K40C 和 AMD Firepro W8100 的对比
- C/C++常量数据类型