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

加载Keras保存的模型运行报错,训练后直接测试正常求助

解决Keras加载模型后预测出现CuDNN内部错误的问题

看起来你遇到的是CuDNN资源分配/上下文冲突导致的崩溃,这类问题在训练和预测使用不同TensorFlow会话时很常见——训练完成后直接测试是在同一个会话里,内存和资源状态正常,但加载模型时会启动新会话,容易和残留的GPU资源产生冲突。下面是几个针对性的解决方案:

1. 加载模型前清理旧会话与GPU内存

在加载模型之前,先清理Keras的后台会话,释放之前可能残留的GPU资源:

from keras.backend import clear_session

# 清理旧会话
clear_session()

# 再加载模型
num_classes = 17 
model = load_model('model.h5') 

如果还是不行,可以尝试手动配置TensorFlow的GPU内存增长策略,避免一次性占满GPU内存导致CuDNN初始化失败:

import tensorflow as tf
from keras.backend.tensorflow_backend import set_session

# 配置GPU按需分配内存
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
sess = tf.Session(config=config)
set_session(sess)

# 之后加载模型
model = load_model('model.h5')

2. 检查图像预处理的一致性

虽然这不是直接引发CuDNN错误的原因,但如果训练时对图像做了归一化(比如X_train = X_train / 255.0),而测试代码里没有做同样的处理,会导致模型输入分布异常,间接引发计算层面的问题。建议在测试时加上同样的预处理:

# 加载并处理图像后,添加归一化
X_test = np.array([img1,img2,img3]) / 255.0  # 和训练时一致

3. 验证CuDNN与TensorFlow版本兼容性

你的错误日志是2018年的,当时TensorFlow 1.x和CuDNN的版本匹配要求很严格。比如TensorFlow 1.8需要搭配CuDNN 7.0.x,版本不兼容会直接导致CuDNN初始化失败。可以检查你训练和测试环境的TensorFlow、CuDNN、CUDA版本是否完全一致——如果训练用的是某个版本,测试环境版本不同也会出现这类问题。

4. 尝试在全新的Python进程中测试

有时候训练进程残留的GPU资源无法通过代码清理,最简单的方式是关闭训练用的Python进程,重新启动一个新进程来运行测试代码,避免资源冲突。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:18:20