TensorFlow加载含自定义激活函数模型报错求助
解决自定义激活函数加载模型报错的方案
可能的问题与对应解决方法
1. 移除重复的custom_objects参数
你当前代码同时使用了custom_object_scope上下文管理器和load_model的custom_objects参数,这可能导致冲突。只需保留上下文管理器即可:
custom_objects = {"custom_fn": custom_fn} with keras.saving.custom_object_scope(custom_objects): Model_2 = keras.models.load_model('agent2.h5')
2. 确保自定义函数的命名与保存时完全一致
检查保存模型时使用的激活函数名称,必须和加载时custom_objects中的键完全匹配(包括大小写、下划线等)。另外,可以提前给自定义函数注册Keras自定义对象,避免手动传递参数:
import tensorflow as tf # 给自定义激活函数添加注册装饰器 @tf.keras.utils.register_keras_custom_object def custom_fn(x): # 这里替换为你的自定义激活函数实现 return tf.nn.relu(x) # 示例逻辑 # 加载模型时无需额外传参 Model_2 = keras.models.load_model('agent2.h5')
3. 切换到SavedModel格式保存/加载
.h5属于旧的HDF5格式,SavedModel格式对自定义对象的兼容性更好。先重新保存模型:
# 保存为SavedModel格式(无需指定后缀) model.save('agent2_savedmodel')
再加载:
with keras.saving.custom_object_scope({"custom_fn": custom_fn}): Model_2 = keras.models.load_model('agent2_savedmodel')
4. 确保自定义函数定义在加载前执行
加载模型前必须先完成custom_fn函数的定义,不能在加载之后才编写函数逻辑,否则TensorFlow无法识别该自定义对象。
内容的提问来源于stack exchange,提问作者uv_utna
相关产品推荐
相关产品推荐

