You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让TensorFlow Serving保留单输出的自定义命名返回对象格式

解决TensorFlow Serving单输出返回命名对象的问题

遇到单输出场景下TensorFlow Serving自动剥离输出名称、返回数组而非命名对象的问题,核心是要让模型的输出结构保持字典形式,而非单个张量,具体可通过以下两种方式实现:

1. 直接在Keras模型中返回字典输出

修改模型的输出逻辑,把单个输出张量包装成键值对字典。比如原本模型最后返回单个张量:

def call(self, inputs):
    # ... 模型计算逻辑
    return output_tensor

改成返回字典:

def call(self, inputs):
    # ... 模型计算逻辑
    return {"自定义输出名": output_tensor}

这样导出的模型会默认把字典的键作为输出名称,TensorFlow Serving识别后会返回带命名的对象结构。

2. 自定义签名函数导出SavedModel

如果不想修改模型结构,可以在导出模型时通过自定义签名函数,强制把输出包装成字典:

import tensorflow as tf
from tensorflow.keras import models

# 假设你已经有训练好的单输出模型
model = models.load_model('./your_trained_model')

# 定义服务签名函数,指定输入输出结构
@tf.function(input_signature=[tf.TensorSpec(shape=(None, 输入维度), dtype=tf.float32, name='input')])
def serving_signature(inputs):
    outputs = model(inputs)
    # 包装成字典,键就是你想要的输出名称
    return {"自定义输出名": outputs}

# 保存模型时指定自定义签名
tf.saved_model.save(model, './saved_for_serving', signatures={'serving_default': serving_signature})

验证方法

导出模型后,用saved_model_cli查看签名:

saved_model_cli show --dir ./saved_for_serving --all

确认输出部分显示为字典结构(比如Outputs: "自定义输出名"),部署后请求TensorFlow Serving,返回的JSON就会是带命名的对象列表,格式类似:

{"predictions": [{"自定义输出名": [1.23, 4.56, ...]}]}

内容的提问来源于stack exchange,提问作者Mehran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 14:25:20