Keras加载在线URL获取的模型时提示SavedModel文件不存在报错
报错核心原因
Keras/TensorFlow加载在线URL模型时,默认会把下载的模型存到系统临时缓存目录,之前运行正常是因为首次运行后缓存文件还存在。未修改代码重新打开项目触发报错,本质是系统临时目录的缓存模型被清理了——不管是系统自动过期清理、第三方安全/清理软件删除、IDE缓存重置,都会删掉这类没有手动保存到非临时目录的文件,而你的代码里写的加载路径是上次运行时生成的临时缓存绝对路径,不是原始模型在线地址,路径指向的文件不存在就会抛出该错误。
可直接落地的修复方案
- 加载模型时不要硬编码临时缓存的本地路径,直接传入模型的原始在线URL。
tf.keras.models.load_model()原生支持HTTP/HTTPS地址传入,会自动校验本地缓存状态,缓存丢失时会自动重新拉取模型,不会因为临时文件清理报错。
错误写法(即当前代码里的问题写法):
正确写法:# 禁止使用系统临时目录下的自动生成路径,这类路径随时可能失效 model = tf.keras.models.load_model("C:/Users/xxx/AppData/Local/Temp/xxx/saved_model")# 直接填写模型的原始公开URL,框架自动处理缓存逻辑 model = tf.keras.models.load_model("模型对应的原始在线下载地址") - 如果需要避免重复下载、提升加载稳定性,首次成功拉取模型后,手动调用保存接口把模型存到你自己项目的工作目录下,后续直接加载项目内的固定路径即可,完全不受系统缓存清理影响:
# 首次拉取后保存到项目本地目录 model.save("./my_project/model/pretrained_model") # 后续直接加载本地项目内的模型 model = tf.keras.models.load_model("./my_project/model/pretrained_model") - 如果是通过TensorFlow Hub加载模型,手动指定项目内的固定缓存目录,不要使用系统默认临时路径:
import os # 把缓存目录设置为项目内的自建文件夹 os.environ["TFHUB_CACHE_DIR"] = "./project_tf_cache" import tensorflow_hub as hub model = hub.load("模型对应的TensorFlow Hub地址")
注意:系统临时目录的设计用途就是存短期临时文件,Windows、macOS、Linux都有默认的临时文件清理规则,不要把任何需要长期复用的文件存在临时目录下,这类文件丢失是系统正常机制,和代码是否修改无关。
内容的提问来源于stack exchange,提问作者JackC
相关产品推荐
相关产品推荐

