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

TFX Evaluator组件无法准备评估输入问题求助

问题分析与解决方案

错误本质

评估阶段模型期望输入feature1~feature4,但经过预处理后仅提供了*_mean类特征,导致输入特征与模型需求不匹配,进而触发输入准备失败的错误。核心矛盾在于评估时的特征处理逻辑、模型签名配置与无监督评估的需求不匹配。


具体解决方案

1. 修正Transform预处理函数

确保Transform组件的预处理函数只保留模型需要的feature1~feature4,移除*_mean类特征(这些仅用于追踪,无需传入模型):

def preprocessing_fn(inputs):
    # 仅保留模型输入特征
    outputs = {
        'feature1': inputs['feature1'],
        'feature2': inputs['feature2'],
        'feature3': inputs['feature3'],
        'feature4': inputs['feature4']
    }
    return outputs

2. 调整评估签名函数

无监督评估需要同时保留模型输入特征和*_mean标签用于追踪,因此修改_get_transform_features_signature,分离模型输入与标签特征:

def _get_transform_features_signature(model, tf_transform_output):
    model.tft_layer_eval = tf_transform_output.transform_features_layer()

    @tf.function(input_signature=[
      tf.TensorSpec(shape=[None], dtype=tf.string, name='examples')
    ])
    def transform_features_fn(serialized_tf_example):
        raw_feature_spec = tf_transform_output.raw_feature_spec()
        raw_features = tf.io.parse_example(serialized_tf_example, raw_feature_spec)
        
        # 分离模型输入特征(非_mean结尾)和标签特征(_mean结尾)
        model_inputs = {k: v for k, v in raw_features.items() if not k.endswith('_mean')}
        transformed_inputs = model.tft_layer_eval(model_inputs)
        
        # 追加标签特征到输出,供Evaluator追踪使用
        transformed_inputs.update({k: v for k, v in raw_features.items() if k.endswith('_mean')})
        logging.info('eval_transformed_features = %s', transformed_inputs)
        return transformed_inputs

    return transform_features_fn

3. 修正EvalConfig配置

适配无监督评估场景,调整签名与指标配置:

eval_config = tfma.EvalConfig(
    model_specs=[
        tfma.ModelSpec(
            # 使用专门的评估签名,而非服务签名
            signature_name='transform_features',
            # 保留label_key用于追踪需求
            label_key='feature1_mean',
            # 评估签名已包含预处理逻辑,无需重复指定
            preprocessing_function_names=None
        )
    ],
    metrics_specs=[
        tfma.MetricsSpec(
            metrics=[
                tfma.MetricConfig(class_name='ExampleCount'),
                # 可选:添加自编码器专属评估指标(如输入与输出的MSE)
                tfma.MetricConfig(class_name='MeanSquaredError', label_key='feature1', prediction_key='outputs')
            ]
        )
    ],
    slicing_specs=[
        tfma.SlicingSpec()
    ])

4. 确认模型输入签名正确性

确保模型输入层明确对应feature1~feature4:

def build_model():
    inputs = {
        'feature1': tf.keras.layers.Input(shape=(15,1), name='feature1'),
        'feature2': tf.keras.layers.Input(shape=(15,1), name='feature2'),
        'feature3': tf.keras.layers.Input(shape=(15,1), name='feature3'),
        'feature4': tf.keras.layers.Input(shape=(15,1), name='feature4'),
    }
    # 拼接输入特征
    concatenated = tf.keras.layers.Concatenate()([v for v in inputs.values()])
    # 自编码器结构(示例)
    encoder = tf.keras.layers.Dense(32, activation='relu')(concatenated)
    decoder = tf.keras.layers.Dense(60, activation='sigmoid')(encoder)
    # 重塑回原输入维度
    output = tf.keras.layers.Reshape((4,15,1))(decoder)
    
    model = tf.keras.Model(inputs=inputs, outputs={'outputs': output})
    model.compile(optimizer='adam', loss='mse')
    return model

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:49:52