مؤلفه خط لوله ModelValidator TFX (منسوخ شده)

ModelValidator برای بررسی اینکه آیا یک مدل به اندازه کافی خوب است که در تولید استفاده شود، استفاده شد. ما هنوز فکر می‌کنیم که اعتبارسنجی مفید است، اما از آنجایی که مدل Evaluator قبلاً تمام معیارهایی را که می‌خواهید اعتبارسنجی کنید محاسبه کرده است، تصمیم گرفتیم این دو را با هم ترکیب کنیم تا مجبور نباشید محاسبات را تکرار کنید.

در حالی که ما ModelValidator را منسوخ کرده‌ایم و استفاده از آن را توصیه نمی‌کنیم، اگر نیاز به حفظ یک مؤلفه ModelValidator موجود دارید، پیکربندی نمونه به شرح زیر است:

import tfx
import tensorflow_model_analysis as tfma
from tfx.components.model_validator.component import ModelValidator

...

model_validator = ModelValidator(
      examples=example_gen.outputs['output_data'],
      model=trainer.outputs['model'])

برای کسانی که می خواهند پیکربندی را به Evaluator منتقل کنند، پیکربندی مشابه برای Evaluator به صورت زیر است:

from tfx import components
import tensorflow_model_analysis as tfma

...

eval_config = tfma.EvalConfig(
    model_specs=[
        # This assumes a serving model with signature 'serving_default'. If
        # using estimator based EvalSavedModel, add signature_name: 'eval' and
        # remove the label_key.
        tfma.ModelSpec(label_key='<label_key>')
    ],
    metrics_specs=[
        tfma.MetricsSpec(
            # The metrics added here are in addition to those saved with the
            # model (assuming either a keras model or EvalSavedModel is used).
            # Any metrics added into the saved model (for example using
            # model.compile(..., metrics=[...]), etc) will be computed
            # automatically.
            metrics=[
                tfma.MetricConfig(class_name='ExampleCount'),
                tfma.MetricConfig(
                    class_name='BinaryAccuracy',
                    threshold=tfma.MetricThreshold(
                        value_threshold=tfma.GenericValueThreshold(
                            lower_bound={'value': 0.5}),
                        change_threshold=tfma.GenericChangeThreshold(
                            direction=tfma.MetricDirection.HIGHER_IS_BETTER,
                            absolute={'value': -1e-10})))
            ]
        )
    ],
    slicing_specs=[
        # An empty slice spec means the overall slice, i.e. the whole dataset.
        tfma.SlicingSpec(),
        # Data can be sliced along a feature column. In this case, data is
        # sliced along feature column trip_start_hour.
        tfma.SlicingSpec(feature_keys=['trip_start_hour'])
    ])

model_resolver = Resolver(
      strategy_class=latest_blessed_model_resolver.LatestBlessedModelResolver,
      model=Channel(type=Model),
      model_blessing=Channel(type=ModelBlessing)
).with_id('latest_blessed_model_resolver')

model_analyzer = components.Evaluator(
      examples=examples_gen.outputs['examples'],
      model=trainer.outputs['model'],
      baseline_model=model_resolver.outputs['model'],
      # Change threshold will be ignored if there is no baseline (first run).
      eval_config=eval_config)