Keras加载模型报错NameError: name 'K' is not defined解决方法
问题现象
- 执行Keras模型加载代码时触发运行时错误:
mpiotte_model = keras.models.load_model('./metadata/mpiotte-standard.model')
- 核心报错信息:
NameError: Exception encountered when calling layer "lambda_3" (type Lambda). name 'K' is not defined
- 前置操作:已在代码中添加
from keras import backend as K语句且确认导入成功,运行环境为Google Colab,问题仍未解决。
故障原因
Keras的Lambda层序列化存储时,不会自动保存层逻辑依赖的外部模块引用、全局变量。加载模型时,Lambda层的逻辑在独立作用域执行,无法识别当前运行环境全局导入的K对象,因此抛出名称未定义的错误。
另外Colab环境下如果混用独立安装的keras库和TensorFlow内置的tensorflow.keras,会因为模块路径不匹配加剧这类加载问题。
修复步骤
- 统一Keras导入来源,优先使用Colab预装TensorFlow内置的Keras,避免版本混用:
import tensorflow as tf # 用tf.keras的backend,和后续加载模型的模块保持同源 K = tf.keras.backend
- 加载模型时通过
custom_objects参数,显式把Lambda层依赖的K传入加载器作用域:
mpiotte_model = tf.keras.models.load_model( './metadata/mpiotte-standard.model', custom_objects={'K': K} )
如果执行后仍提示其他名称未定义的错误,把对应缺失的对象按'对象名': 对象的格式补充到custom_objects字典里即可。
内容的提问来源于stack exchange,提问作者svoruganti
相关产品推荐
相关产品推荐

