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

加载TensorFlow .pb模型时Lambda层报错的问题排查与修复

问题原因
  1. 模型依赖模块未加载:模型保存时依赖仓库内的solvers.networks.base7模块定义,但测试脚本未导入该模块,导致TensorFlow无法解析Lambda层的关联逻辑,提前抛出警告。
  2. Keras后端引用未定义:原模型的Lambda层使用了K.clip(Keras后端的裁剪方法),但测试脚本未导入Keras后端K,加载模型时Lambda层的匿名函数找不到K的定义,触发NameError。
修复方案

方案一:在测试脚本中补全依赖导入

修改测试脚本,添加必要的模块导入,确保Python能找到模型定义的模块,同时导入Keras后端:

import tensorflow as tf
from tensorflow.keras import backend as K
import cv2
import numpy as np
import sys
# 将仓库根目录添加到Python路径,确保能导入solvers模块
sys.path.append('./SR_Mobile_Quantization-master')  # 替换为你的仓库实际路径
from solvers.networks.base7 import *

model_dir = './experiment/base7_D4C28_bs16ps64_lr1e-3/best_status'
image_path = 'sample.png'

image = cv2.imread(image_path)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
image = cv2.resize(image, (256, 256))
input_data = image[np.newaxis].astype(np.float32)

# 加载模型,若仍有问题可指定custom_objects
model = tf.keras.models.load_model(model_dir, custom_objects={'K': K})
output = model.predict(input_data)

output = cv2.cvtColor(output[0], cv2.COLOR_RGB2BGR)
cv2.imshow('hr', output)
cv2.waitKey(0)
cv2.destroyAllWindows()

方案二:修改原模型定义(需重新保存模型)

如果有权限修改原仓库代码,可将base7.py中的K.clip替换为TensorFlow原生方法,避免依赖Keras后端:
打开SR_Mobile_Quantization-master/solvers/networks/base7.py,找到第27行:

clip_func = Lambda(lambda x: K.clip(x, 0., 255.))

修改为:

clip_func = Lambda(lambda x: tf.clip_by_value(x, 0., 255.))

重新训练或保存模型后,测试脚本无需额外导入K即可正常加载模型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 22:13:10