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

TFX流水线Evaluator组件无法获取Fare标签,如何配置以计算R2得分?

解决TFX Evaluator无法获取"fare"标签的问题

核心问题分析

当前模型仅导出了服务用的serving_default签名,且预测结果使用通用的predictions键,Evaluator无法将其与数据中的fare标签对应;同时缺少专门用于评估的签名,导致Evaluator无法正确关联标签与预测值。

修改步骤

1. 调整预测输出键与标签列名一致

将serving_step的返回键从predictions改为fare,让预测结果的键直接匹配标签列名:

@tf.function(input_signature=[
    tf.TensorSpec(shape=(None, 1), dtype=tf.float32, name="trip_miles"),
    tf.TensorSpec(shape=(None, 1), dtype=tf.int64, name="trip_seconds"),
    tf.TensorSpec(shape=(None, 1), dtype=tf.int64, name="trip_start_hour"),
    tf.TensorSpec(shape=(None, 1), dtype=tf.int64, name="company_size_encoded"),
    tf.TensorSpec(shape=(None, 1), dtype=tf.int64, name="pickup_community_area"),
    tf.TensorSpec(shape=(None, 1), dtype=tf.int64, name="dropoff_community_area"),
])
def serving_step(trip_miles, trip_seconds, trip_start_hour, company_size_encoded,
                 pickup_community_area, dropoff_community_area):
    inputs = [
        trip_miles, trip_seconds, trip_start_hour, 
        company_size_encoded, pickup_community_area, dropoff_community_area
    ]
    predictions = model(inputs, training=False)
    # 将返回键改为与标签列名一致的"fare"
    return {"fare": predictions}

2. 添加评估专用签名

新增eval_step函数,创建评估签名,让Evaluator能明确获取标签与预测值:

@tf.function(input_signature=[
    tf.TensorSpec(shape=(None, 1), dtype=tf.float32, name="trip_miles"),
    tf.TensorSpec(shape=(None, 1), dtype=tf.int64, name="trip_seconds"),
    tf.TensorSpec(shape=(None, 1), dtype=tf.int64, name="trip_start_hour"),
    tf.TensorSpec(shape=(None, 1), dtype=tf.int64, name="company_size_encoded"),
    tf.TensorSpec(shape=(None, 1), dtype=tf.int64, name="pickup_community_area"),
    tf.TensorSpec(shape=(None, 1), dtype=tf.int64, name="dropoff_community_area"),
    # 加入标签列的TensorSpec
    tf.TensorSpec(shape=(None, 1), dtype=tf.float32, name="fare"),
])
def eval_step(trip_miles, trip_seconds, trip_start_hour, company_size_encoded,
              pickup_community_area, dropoff_community_area, fare):
    inputs = [
        trip_miles, trip_seconds, trip_start_hour, 
        company_size_encoded, pickup_community_area, dropoff_community_area
    ]
    predictions = model(inputs, training=False)
    # 返回预测值和真实标签,方便Evaluator计算指标
    return {"fare": predictions, "labels": fare}

3. 更新签名字典并保存模型

将评估签名加入到signatures中,确保模型导出时包含服务和评估两种签名:

signatures = {
    "serving_default": serving_step.get_concrete_function(),
    "eval_default": eval_step.get_concrete_function(),  # 添加评估签名
}

# 保存模型
tf.keras.models.save_model(
    model, 
    fn_args.serving_model_dir,
    signatures=signatures
)

4. 配置Evaluator组件指定标签

在定义Evaluator时,明确指定标签键为fare,并配置R2得分的评估指标:

from tfx.components import Evaluator
from tfx.proto import evaluator_pb2

evaluator = Evaluator(
    examples=example_gen.outputs['examples'],
    model=trainer.outputs['model'],
    eval_config=evaluator_pb2.EvalConfig(
        model_specs=[evaluator_pb2.ModelSpec(label_key='fare')],
        metrics_specs=[
            evaluator_pb2.MetricsSpec(
                metrics=[
                    evaluator_pb2.MetricConfig(class_name='R2Score',
                                              config={'name': 'r2_score'})
                ]
            )
        ]
    )
)

原理说明

  • 调整预测输出键为fare,让Evaluator能直接将预测结果与数据中的标签列匹配;
  • 添加评估签名后,Evaluator可以通过该签名明确获取真实标签和预测值,避免标签匹配错误;
  • 在Evaluator配置中指定label_key='fare',进一步明确评估时使用的标签列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 12:51:04