TensorFlow Hub调用ResNet_v2_50出现InvalidArgumentError如何解决
报错原因分析
这个报错的核心是TensorFlow无法正常读取TF Hub下载到本地临时目录的模型变量文件,具体诱因分为三类:
- 模型缓存文件损坏/下载不完整
首次加载该TF Hub模型时,Colab会自动将模型下载到/tmp/tfhub_modules对应哈希子目录中,如果下载过程中出现网络波动、会话中断,会导致变量文件缺失/损坏,后续加载时就会触发读取失败错误。 - 依赖版本不兼容
你当前使用的Colab环境为Python3.7,对应的TensorFlow、TensorFlow Hub版本可能和该v5版本ResNet模型的要求不匹配,会出现本地文件系统读取适配问题。 - 临时目录权限/配置异常
Colab的/tmp为临时存储目录,如果此前你修改过运行时的文件系统配置、挂载了Google Drive修改了默认路径权限,也会导致TF无法正常读取本地路径下的文件。
解决方法
- 第一步先清理损坏的缓存文件,在原有代码前添加如下代码:
import shutil # 单独删除本次报错的损坏模型缓存 shutil.rmtree('/tmp/tfhub_modules/02229962626ef521d65cf8ce349d83f59c4e3f51', ignore_errors=True) # 也可以直接清空全部TF Hub缓存 # shutil.rmtree('/tmp/tfhub_modules', ignore_errors=True)
- 如果清理缓存后仍报错,升级对应依赖后重启Colab运行时即可:
!pip install --upgrade tensorflow tensorflow-hub
- 频繁出现该问题的话,可以将TF Hub缓存路径修改到已挂载的Google Drive目录,避免临时目录丢失数据:
import os os.environ["TFHUB_CACHE_DIR"] = "/content/drive/MyDrive/tfhub_cache"
内容的提问来源于stack exchange,提问作者Lombiz
相关产品推荐
相关产品推荐

