如何在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
相关产品推荐
相关产品推荐

