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

加载Siamese神经网络模型时出现NameError:name 'K' is not defined

解决Siamese模型加载时K is not defined错误

问题原因

你的Siamese模型包含一个使用自定义euclidean_distance函数的Lambda层,该函数依赖keras.backend as K。加载模型时,recognize.py中既没有导入K,也没有提供该自定义函数的定义,导致Keras无法解析Lambda层的逻辑。

解决方案

修改recognize.py,补充必要的导入和自定义函数定义,加载模型时指定custom_objects参数:

import cv2
import numpy as np
from keras.models import load_model
from keras import backend as K  # 导入Keras后端
from utils import load_embeddings

# 复制train.py中定义的欧氏距离函数,保证和训练时完全一致
def euclidean_distance(vectors):
    featsA, featsB = vectors
    sumSquared = K.sum(K.square(featsA - featsB), axis=1, keepdims=True)
    return K.sqrt(K.maximum(sumSquared, K.epsilon()))

# 加载模型时传入自定义函数
siamese_model = load_model('models/siamese_model.h5', compile=False, custom_objects={'euclidean_distance': euclidean_distance})

注意事项

  • 确保euclidean_distance函数的代码和train.py中完全一致,不能有任何改动,否则模型加载会失败。
  • 你的环境使用独立的keras包而非tensorflow.keras,所以全程保持from keras.X的导入方式,不要混用tensorflow.keras。

内容的提问来源于stack exchange,提问作者Mai Thanh Bình

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 05:35:02