使用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官方方法重新保存(推荐)
这是最可靠的解决方式,步骤如下:
- 在Colab中,确保模型
model5仍在内存中(或重新运行训练代码到保存步骤),替换错误的保存代码:# 推荐:保存为SavedModel格式(TensorFlow官方推荐,兼容性更好) model5.save('keras_model') # 生成一个文件夹 # 可选:保存为HDF5格式 # model5.save('keras_model.h5') - 将新保存的模型文件夹/文件下载到本地PyCharm项目目录。
- 在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
相关产品推荐
相关产品推荐

