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

如何在Azure Functions中读取.h5 Blob并加载Keras模型?

解决Azure Function中加载Blob存储的Keras .h5模型问题

这个问题其实是因为Keras的load_model方法默认期望的是文件路径字符串,而你直接传入了字节对象,它会把字节内容当作路径去解析,自然就会出现ValueError: stat: embedded null character in path这类错误啦。

我们可以通过把Blob的字节内容转换成类文件对象来解决这个问题,Keras完全支持从类文件对象中加载模型,具体步骤如下:

完整解决方案代码

from azure.storage.blob import BlockBlobService
from keras.models import load_model
from io import BytesIO

# 初始化Blob服务客户端
blob_service = BlockBlobService(account_name=STORAGE_ACCOUNT_NAME, account_key=STORAGE_ACCOUNT_KEY)

# 获取目标Blob的字节内容
blob = blob_service.get_blob_to_bytes(CONTAINER_NAME, BLOB_NAME)

# 将字节内容包装为类文件对象(BytesIO模拟文件操作)
model_file_like = BytesIO(blob.content)

# 直接从类文件对象加载Keras模型
model = load_model(model_file_like)

关键说明

  • BytesIO是Python标准库io模块中的工具,它可以把字节数据包装成符合文件接口的对象,让Keras以为它在读取本地文件,完美适配load_model的要求。
  • 这种方法不需要将Blob内容保存到Azure Function的临时存储中,既节省了磁盘空间,也提升了加载效率。
  • 如果只是需要加载权重而非完整模型,同样可以用这个方法:
    # 假设你已经初始化了模型结构
    model = YourModelStructure()
    # 用BytesIO包装权重字节后加载
    weights_file_like = BytesIO(blob.content)
    model.load_weights(weights_file_like)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 09:37:45