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

加载保存的模型时为何出现BadZipFile错误?

解决pickle加载模型时的BadZipFile错误

可能原因

  • 模型文件保存时损坏:比如保存过程中程序崩溃、磁盘写入故障,导致文件不完整,pickle解析时误判为zip格式(损坏的文件头部可能和zip标识重合)
  • 保存方式错误:部分深度学习框架(如TensorFlow/Keras)默认用SavedModel或H5格式保存模型,这类文件不是纯pickle对象,直接用pickle.load会报错
  • 文件扩展名不符:虽然后缀是.sav,但实际是zip格式的模型包,却被当作普通pickle文件加载

解决办法

1. 重新生成模型文件

如果能重新运行训练代码,用对应框架的正确方式保存:

  • 若是scikit-learn等传统机器学习模型,用pickle正常保存:
import pickle
# 假设model是训练好的模型
with open('breast_cancer_classification_nn_model.sav', 'wb') as f:
    pickle.dump(model, f)
  • 若是TensorFlow/Keras模型,用框架自带方法保存加载:
# 保存
model.save('breast_cancer_model.h5')
# 加载
from tensorflow.keras.models import load_model
breast_cancer_model = load_model('breast_cancer_model.h5')

2. 检查文件完整性

  • 对比正常模型文件的大小,如果当前文件明显偏小,说明文件损坏,重新获取完整的模型文件
  • 用文本编辑器查看文件头部:正常pickle文件以\x80\x04\x95开头,zip文件以PK\x03\x04开头。如果是PK开头,说明是zip格式,不能用pickle加载

3. 验证文件格式

用zipfile模块测试文件是否为有效zip:

import zipfile
try:
    with zipfile.ZipFile('breast_cancer_classification_nn_model.sav', 'r') as zf:
        print("是zip文件,包含内容:", zf.namelist())
except zipfile.BadZipFile:
    print("不是zip文件,大概率是原文件已损坏")

内容的提问来源于stack exchange,提问作者Jæcob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 02:10:20