You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行load_model加载h5模型时报keras.backend无unique_object_name属性错误

报错原因
  • 核心为Keras版本不兼容:你尝试加载的cnnCat2.h5模型由旧版本独立Keras(通常为2.3.x/2.4.x版本)训练导出,unique_object_name是旧版Keras后端的内置方法,该方法在Keras 2.10+版本、以及TensorFlow集成的tf.keras中已被移除或重命名,因此调用load_model加载旧模型时会触发属性不存在的报错。
  • 次要触发场景:本地同时安装了独立Keras和TensorFlow内置Keras,导入路径冲突也可能导致该报错。
解决方法

方案1:降级Keras到匹配版本(最稳妥,无需修改业务代码)

直接安装和模型训练环境匹配的Keras、TensorFlow版本,执行以下安装命令即可:

pip install keras==2.4.3 tensorflow==2.4.1

安装完成后重新运行原代码即可正常加载模型。

方案2:添加兼容层加载(适合不想降级现有开发环境的场景)

修改导入路径和模型加载代码,手动补全缺失的unique_object_name方法:

  1. 首先修改依赖导入语句:
import cv2
import os
import tensorflow as tf
from tensorflow.keras.models import load_model
import numpy as np
from pygame import mixer
import time
  1. 然后修改模型加载代码,传入自定义对象参数:
from tensorflow.keras.utils import register_keras_serializable

@register_keras_serializable()
def unique_object_name(name, zero_based=True):
    return name

model = load_model('C:/Users/Henry/Downloads/Drowsiness detection/Drowsiness detection/models/cnnCat2.h5', custom_objects={'unique_object_name': unique_object_name})

方案3:重新训练模型(适合持有模型训练源码的场景)

如果你有该模型的完整训练代码,使用当前环境的Keras重新训练并导出模型,新导出的模型可以直接在当前环境加载,不会出现版本不兼容问题。


内容的提问来源于stack exchange,提问作者Henry Lewis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 18:45:05