使用ONNX使Keras模型可移植(译文)
By S.F.
本文链接 https://www.kyfws.com/news/making-keras-models-portable-using-onnx/
版权声明 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
- 4 分钟阅读 - 1622 个词 阅读量 0使用ONNX使Keras模型可移植(译文)
原文地址:https://www.codeproject.com/Articles/5278501/Making-Keras-Models-Portable-Using-ONNX
原文作者:Keith Pijanowski
译文由本站翻译
前言
在本文中,我为那些寻求用于构建和训练神经网络的深度学习框架的人提供了Keras的简要概述. 在这里,我展示了如何使用kera2onnx软件包将Keras模型转换为ONNX格式. 下载源547.1 KB 在关于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 model
def 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 model
onnx_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
许可
本文以及所有相关的源代码和文件均已获得The Code Project Open License (CPOL)的许可。
Python AI machine-learning Keras 新闻 翻译