本地加载EfficientNet预训练模型报SavedModel不存在错误求助
问题描述
本地提前下载EfficientNet预训练模型,未采用在线访问模型的调用方式:
- 传入TF Hub官方在线模型地址调用时,代码可正常运行
- 切换为本地路径加载时程序运行失败,抛出错误:
OSError: SavedModel file does not exist at: C:/User/A/model/saved_model.pb
对应出错代码如下:
input_shape = (IMAGE_SIZE, IMAGE_SIZE, CHANNEL) effinet_feature_extractor_model = "C:/User/A/model/saved_model.pb" pretrained_effinet_model_without_top_layer = hub.KerasLayer( effinet_feature_extractor_model, input_shape=input_shape, trainable=False)
故障原因及修复方案
- 传参路径错误:
hub.KerasLayer加载本地SavedModel格式模型时,入参需要传入包含saved_model.pb文件的上层目录路径,不能直接传入saved_model.pb文件的完整路径。当前代码直接传入pb文件路径,框架会将该字符串识别为目录路径查找对应文件,必然触发不存在报错。 - 本地模型文件结构缺失:完整的TF Hub SavedModel模型解压后,目标目录下需要包含三类内容,缺任意一项都会加载失败:
- 模型结构文件
saved_model.pb - 权重存储子目录
variables/,目录内需包含variables.data-00000-of-00001、variables.index两个权重文件 - 资源存储子目录
assets/,部分模型该目录为空但必须存在
- 模型结构文件
- 路径识别异常:Windows环境下路径拼写错误(比如默认用户目录实际为
C:/Users/而非C:/User/)、未做转义处理、路径包含中文/特殊空格都会导致路径识别失败,建议路径字符串前加r标记为原始字符串,同时核对实际目录名和代码中拼写是否完全一致。
修正后参考代码
input_shape = (IMAGE_SIZE, IMAGE_SIZE, CHANNEL) # 传入包含saved_model.pb的目录路径,使用原始字符串避免转义问题 effinet_feature_extractor_model = r"C:/User/A/model" pretrained_effinet_model_without_top_layer = hub.KerasLayer( effinet_feature_extractor_model, input_shape=input_shape, trainable=False)
内容的提问来源于stack exchange,提问作者Bet
相关产品推荐
相关产品推荐

