معیارهای صادرات پست
همانطور که از نام آن پیداست، این معیاری است که پس از صادرات، قبل از ارزیابی اضافه می شود.
TFMA با چندین معیار ارزیابی از پیش تعریف شده، مانند example_count، auc، confusion_matrix_at_thresholds، precision_recall_at_k، mse، mae، بسته بندی شده است. (لیست کامل اینجاست .)
اگر معیارهای موجود مرتبط با مورد استفاده خود را پیدا نکردید، یا میخواهید معیاری را سفارشی کنید، میتوانید معیارهای سفارشی خود را تعریف کنید. برای جزئیات بیشتر بخوانید!
اضافه کردن معیارهای سفارشی در TFMA
تعریف معیارهای سفارشی در TFMA 1.x
گسترش کلاس پایه Abstract
برای افزودن یک متریک سفارشی، یک کلاس جدید با گسترش کلاس انتزاعی _PostExportMetric ایجاد کنید و سازنده آن را تعریف کنید و متدهای انتزاعی / اجرا نشده را پیاده سازی کنید.
سازنده را تعریف کنید
در سازنده، تمام اطلاعات مرتبط مانند label_key، prediction_key، example_weight_key، metric_tag و غیره را که برای متریک سفارشی لازم است، به عنوان پارامتر در نظر بگیرید.
پیاده سازی چکیده / روش های اجرا نشده
این روش را برای بررسی سازگاری متریک با مدل مورد ارزیابی اجرا کنید، یعنی بررسی کنید که آیا تمام ویژگی های مورد نیاز، برچسب مورد انتظار و کلید پیش بینی در مدل در نوع داده مناسب وجود دارد یا خیر. سه استدلال می گیرد:
- features_dict
- پیش بینی_دیکت
- labels_dict
این دیکشنری ها حاوی ارجاعاتی به Tensor برای مدل هستند.
این روش را برای ارائه عملیات های متریک (مقدار و عملیات به روز رسانی) برای محاسبه متریک اجرا کنید. مشابه متد check_compatibility، سه آرگومان نیز میگیرد:
- features_dict
- پیش بینی_دیکت
- labels_dict
منطق محاسبات متریک خود را با استفاده از این ارجاعات به Tensors برای مدل تعریف کنید.
populate_stats_and_pop و populate_plots_and_pop
این معیار را برای تبدیل نتایج متریک خام به فرمت اولیه MetricValue و PlotData پیاده کنید. این به سه استدلال نیاز دارد:
- slice_key: نام متریک برش به آن تعلق دارد.
- Combined_metrics: فرهنگ لغت حاوی نتایج خام.
- output_metrics: فرهنگ لغت خروجی حاوی متریک در قالب پروتو دلخواه.
@_export('my_metric')
class _MyMetric(_PostExportMetric):
def __init__(self,
target_prediction_keys: Optional[List[Text]] = None,
labels_key: Optional[Text] = None,
metric_tag: Optional[Text] = None):
self._target_prediction_keys = target_prediction_keys
self._label_keys = label_keys
self._metric_tag = metric_tag
self._metric_key = 'my_metric_key'
def check_compatibility(self, features_dict:types.TensorTypeMaybeDict,
predictions_dict: types.TensorTypeMaybeDict,
labels_dict: types.TensorTypeMaybeDict) -> None:
# Add compatibility check needed for the metric here.
def get_metric_ops(self, features_dict: types.TensorTypeMaybeDict,
predictions_dict: types.TensorTypeMaybeDict,
labels_dict: types.TensorTypeMaybeDict
) -> Dict[bytes, Tuple[types.TensorType,
types.TensorType]]:
# Metric computation logic here.
# Define value and update ops.
value_op = compute_metric_value(...)
update_op = create_update_op(... )
return {self._metric_key: (value_op, update_op)}
def populate_stats_and_pop(
self, slice_key: slicer.SliceKeyType, combined_metrics: Dict[Text, Any],
output_metrics: Dict[Text, metrics_pb2.MetricValue]) -> None:
# Parses the metric and converts it into required metric format.
metric_result = combined_metrics[self._metric_key]
output_metrics[self._metric_key].double_value.value = metric_result
استفاده
# Custom metric callback
custom_metric_callback = my_metric(
labels_key='label',
target_prediction_keys=['prediction'])
fairness_indicators_callback =
post_export_metrics.fairness_indicators(
thresholds=[0.1, 0.3, 0.5, 0.7, 0.9], labels_key=label)
add_metrics_callbacks = [custom_metric_callback,
fairness_indicators_callback]
eval_shared_model = tfma.default_eval_shared_model(
eval_saved_model_path=eval_saved_model_path,
add_metrics_callbacks=add_metrics_callbacks)
eval_config = tfma.EvalConfig(...)
# Run evaluation
tfma.run_model_analysis(
eval_config=eval_config, eval_shared_model=eval_shared_model)