加载Keras模型时出现'TensorFlowOpLayer'未知层错误,求解决方法
解决加载Keras H5模型时的'TensorFlowOpLayer'未知层错误
问题重现
修正后的错误代码
import numpy as np import tensorflow as tf from tensorflow.keras.models import Model from tensorflow.keras.layers import Dense, Concatenate, add, multiply from tensorflow.keras import Input from tensorflow.keras import optimizers from keras import backend as K import os _dir = "/content/drive/MyDrive/Neural-Optimization-Machine-NOM-main/problem1/" save_model_name = os.path.join(_dir,'problem1_NN objective function.h5') model = tf.keras.models.load_model(save_model_name, compile=False)
触发的错误
ValueError: 未知层:'TensorFlowOpLayer'。请确保您正在使用keras.utils.custom_object_scope,并将该对象纳入作用域。
解决方案
- 统一TensorFlow版本:模型保存与加载的TensorFlow版本不一致是常见诱因,尽量使用保存模型时的同版本TensorFlow,避免跨大版本加载。
- 显式注册自定义层:加载模型时,将
TensorFlowOpLayer纳入自定义对象字典,代码示例:import tensorflow as tf from tensorflow.python.keras.layers import TensorFlowOpLayer model = tf.keras.models.load_model( save_model_name, compile=False, custom_objects={'TensorFlowOpLayer': TensorFlowOpLayer} ) - 改用SavedModel格式:如果有权限重新保存模型,优先使用TensorFlow原生的SavedModel格式(而非H5),该格式对TensorFlow内部操作的兼容性更好,保存与加载示例:
# 保存模型 model.save("path/to/saved_model") # 加载模型 loaded_model = tf.keras.models.load_model("path/to/saved_model", compile=False) - 检查模型依赖:如果模型中使用了自定义操作或第三方层,需确保加载时所有依赖的自定义对象都已导入并注册到
custom_objects中。
内容的提问来源于stack exchange,提问作者Navdeep Malik
相关产品推荐
相关产品推荐

