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

Python无需解压直接读取zip内.h5模型权重文件报错如何解决

不解压zip包直接加载.h5模型权重的解决方法

报错原因

load_weights方法接收参数时,如果传入的是类文件对象,Keras底层会先尝试调用endswith方法判断文件后缀,而ZipExtFile对象本身没有这个方法,因此触发属性错误。之前读取json文件正常,是因为model_from_json直接接收字节内容,不需要判断文件后缀。

实现代码

核心思路是将zip压缩包中的h5文件读入内存,包装为h5py可识别的文件对象,全程不需要落地解压:

from zipfile import ZipFile
import io
import h5py
from tensorflow.keras.models import model_from_json

archive = ZipFile(request.data['modelfile'])

for file in archive.infolist(): 
    ext = file.filename.split('.')[-1]
    if ext == 'h5':
        # 读取zip内h5文件的字节内容,用BytesIO模拟本地文件
        h5_content = io.BytesIO(archive.read(file))
        # 用h5py加载内存中的h5文件
        model_h5 = h5py.File(h5_content, 'r')
    elif ext == 'json':
        model_json_file = archive.open(file)

# 加载模型结构
loaded_model = model_from_json(model_json_file.read())
# 加载权重,直接传入h5py文件对象即可
loaded_model.load_weights(model_h5)

# 用完手动关闭文件对象,避免内存泄漏
model_h5.close()
archive.close()

补充说明

如果模型权重文件过大,内存占用较高,也可以将zip包写入服务器临时内存文件系统(如Linux的tmpfs),操作完成后自动删除临时文件,同样不会永久留存解压后的文件,符合后端安全要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:18:02