使用TensorFlow Serving部署ResNet50模型时遇Conv2D dilations属性错误
解决TensorFlow Serving启动时Conv2D 'dilations'属性错误
这个问题我之前碰到过好几次,核心原因其实很明确:你用来生成SavedModel的TensorFlow版本,和运行TensorFlow Serving的版本不匹配。
具体来说,dilations是TensorFlow在较新版本中给Conv2D算子新增的属性,但你当前使用的TensorFlow Serving版本偏旧,还没有支持这个属性,所以在解析模型计算图的时候就抛出了错误。下面是具体的解决步骤:
1. 优先对齐TensorFlow和Serving的版本
这是最直接也最稳妥的方案:
- 先确认你导出模型时用的TensorFlow版本:
import tensorflow as tf print(tf.__version__) - 然后安装/使用完全相同版本的TensorFlow Serving。比如你用的是TF 1.13.1,用Docker部署的话就拉取对应镜像:
如果是本地安装的Serving,也请下载对应版本的安装包。docker pull tensorflow/serving:1.13.1
2. 重新导出兼容旧版本的模型
如果暂时没法升级TensorFlow Serving,可以尝试用旧版本的TensorFlow重新导出模型,或者在导出时做兼容处理:
- 如果你是用TensorFlow 2.x导出的模型,要适配TF 1.x的Serving,可以在导出代码开头添加:
import tensorflow as tf tf.compat.v1.disable_v2_behavior() - 另外,检查你的导出代码里有没有显式给
Conv2D设置dilations参数——其实默认值就是[1,1,1,1],旧版本的Conv2D不需要这个参数,去掉之后再导出模型,应该就能被旧版本的Serving识别了。
3. 验证模型的兼容性
导出模型后,可以用saved_model_cli工具检查模型的节点属性,确认没有Serving不支持的内容:
saved_model_cli show --dir /path/to/your/saved_model --all
查看输出里的Conv2D节点,如果还有dilations属性,说明导出时的版本还是太高,需要调整。
内容的提问来源于stack exchange,提问作者Mehul Jain
相关产品推荐
相关产品推荐

