Tensorflow服务预测映射到标签

问题描述 投票:1回答:2

我正在使用TensorFlow服务提供初始模型。我在Azure Kubernetes上这样做,所以不是通过更标准和记录良好的谷歌云。

在任何情况下,这都是有效的,但我感到困惑的是预测作为一个浮点数回来。这些值映射到训练期间传入的原始标签,但如果没有原始标签文件,则无法对每个概率所涉及的内容进行逆向工程。

在我开始服务之前,我只是使用推理脚本,然后交叉引用标签文件,我在训练时将其与冻结模型一起存储。但服务这不起作用。

所以我的问题是如何获得与模型相关的标签,并理想地获得预测以返回标签和概率?

tensorflow tensorflow-serving
2个回答
1
投票

我尝试了@ 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
        }
    ]

1
投票

我确信有一种方法可以使用各种TF操作直接为此返回映射,但是我已经设法将标签至少打包到模型中并将其与概率一起返回到预测中。

我所做的是从labels数组创建一个tf.constant,然后将该张量添加到tf.saved_model.signature_def_utils.build_signature_def中的输出张量数组中

现在当我得到一个预测时,我得到了浮点数组和一个标签数组,我可以在客户端匹配它们。

© www.soinside.com 2019 - 2024. All rights reserved.