بررسی اجمالی
TFMA پشتیبانی از اعتبار مدل را با راه اندازی آستانه ارزش و آستانه تغییر بر اساس معیارهای حمایت .
پیکربندی
GenericValueThreshold
آستانه ارزش برای دروازهسازی مدل کاندید با بررسی اینکه آیا معیارهای مربوطه بزرگتر از یک کران پایین و/یا کوچکتر از یک کران بالا هستند مفید است. کاربر می تواند یک یا هر دو مقدار low_bound و upper_bound را تنظیم کند. اگر تنظیم نشده باشد، low_bound به طور پیشفرض به بینهایت منفی است و اگر تنظیم نشده باشد، upper_bound به صورت پیشفرض به بینهایت است.
import tensorflow_model_analysis as tfma
lower_bound = tfma.GenericValueThreshold(lower_bound={'value':0})
upper_bound = tfma.GenericValueThreshold(upper_bound={'value':1})
lower_upper_bound = tfma.GenericValueThreshold(lower_bound={'value':0},
upper_bound={'value':1))
GenericChangeThreshold
آستانه تغییر برای دروازهسازی مدل کاندید با بررسی اینکه آیا متریک مربوطه بزرگتر/کوچکتر از یک مدل پایه است مفید است. دو روش برای اندازه گیری تغییر وجود دارد: تغییر مطلق و تغییر نسبی. Aboslute تغییر به عنوان اختلاف ارزش بین معیارهای مدل نامزد و پایه محاسبه، یعنی، v_c - v_b که در آن v_c نشان دهنده نامزد ارزش متریک و v_b نشان دهنده ارزش پایه. ارزش نسبی تفاوت نسبی بین متریک نامزد و پایه، یعنی، v_c / v_b است. آستانه مطلق و نسبی می توانند با هر دو معیار در مدل دروازه وجود داشته باشند. علاوه بر تنظیم مقادیر آستانه، کاربر همچنین باید MetricDirection را پیکربندی کند. برای معیارهایی با مقادیر مطلوب بالاتر (مثلا AUC)، جهت را روی HIGHER_IS_BETTER تنظیم کنید، برای معیارهایی با مقادیر مطلوب کمتر (مثلاً ضرر)، جهت را روی LOWER_IS_BETTER تنظیم کنید. آستانه تغییر نیاز به یک مدل پایه دارد که همراه با مدل کاندید ارزیابی شود. مشاهده راهنمای شروع به کار برای مثال.
import tensorflow_model_analysis as tfma
absolute_higher_is_better = tfma.GenericChangeThreshold(absolute={'value':1},
direction=tfma.MetricDirection.HIGHER_IS_BETTER)
absolute_lower_is_better = tfma.GenericChangeThreshold(absolute={'value':1},
direction=tfma.MetricDirection.LOWER_IS_BETTER)
relative_higher_is_better = tfma.GenericChangeThreshold(relative={'value':1},
direction=tfma.MetricDirection.HIGHER_IS_BETTER)
relative_lower_is_better = tfma.GenericChangeThreshold(relative={'value':1},
direction=tfma.MetricDirection.LOWER_IS_BETTER)
absolute_and_relative = tfma.GenericChangeThreshold(relative={'value':1},
absolute={'value':0.2},
direction=tfma.MetricDirection.LOWER_IS_BETTER)
کنار هم قرار دادن چیزها
مثال زیر آستانه های مقدار و تغییر را ترکیب می کند:
import tensorflow_model_analysis as tfma
lower_bound = tfma.GenericValueThreshold(lower_bound={'value':0.7})
relative_higher_is_better =
tfma.GenericChangeThreshold(relative={'value':1.01},
direction=tfma.MetricDirection.HIGHER_IS_BETTER)
auc_threshold = tfma.MetricThreshold(value_threshold=lower_bound,
change_threshold=relative_higher_is_better)
نوشتن پیکربندی در قالب پروتو ممکن است خواناتر باشد:
from google.protobuf import text_format
auc_threshold = text_format.Parse("""
value_threshold { lower_bound { value: 0.6 } }
change_threshold { relative { value: 1.01 } }
""", tfma.MetricThreshold())
MetricThreshold را میتوان روی معیارهای زمان آموزش مدل (هر مدل EvalSavedModel یا مدل ذخیرهشده Keras) و معیارهای Post Training (تعریف شده در پیکربندی TFMA) تنظیم کرد. برای معیارهای زمان آموزش، آستانه ها در tfma.MetricsSpec مشخص شده اند:
metrics_spec = tfma.MetricSpec(thresholds={'auc': auc_threshold})
برای معیارهای پس از آموزش، آستانه ها مستقیماً در tfma تعریف می شوند.MetricConfig:
metric_config = tfma.MetricConfig(class_name='TotalWeightedExample',
threshold=lower_bound)
در اینجا یک مثال به همراه سایر تنظیمات در EvalConfig آورده شده است:
# Run in a Jupyter Notebook.
from google.protobuf import text_format
eval_config = text_format.Parse("""
model_specs {
# This assumes a serving model with a "serving_default" signature.
label_key: "label"
example_weight_key: "weight"
}
metrics_spec {
# Training Time metric thresholds
thresholds {
key: "auc"
value: {
value_threshold {
lower_bound { value: 0.7 }
}
change_threshold {
direction: HIGHER_IS_BETTER
absolute { value: -1e-10 }
}
}
}
# Post Training metrics and their thesholds.
metrics {
# This assumes a binary classification model.
class_name: "AUC"
threshold {
value_threshold {
lower_bound { value: 0 }
}
}
}
}
slicing_specs {}
slicing_specs {
feature_keys: ["age"]
}
""", tfma.EvalConfig())
eval_shared_models = [
tfma.default_eval_shared_model(
model_name=tfma.CANDIDATE_KEY,
eval_saved_model_path='/path/to/saved/candiate/model',
eval_config=eval_config),
tfma.default_eval_shared_model(
model_name=tfma.BASELINE_KEY,
eval_saved_model_path='/path/to/saved/baseline/model',
eval_config=eval_config),
]
eval_result = tfma.run_model_analysis(
eval_shared_models,
eval_config=eval_config,
# This assumes your data is a TFRecords file containing records in the
# tf.train.Example format.
data_location="/path/to/file/containing/tfrecords",
output_path="/path/for/output")
tfma.view.render_slicing_metrics(eval_result)
tfma.load_validation_result(output_path)
خروجی
علاوه بر خروجی فایل متریک توسط ارزیاب، هنگامی که از اعتبارسنجی استفاده می شود، یک فایل "اعتبارسنجی" اضافی نیز خروجی می شود. فرمت محموله است ValidationResult . خروجی «validation_ok» را روی True تنظیم میکند که هیچ مشکلی وجود نداشته باشد. هنگامی که خرابی وجود دارد، اطلاعاتی در مورد معیارهای مرتبط، آستانه ها و مقادیر متریک مشاهده شده ارائه می شود. مثال زیر مثالی است که در آن "weighted_examle_count" یک آستانه مقدار را شکست می دهد (1.5 کوچکتر از 1.0 نیست، بنابراین شکست):
validation_ok: False
metric_validations_per_slice {
failures {
metric_key {
name: "weighted_example_count"
model_name: "candidate"
}
metric_threshold {
value_threshold {
upper_bound { value: 1.0 }
}
}
metric_value {
double_value { value: 1.5 }
}
}
}