Keras模型转换为ONNX格式

ONNX(Open Neural Network Exchange)是一个开放的格式,用于表示深度学习模型,使得模型可以在不同的框架和工具之间进行转换和使用。本文将介绍如何将使用Keras框架构建的模型转换为ONNX格式。首先,将简要介绍Keras,这对于刚开始接触深度学习并考虑使用Keras构建和训练模型的工程师来说非常有用。

Keras简介

Keras是一个用于构建神经网络的高级接口。它不包含用于训练和部署模型的运行时环境,其设计初衷是为了用户友好——界面简洁且直观。在Keras中构建模型的代码易于理解,可以清晰地看到所有涉及的层及其功能。Keras最初是由Google的一位工程师作为研究项目开发的,后来被整合进TensorFlow中,因此如果安装了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): # 转换为onnx模型 onnx_model = keras2onnx.convert_keras(model, model.name) # 向ONNX模型添加元数据 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 # 这必须是一个整数或长整型 keras2onnx.save_model(onnx_model, ONNX_MODEL_FILE)

添加元数据到模型是一个最佳实践。随着用来训练模型的数据的演变,模型也会随之变化。因此,添加元数据到模型是一个好主意,这样就可以将它与以前的模型区分开来。上面的示例向doc_string属性添加了模型的简短描述,并设置了版本。creation_date和author是添加到metadata_props属性包中的自定义属性。可以自由地使用这个属性包创建尽可能多的自定义属性。遗憾的是,model_version属性需要一个整数或长整型,所以无法像服务那样使用major.minor.revision语法来版本化。

keras2onnx包忠于Keras的设计目标。它直观且易于使用。在本文中,为那些寻找用于构建和训练神经网络深度学习框架的人提供了Keras的简要概述。然后,展示了如何使用keras2onnx包将Keras模型转换为ONNX格式。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485