在尝试为tensorflow服务中的特定模型调用预测时,我遇到了一个奇怪的错误:
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服务容器,并成功移动了一些模型并检查我可以得到客户端响应(我可以)。
我根据in this post的答案,通过在keras中构建和训练它们然后将它们导出并加载到tf-serving中来制作我的模型。
它失败的节点意味着连接4个源(2个输入,1个扁平嵌入和1个丢失输出)。退出已经被出口过程剥离了 - 这就是为什么我们在那里看到(前面)的蝙蝠侠。
其他要点:
相关图形def:
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
}
}
}
任何帮助或建议调试赞赏!
首先,将张量流服务和数据输入格式中的潜在问题与预测本身分开可能是一个好主意。很可能存在输入维度问题,这样当嵌入连接时,就会抛出错误。
尝试从导出的模型中创建张量流预测器对象,并查看是否可以从预测中获得有效输出
from tensorflow.contrib import predictor
predictor_obj = predictor.from_saved_model(export_dir)
y = predictor_obj(inputs_to_model)
如果运行,那么您的输入应具有正确的维度。确保您尝试批量输入以及单个输入)
如果失败,您可能需要重新整形输入