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

使用torch加载TensorFlow Keras模型时出现BadZipFile错误求助

解决用torch.save保存Keras模型后torch.load报错BadZipFile的问题

问题根源

你用PyTorch的torch.save()序列化了Keras模型对象,这属于跨框架的错误操作:

  • torch.save()是为PyTorch模型设计的序列化工具,它会把Keras模型当作普通Python对象用pickle存储,而非Keras标准的模型格式(SavedModel/HDF5)。
  • 当你用torch.load()加载时,内部会触发Keras的反序列化逻辑,但存储的文件并非Keras预期的zip结构(SavedModel为zip格式,HDF5也是类zip的二进制格式),因此抛出BadZipFile错误。
  • Colab中能加载是因为保存和加载时的TensorFlow/PyTorch版本完全一致,pickle能正确反序列化对象,但本地环境的版本差异或加载逻辑细节导致失败。

解决方案

方案1:回到Colab用Keras官方方法重新保存(推荐)

这是最可靠的解决方式,步骤如下:

  1. 在Colab中,确保模型model5仍在内存中(或重新运行训练代码到保存步骤),替换错误的保存代码:
    # 推荐:保存为SavedModel格式(TensorFlow官方推荐,兼容性更好)
    model5.save('keras_model')  # 生成一个文件夹
    
    # 可选:保存为HDF5格式
    # model5.save('keras_model.h5')
    
  2. 将新保存的模型文件夹/文件下载到本地PyCharm项目目录。
  3. 在PyCharm中用Keras官方加载方法加载:
    from keras.models import load_model
    
    # 加载SavedModel格式
    model = load_model('keras_model')
    
    # 加载HDF5格式
    # model = load_model('keras_model.h5')
    

方案2:尝试直接用pickle加载现有模型(仅当无法重新保存时使用)

如果无法回到Colab重新保存,可以尝试跳过torch.load(),直接用pickle反序列化文件:

import pickle

with open('model.pth', 'rb') as f:
    model = pickle.load(f)

⚠️ 注意:这种方法依赖Colab和本地环境的TensorFlow/Keras版本完全一致,否则可能出现反序列化失败或模型参数异常的问题,仅作为临时补救方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:16:23