我正在使用TensorFlow服务提供初始模型。我是在Azure Kubernetes上执行此操作的,因此,不是通过更标准且记录良好的Google云。
无论如何,这都是可行的,但是令我困惑的是,预测作为一组浮点数又回来了。这些值映射到训练过程中传递的原始标签,但是如果没有原始标签文件,就无法对每种可能性所涉及的内容进行反向工程。
在我开始任职之前,我只是使用一个推理脚本,然后将其与我在训练时与冻结模型一起存储的标签文件进行交叉引用。但是通过服务这是行不通的。
所以我的问题是如何获取与模型关联的标签,理想情况下如何获得返回标签和概率的预测?
答案 0 :(得分:1)
我确信有一种方法可以使用各种TF ops直接为此返回映射,但是我设法至少将标签打包到模型中,并将其连同概率一起返回到预测中。
我所做的是从标签数组创建一个tf.constant,然后将该张量添加到tf.saved_model.signature_def_utils.build_signature_def中的输出张量数组中
现在,当我得到预测时,我得到了float数组以及标签数组,我可以在客户端将它们进行匹配。
答案 1 :(得分:0)
我尝试了@ 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
}
]