【发布时间】:2018-09-29 21:51:17
【问题描述】:
尝试在 tensorflow-serving 中为特定模型调用 predict 时遇到一个奇怪的错误:
grpc.framework.interfaces.face.face.AbortionError:
AbortionError(code=StatusCode.INVALID_ARGUMENT, details="ConcatOp : Expected
concatenating dimensions in the range [-1, 1), but got 1
[[Node: lys_conc/concat = ConcatV2[N=4, T=DT_FLOAT, Tidx=DT_INT32, _device="/job:localhost/replica:0/task:0/device:CPU:0"](_arg_lys_in_0_4, _arg_lyb_in_0_0, flatten_1/Reshape, batch_normalization_2/batchnorm_1/add_1, lyt_conc/concat/axis)]]")
背景:我设置了一个 tensorflow-serving 容器,并成功地将一些模型移入并检查了我可以获得客户端响应(我可以)。
根据in this post 的回答,我通过在 keras 中构建和训练模型,然后将它们导出并加载到 tf-serving 来制作模型。
它失败的节点旨在连接 4 个源(2 个输入,一个扁平嵌入和一个 dropout 的输出)。导出过程已经去除了 dropout - 这就是为什么我们在那里看到(之前的)batchnorm。
其他要点:
- 我有另一个模型,它只有两个输入(一个嵌入 + 一个 dropout)的类似 concat,它在同一个 tf 服务实例上运行良好。
- 在 Keras 中,我没有为 concat 指定轴,但我可以在图形 def(导出之前 - 见下文)中看到它默认(正确)为 1。
- 我注意到错误中引用的轴变量不是属于此连续层的变量(lyt 而不是 lys)。但是被引用的也应该设置为 1。我想知道这是否与错误有关,或者只是在导出过程中发生了一些小优化。
相关图定义:
node {
name: "lys_conc/concat/axis"
op: "Const"
attr {
key: "dtype"
value {
type: DT_INT32
}
}
attr {
key: "value"
value {
tensor {
dtype: DT_INT32
tensor_shape {
}
int_val: 1
}
}
}
}
node {
name: "lys_conc/concat"
op: "ConcatV2"
input: "lys_in"
input: "lyb_in"
input: "flatten_1/Reshape"
input: "dropout_2/Identity"
input: "lys_conc/concat/axis"
attr {
key: "N"
value {
i: 4
}
}
attr {
key: "T"
value {
type: DT_FLOAT
}
}
attr {
key: "Tidx"
value {
type: DT_INT32
}
}
}
对调试的任何帮助或建议表示赞赏!
【问题讨论】:
标签: python tensorflow keras tensorflow-serving