对比
Keras与ONNX:训练状态保存与推理导出
.keras在Keras中保存模型配置、权重以及存在的优化器状态。ONNX用计算图向兼容的运行时表示模型。
应该选择哪种格式?
若需在Keras中重新加载并继续训练,可考虑.keras;若需在另一兼容运行时推理,可考虑ONNX。
适用于 Keras
将 Keras v3 模型配置权重及可用训练状态保存到一个归档 · 在兼容的 Keras 环境中保存和重新加载模型
- 保存主要由可序列化 Keras 层组成的模型
- 将模型配置和权重一起管理
适用于 ONNX
向兼容运行时交换机器学习计算图和权重 · 在训练框架与推理环境之间迁移模型
- 在支持模型算子和 opset 的运行时中推理
- 交换包含输入输出和类型的模型图
基本信息
| 项目 | Keras | ONNX |
|---|---|---|
| 扩展名 | .keras | .onnx |
| MIME 类型 | application/zip | application/octet-stream |
| 常见用途 | 将 Keras v3 模型配置权重及可用训练状态保存到一个归档 · 在兼容的 Keras 环境中保存和重新加载模型 | 向兼容运行时交换机器学习计算图和权重 · 在训练框架与推理环境之间迁移模型 |
| 打开方式 | 使用兼容版本的 Keras `load_model` 加载。存在自定义层或对象时,在环境中注册可信实现,并通常保持 safe mode 开启。ZIP 工具可查看归档,但编辑解压内容可能导致无法重新加载。 | 使用 ONNX 检查器或兼容推理运行时加载。部署前检查 IR/opset 版本、算子、输入输出类型和形状及运行时支持;使用有代表性的输入与源模型比较输出。 |
| 导出或转换 | 使用 Keras `save` 或 `saving.save_model` 保存整个模型。仅用于推理的交付中,保存 `.keras` 和 `export` 目的不同。在目标 Keras 环境重新加载,并验证代表性输出、权重及所需编译或优化器状态。 | 使用源训练框架提供的 ONNX 导出器转换,并用 ONNX checker 验证结构。转换成功不保证数值等价或能在目标设备运行。使用外部数据时,将模型和所有引用文件作为同一交付单元保存。 |
按用途选择
保存主要由可序列化 Keras 层组成的模型
将 Keras v3 模型配置权重及可用训练状态保存到一个归档 · 在兼容的 Keras 环境中保存和重新加载模型
Keras将模型配置和权重一起管理
将 Keras v3 模型配置权重及可用训练状态保存到一个归档 · 在兼容的 Keras 环境中保存和重新加载模型
Keras在支持模型算子和 opset 的运行时中推理
向兼容运行时交换机器学习计算图和权重 · 在训练框架与推理环境之间迁移模型
ONNX交换包含输入输出和类型的模型图
向兼容运行时交换机器学习计算图和权重 · 在训练框架与推理环境之间迁移模型
ONNX关键点 1
Keras的save保存模型配置和状态,自定义对象的实现可能需要另行提供。
进一步了解差异关键点 2
ONNX包含具备类型的输入输出、计算图和opset信息,执行需要兼容的运行时。
进一步了解差异进一步了解差异
保存.keras和导出ONNX是不同操作。核对Keras版本、后端和运算支持;生成推理文件时保留原始.keras及依赖代码。
- Keras官方export API支持ONNX输出。记录输入类型、形状和所选opset,并核对目标运行时是否实现全部运算。
- 使用相同预处理和代表性输入对比原模型输出,记录容差与设备条件。ONNX结构检查不能独自保证数值一致、速度或Keras训练状态的保留。
常见问题
可以删除.keras并从ONNX导出文件继续训练吗?
不能这样假设。推理导出不保证重建包含优化器状态和自定义对象的Keras保存内容。请保留原始.keras、必要代码和环境信息。