我正在使用TensorFlow服务为初始模型服务。我是在Azure Kubernetes上这么做的,所以不是通过更标准和更有文档的google云。
在任何情况下,这都是可行的,不过,我感到困惑的一点是,预测结果将作为一组浮点数返回。这些值映射到培训期间传入的原始标签,但是如果没有原始标签文件,就无法逆转每个概率所涉及的信息。
在我开始服务之前,我只是使用了一个推理脚本,然后在培训时将该文件与冻结的模型一起存储,然后交叉引用标签文件。但是如果服务的话,这是行不通的。
因此,我的问题是,如何获得与模型相关的标签,以及理想情况下如何获得返回标签和概率的预测?
发布于 2019-03-08 02:41:31
我尝试了@user1371314所建议的方法,但我无法让它发挥作用。另一个可行的解决方案是创建一个张量(而不是一个常量),并在保存模型时只使用输出层的第一个元素来映射它。当你把它放在一起时,它看起来是这样的:
# get labels names and create a tensor from it
....
label_names_tensor = tf.convert_to_tensor(label_names)
# save the model and map the labels to the output layer
tf.saved_model.simple_save(
sess,
"./saved_models",
inputs={'image': model.input},
outputs={'label' : label_names_tensor,'prediction': model.output[0]})
当您在服务您的模型之后进行预测时,您将得到以下结果:
{
"predictions": [
{
"label": "label-name",
"prediction": 0.114107
},
{
"label": "label-name",
"prediction": 0.288598
},
{
"label": "label-name",
"prediction": 0.17436
},
{
"label": "label-name",
"prediction": 0.186366
},
{
"label": "label-name",
"prediction": 0.236568
}
]
发布于 2018-12-02 15:47:19
我确信有一种方法可以使用各种TF操作直接返回映射,但是我至少成功地将标签打包到模型中,并在预测中返回它们以及概率。
我所做的是从标签数组中创建一个tf.constant,然后将该张量添加到tf.saved_model.signature_def_utils.build_signature_def中的输出张量数组中。
现在,当我得到一个预测,我得到浮点数组和一个标签数组,我可以在客户端匹配它们。
https://stackoverflow.com/questions/53530354
复制