iOS端运行Tensorflow Inception v3网络报错问题求助
TensorFlow Inception v3 iOS部署:解决"dilations"属性兼容报错
报错根本原因
这个错误完全是Python端生成模型的TensorFlow版本和iOS端运行的TensorFlow框架版本不匹配导致的:
- 你用TF 1.7/1.8生成的Inception v3模型里,
Conv2D节点带有dilations属性——这个属性是TensorFlow后期新增的特性。 - 而你用的iOS示例里的预编译
TensorFlow.framework是旧版本(大概率是TF 1.4或更早),根本不认识dilations这个属性,所以执行时直接报错。哪怕你降级到TF 1.7生成模型,只要iOS端的框架没升级,还是会踩这个坑。
iOS端所需的TensorFlow版本
2018年官方iOS示例自带的TensorFlow框架版本是TF 1.4及以下,如果你用TF 1.7/1.8生成模型,必须让iOS端的框架版本和Python端完全一致。
解决方法
这里有两个可行的方案:
方案1:升级iOS端的TensorFlow框架
别再用示例里的旧框架了,自己编译对应版本的iOS框架:
- 把TensorFlow仓库checkout到你Python端用的版本(比如
git checkout v1.7.0)。 - 用官方提供的iOS编译脚本
tensorflow/contrib/makefile/build_all_ios.sh生成适配iOS的TensorFlow.framework。 - 替换掉iOS项目里旧的框架文件,重新编译运行。
方案2:生成兼容旧版本的模型
如果不想编译框架,可以调整Python端的模型生成逻辑,避免生成带有dilations属性的节点:
- 构建Inception v3模型时,确保所有
Conv2D层都没有使用dilation_rate参数。 - 冻结模型时,加上
--strip_unused_nodes参数,同时明确指定输入输出节点,移除可能导致兼容问题的冗余属性。
验证小技巧
修改后可以做这两步验证:
- 确认Python端TensorFlow版本和iOS端框架版本完全一致。
- 用TensorBoard或者
tensorflow.tools.graph_transforms工具检查冻结后的模型,确保没有旧框架不支持的属性。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

