加载trained_model.h5报错OSError:SavedModel文件不存在,求原因
问题原因及解决办法
原因分析
你的模型中使用了hub.KerasLayer加载TF Hub预训练模块,保存为.h5格式时仅存储了模块的引用路径,并未将模块权重嵌入到h5文件内。此前正常运行是因为系统临时目录C:\Users\harsh\AppData\Local\Temp\tfhub_modules\602d30248ff7929470db09f7385fc895e9ceb4c0中还保留着下载好的模块文件,现在该临时文件被清理(比如系统自动清理临时文件、手动删除、切换运行环境),导致加载模型时找不到依赖的模块文件,从而报错。
解决办法
重新下载缺失模块
先单独执行加载对应TF Hub模块的代码,让TF Hub重新将模块下载到临时目录:import tensorflow_hub as hub # 替换为你模型中实际使用的TF Hub模块地址 hub.load("你的TF Hub模块URL/本地路径")执行完成后,再重新加载
trained_model.h5即可。保存模型时嵌入模块权重(推荐方案)
后续保存模型时,使用TensorFlow原生格式保存(不带.h5后缀),这样会将TF Hub模块的权重一并保存到模型目录中,避免依赖临时文件:# 保存模型 model.save("trained_model", save_format="tf", include_optimizer=True) # 加载模型 model = tf.keras.models.load_model("trained_model", custom_objects={'KerasLayer':hub.KerasLayer})指定固定的TF Hub缓存目录
通过设置环境变量,将TF Hub模块缓存到自定义的固定目录,避免被系统自动清理:import os # 替换为你希望的固定缓存路径 os.environ["TFHUB_CACHE_DIR"] = "D:/tfhub_modules_cache"之后加载模块和模型时,会优先从该固定目录读取模块文件。
内容的提问来源于stack exchange,提问作者Harshit Wadhwani
相关产品推荐
相关产品推荐

