使用pickle加载Keras深度学习模型时遇IsADirectoryError错误求助
解决Keras模型加载时的IsADirectoryError问题
问题原因
当你调用Keras的model.save('model.pkl')时,Keras会将传入的字符串视为文件夹名称,生成一个包含SavedModel格式文件的目录,而非单个pickle文件。但你用pickle.load()尝试读取这个目录,就会触发IsADirectoryError——因为pickle只能处理单个文件,无法读取目录。
解决方法
方法1:使用Keras官方加载方式(推荐)
这是Keras官方支持的标准做法,能完整保存模型结构、权重、优化器状态等信息,兼容性最好:
from tensorflow.keras.models import load_model # 直接传入模型文件夹路径即可加载 model = load_model('/home/samar/Desktop/ckd/model.pkl') prediction = model.predict(data)
方法2:改为pickle序列化保存(不推荐)
如果一定要用pickle格式保存模型,需要修改保存逻辑,将模型序列化为单个pickle文件:
import pickle # 保存模型为单个pickle文件 with open('model.pkl', 'wb') as f: pickle.dump(model, f)
之后你原来的加载代码就可以正常运行,但这种方式可能丢失模型的部分信息(比如自定义层、优化器状态),仅适用于简单模型。
注意事项
优先选择方法1,SavedModel是Keras的标准模型格式,支持跨框架部署(如TensorFlow Serving),且稳定性更强。
内容的提问来源于stack exchange,提问作者Samar Pratap Singh
相关产品推荐
相关产品推荐

