ملخص
يدعم TFMA المقاييس والمخططات التالية:
- مقاييس keras القياسية (
tf.keras.metrics.*
)- لاحظ أنك لا تحتاج إلى نموذج keras لاستخدام مقاييس keras. يتم حساب المقاييس خارج الرسم البياني في الحزمة باستخدام فئات المقاييس مباشرة.
مقاييس ومخططات TFMA القياسية (
tfma.metrics.*
)مقاييس keras المخصصة (المقاييس المشتقة من
tf.keras.metrics.Metric
)مقاييس TFMA المخصصة (المقاييس المشتقة من
tfma.metrics.Metric
) باستخدام مجمعات الشعاع المخصصة أو المقاييس المشتقة من مقاييس أخرى).
يوفر TFMA أيضًا دعمًا مدمجًا لتحويل مقاييس التصنيف الثنائية للاستخدام مع مشكلات متعددة الفئات/متعددة الملصقات:
- الثنائية على أساس معرف الفئة، أعلى K، وما إلى ذلك.
- المقاييس المجمعة بناءً على المتوسط الجزئي، والمتوسط الكلي، وما إلى ذلك.
يوفر TFMA أيضًا دعمًا مدمجًا للمقاييس القائمة على الاستعلام/التصنيف حيث يتم تجميع الأمثلة بواسطة مفتاح استعلام تلقائيًا في المسار.
يوجد مجتمعة أكثر من 50 مقياسًا ومخططًا قياسيًا متاحًا لمجموعة متنوعة من المشكلات بما في ذلك الانحدار والتصنيف الثنائي والتصنيف متعدد الفئات/متعدد العلامات والتصنيف وما إلى ذلك.
إعدادات
هناك طريقتان لتكوين المقاييس في TFMA: (1) باستخدام tfma.MetricsSpec
أو (2) عن طريق إنشاء مثيلات لفئات tf.keras.metrics.*
و/أو tfma.metrics.*
في python واستخدام tfma.metrics.specs_from_metrics
لتحويلها إلى قائمة tfma.MetricsSpec
.
تصف الأقسام التالية أمثلة على التكوينات لأنواع مختلفة من مشكلات التعلم الآلي.
مقاييس الانحدار
ما يلي هو مثال لإعداد التكوين لمشكلة الانحدار. راجع tf.keras.metrics.*
و tfma.metrics.*
للتعرف على المقاييس الإضافية المحتملة المدعومة.
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
metrics { class_name: "ExampleCount" }
metrics { class_name: "MeanSquaredError" }
metrics { class_name: "Accuracy" }
metrics { class_name: "MeanLabel" }
metrics { class_name: "MeanPrediction" }
metrics { class_name: "Calibration" }
metrics {
class_name: "CalibrationPlot"
config: '"min_value": 0, "max_value": 10'
}
}
""", tfma.EvalConfig()).metrics_specs
يمكن إنشاء هذا الإعداد نفسه باستخدام كود بايثون التالي:
metrics = [
tfma.metrics.ExampleCount(name='example_count'),
tf.keras.metrics.MeanSquaredError(name='mse'),
tf.keras.metrics.Accuracy(name='accuracy'),
tfma.metrics.MeanLabel(name='mean_label'),
tfma.metrics.MeanPrediction(name='mean_prediction'),
tfma.metrics.Calibration(name='calibration'),
tfma.metrics.CalibrationPlot(
name='calibration', min_value=0, max_value=10)
]
metrics_specs = tfma.metrics.specs_from_metrics(metrics)
لاحظ أن هذا الإعداد متاح أيضًا عن طريق استدعاء tfma.metrics.default_regression_specs
.
مقاييس التصنيف الثنائي
ما يلي هو مثال لإعداد التكوين لمشكلة التصنيف الثنائي. راجع tf.keras.metrics.*
و tfma.metrics.*
للتعرف على المقاييس الإضافية المحتملة المدعومة.
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
metrics { class_name: "ExampleCount" }
metrics { class_name: "BinaryCrossentropy" }
metrics { class_name: "BinaryAccuracy" }
metrics { class_name: "AUC" }
metrics { class_name: "AUCPrecisionRecall" }
metrics { class_name: "MeanLabel" }
metrics { class_name: "MeanPrediction" }
metrics { class_name: "Calibration" }
metrics { class_name: "ConfusionMatrixPlot" }
metrics { class_name: "CalibrationPlot" }
}
""", tfma.EvalConfig()).metrics_specs
يمكن إنشاء هذا الإعداد نفسه باستخدام كود بايثون التالي:
metrics = [
tfma.metrics.ExampleCount(name='example_count'),
tf.keras.metrics.BinaryCrossentropy(name='binary_crossentropy'),
tf.keras.metrics.BinaryAccuracy(name='accuracy'),
tf.keras.metrics.AUC(name='auc', num_thresholds=10000),
tf.keras.metrics.AUC(
name='auc_precision_recall', curve='PR', num_thresholds=10000),
tf.keras.metrics.Precision(name='precision'),
tf.keras.metrics.Recall(name='recall'),
tfma.metrics.MeanLabel(name='mean_label'),
tfma.metrics.MeanPrediction(name='mean_prediction'),
tfma.metrics.Calibration(name='calibration'),
tfma.metrics.ConfusionMatrixPlot(name='confusion_matrix_plot'),
tfma.metrics.CalibrationPlot(name='calibration_plot')
]
metrics_specs = tfma.metrics.specs_from_metrics(metrics)
لاحظ أن هذا الإعداد متاح أيضًا عن طريق استدعاء tfma.metrics.default_binary_classification_specs
.
مقاييس التصنيف متعددة الفئات/متعددة الملصقات
فيما يلي مثال لإعداد التكوين لمشكلة تصنيف متعددة الفئات. راجع tf.keras.metrics.*
و tfma.metrics.*
للتعرف على المقاييس الإضافية المحتملة المدعومة.
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
metrics { class_name: "ExampleCount" }
metrics { class_name: "SparseCategoricalCrossentropy" }
metrics { class_name: "SparseCategoricalAccuracy" }
metrics { class_name: "Precision" config: '"top_k": 1' }
metrics { class_name: "Precision" config: '"top_k": 3' }
metrics { class_name: "Recall" config: '"top_k": 1' }
metrics { class_name: "Recall" config: '"top_k": 3' }
metrics { class_name: "MultiClassConfusionMatrixPlot" }
}
""", tfma.EvalConfig()).metrics_specs
يمكن إنشاء هذا الإعداد نفسه باستخدام كود بايثون التالي:
metrics = [
tfma.metrics.ExampleCount(name='example_count'),
tf.keras.metrics.SparseCategoricalCrossentropy(
name='sparse_categorical_crossentropy'),
tf.keras.metrics.SparseCategoricalAccuracy(name='accuracy'),
tf.keras.metrics.Precision(name='precision', top_k=1),
tf.keras.metrics.Precision(name='precision', top_k=3),
tf.keras.metrics.Recall(name='recall', top_k=1),
tf.keras.metrics.Recall(name='recall', top_k=3),
tfma.metrics.MultiClassConfusionMatrixPlot(
name='multi_class_confusion_matrix_plot'),
]
metrics_specs = tfma.metrics.specs_from_metrics(metrics)
لاحظ أن هذا الإعداد متاح أيضًا عن طريق استدعاء tfma.metrics.default_multi_class_classification_specs
.
مقاييس ثنائية متعددة الفئات/متعددة العلامات
يمكن تحويل المقاييس متعددة الفئات/المسميات المتعددة إلى مقاييس ثنائية لإنتاج مقاييس لكل فئة، ولكل top_k، وما إلى ذلك باستخدام tfma.BinarizationOptions
. على سبيل المثال:
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
binarize: { class_ids: { values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] } }
// Metrics to binarize
metrics { class_name: "AUC" }
...
}
""", tfma.EvalConfig()).metrics_specs
يمكن إنشاء هذا الإعداد نفسه باستخدام كود بايثون التالي:
metrics = [
// Metrics to binarize
tf.keras.metrics.AUC(name='auc', num_thresholds=10000),
...
]
metrics_specs = tfma.metrics.specs_from_metrics(
metrics, binarize=tfma.BinarizationOptions(
class_ids={'values': [0,1,2,3,4,5,6,7,8,9]}))
مقاييس مجمعة متعددة الفئات/متعددة العلامات
يمكن تجميع مقاييس متعددة الفئات/متعددة التصنيفات لإنتاج قيمة مجمعة واحدة لمقياس تصنيف ثنائي باستخدام tfma.AggregationOptions
.
لاحظ أن إعدادات التجميع مستقلة عن إعدادات الثنائية بحيث يمكنك استخدام كل من tfma.AggregationOptions
و tfma.BinarizationOptions
في نفس الوقت.
المتوسط الجزئي
يمكن إجراء المتوسط الجزئي باستخدام خيار micro_average
ضمن tfma.AggregationOptions
. على سبيل المثال:
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
aggregate: { micro_average: true }
// Metrics to aggregate
metrics { class_name: "AUC" }
...
}
""", tfma.EvalConfig()).metrics_specs
يمكن إنشاء هذا الإعداد نفسه باستخدام كود بايثون التالي:
metrics = [
// Metrics to aggregate
tf.keras.metrics.AUC(name='auc', num_thresholds=10000),
...
]
metrics_specs = tfma.metrics.specs_from_metrics(
metrics, aggregate=tfma.AggregationOptions(micro_average=True))
يدعم المتوسط الدقيق أيضًا إعداد top_k
حيث يتم استخدام قيم k العليا فقط في الحساب. على سبيل المثال:
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
aggregate: {
micro_average: true
top_k_list: { values: [1, 3] }
}
// Metrics to aggregate
metrics { class_name: "AUC" }
...
}
""", tfma.EvalConfig()).metrics_specs
يمكن إنشاء هذا الإعداد نفسه باستخدام كود بايثون التالي:
metrics = [
// Metrics to aggregate
tf.keras.metrics.AUC(name='auc', num_thresholds=10000),
...
]
metrics_specs = tfma.metrics.specs_from_metrics(
metrics,
aggregate=tfma.AggregationOptions(micro_average=True,
top_k_list={'values': [1, 3]}))
ماكرو / متوسط ماكرو مرجح
يمكن إجراء متوسط الماكرو باستخدام خيارات macro_average
أو weighted_macro_average
ضمن tfma.AggregationOptions
. ما لم يتم استخدام إعدادات top_k
، يتطلب الماكرو تعيين class_weights
لمعرفة الفئات التي سيتم حساب المتوسط لها. إذا لم يتم توفير class_weight
، فسيتم افتراض 0.0. على سبيل المثال:
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
aggregate: {
macro_average: true
class_weights: { key: 0 value: 1.0 }
class_weights: { key: 1 value: 1.0 }
class_weights: { key: 2 value: 1.0 }
class_weights: { key: 3 value: 1.0 }
class_weights: { key: 4 value: 1.0 }
class_weights: { key: 5 value: 1.0 }
class_weights: { key: 6 value: 1.0 }
class_weights: { key: 7 value: 1.0 }
class_weights: { key: 8 value: 1.0 }
class_weights: { key: 9 value: 1.0 }
}
// Metrics to aggregate
metrics { class_name: "AUC" }
...
}
""", tfma.EvalConfig()).metrics_specs
يمكن إنشاء هذا الإعداد نفسه باستخدام كود بايثون التالي:
metrics = [
// Metrics to aggregate
tf.keras.metrics.AUC(name='auc', num_thresholds=10000),
...
]
metrics_specs = tfma.metrics.specs_from_metrics(
metrics,
aggregate=tfma.AggregationOptions(
macro_average=True, class_weights={i: 1.0 for i in range(10)}))
مثل المتوسط الجزئي، يدعم المتوسط الكلي أيضًا إعداد top_k
حيث يتم استخدام قيم k العليا فقط في الحساب. على سبيل المثال:
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
aggregate: {
macro_average: true
top_k_list: { values: [1, 3] }
}
// Metrics to aggregate
metrics { class_name: "AUC" }
...
}
""", tfma.EvalConfig()).metrics_specs
يمكن إنشاء هذا الإعداد نفسه باستخدام كود بايثون التالي:
metrics = [
// Metrics to aggregate
tf.keras.metrics.AUC(name='auc', num_thresholds=10000),
...
]
metrics_specs = tfma.metrics.specs_from_metrics(
metrics,
aggregate=tfma.AggregationOptions(macro_average=True,
top_k_list={'values': [1, 3]}))
الاستعلام / الترتيب المقاييس القائمة
يتم تمكين المقاييس المستندة إلى الاستعلام/التصنيف عن طريق تحديد خيار query_key
في مواصفات المقاييس. على سبيل المثال:
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
query_key: "doc_id"
metrics {
class_name: "NDCG"
config: '"gain_key": "gain", "top_k_list": [1, 2]'
}
metrics { class_name: "MinLabelPosition" }
}
""", tfma.EvalConfig()).metrics_specs
يمكن إنشاء نفس الإعداد باستخدام كود بايثون التالي:
metrics = [
tfma.metrics.NDCG(name='ndcg', gain_key='gain', top_k_list=[1, 2]),
tfma.metrics.MinLabelPosition(name='min_label_position')
]
metrics_specs = tfma.metrics.specs_from_metrics(metrics, query_key='doc_id')
مقاييس التقييم متعددة النماذج
يدعم TFMA تقييم نماذج متعددة في نفس الوقت. عند إجراء تقييم متعدد النماذج، سيتم حساب المقاييس لكل نموذج. على سبيل المثال:
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
# no model_names means all models
...
}
""", tfma.EvalConfig()).metrics_specs
إذا كانت هناك حاجة إلى حساب المقاييس لمجموعة فرعية من النماذج، فقم بتعيين model_names
في metric_specs
. على سبيل المثال:
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
model_names: ["my-model1"]
...
}
""", tfma.EvalConfig()).metrics_specs
تدعم واجهة برمجة التطبيقات specs_from_metrics
أيضًا تمرير أسماء النماذج:
metrics = [
...
]
metrics_specs = tfma.metrics.specs_from_metrics(
metrics, model_names=['my-model1'])
مقاييس مقارنة النماذج
يدعم TFMA تقييم مقاييس المقارنة لنموذج مرشح مقابل نموذج أساسي. هناك طريقة بسيطة لإعداد زوج النموذج المرشح والنموذج الأساسي وهي تمرير نموذج eval_shared_model بأسماء النماذج المناسبة (tfma.BASELINE_KEY وtfma.CANDIDATE_KEY):
eval_config = text_format.Parse("""
model_specs {
# ... model_spec without names ...
}
metrics_spec {
# ... metrics ...
}
""", tfma.EvalConfig())
eval_shared_models = [
tfma.default_eval_shared_model(
model_name=tfma.CANDIDATE_KEY,
eval_saved_model_path='/path/to/saved/candidate/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 تقييم المقاييس على النماذج التي لها مخرجات مختلفة. تقوم النماذج متعددة المخرجات بتخزين توقعات المخرجات الخاصة بها في شكل إملاء مرتبط باسم المخرج. عند استخدام نماذج متعددة المخرجات، يجب تحديد أسماء المخرجات المرتبطة بمجموعة من المقاييس في قسم output_names
في MetricsSpec. على سبيل المثال:
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
output_names: ["my-output"]
...
}
""", tfma.EvalConfig()).metrics_specs
تدعم واجهة برمجة التطبيقات specs_from_metrics
أيضًا تمرير أسماء المخرجات:
metrics = [
...
]
metrics_specs = tfma.metrics.specs_from_metrics(
metrics, output_names=['my-output'])
تخصيص إعدادات القياس
يسمح TFMA بتخصيص الإعدادات المستخدمة مع مقاييس مختلفة. على سبيل المثال، قد ترغب في تغيير الاسم وتعيين الحدود وما إلى ذلك. ويتم ذلك عن طريق إضافة قسم config
إلى تكوين المقياس. يتم تحديد التكوين باستخدام إصدار سلسلة JSON للمعلمات التي سيتم تمريرها إلى أسلوب المقاييس __init__
(لسهولة الاستخدام، قد يتم حذف الأقواس البادئة واللاحقة '{' و '}'). على سبيل المثال:
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
metrics {
class_name: "ConfusionMatrixAtThresholds"
config: '"thresholds": [0.3, 0.5, 0.8]'
}
}
""", tfma.MetricsSpec()).metrics_specs
هذا التخصيص مدعوم بالطبع أيضًا بشكل مباشر:
metrics = [
tfma.metrics.ConfusionMatrixAtThresholds(thresholds=[0.3, 0.5, 0.8]),
]
metrics_specs = tfma.metrics.specs_from_metrics(metrics)
النواتج
إن مخرجات التقييم المتري عبارة عن سلسلة من مفاتيح/قيم القياس و/أو مفاتيح/قيم الرسم بناءً على التكوين المستخدم.
مفاتيح مترية
يتم تعريف MetricKeys باستخدام نوع مفتاح منظم. يحدد هذا المفتاح بشكل فريد كل جانب من الجوانب التالية للمقياس:
- اسم المقياس (
auc
،mean_label
، إلخ) - اسم النموذج (يستخدم فقط في حالة التقييم متعدد النماذج)
- اسم المخرجات (يستخدم فقط في حالة تقييم النماذج متعددة المخرجات)
- المفتاح الفرعي (على سبيل المثال معرف الفئة إذا كان النموذج متعدد الفئات ثنائيًا)
القيمة المترية
يتم تعريف MetricValues باستخدام نموذج أولي يتضمن أنواع القيم المختلفة التي تدعمها المقاييس المختلفة (على سبيل المثال double
و ConfusionMatrixAtThresholds
وما إلى ذلك).
فيما يلي أنواع قيم المقاييس المدعومة:
-
double_value
- غلاف لنوع مزدوج. -
bytes_value
- قيمة البايتات. -
bounded_value
- يمثل قيمة حقيقية يمكن أن تكون تقديرًا نقطيًا، اختياريًا بحدود تقريبية من نوع ما. يحتوي علىvalue
الخصائص،lower_bound
، وupper_bound
. -
value_at_cutoffs
- القيمة عند القطع (على سبيل المثال الدقة@K، استدعاء@K). يحتوي علىvalues
خصائص، ولكل منها خصائصcutoff
value
. -
confusion_matrix_at_thresholds
- مصفوفة الارتباك عند العتبات. يحتوي علىmatrices
خصائص، كل واحدة منها لها خصائص لقيم مصفوفةthreshold
precision
recall
والارتباك مثلfalse_negatives
. -
array_value
- للمقاييس التي تُرجع مصفوفة من القيم.
مفاتيح المؤامرة
تشبه PlotKeys المفاتيح المترية باستثناء أنه لأسباب تاريخية، يتم تخزين جميع قيم المخططات في نموذج أولي واحد بحيث لا يكون لمفتاح المخطط اسم.
قيم المؤامرة
يتم تخزين جميع المخططات المدعومة في نموذج أولي واحد يسمى PlotData .
EvalResult
العائد من عملية التقييم هو tfma.EvalResult
. يحتوي هذا السجل على slicing_metrics
التي تشفر المفتاح المتري كإملاء متعدد المستويات حيث تتوافق المستويات مع اسم الإخراج ومعرف الفئة واسم المقياس وقيمة المقياس على التوالي. تم تصميم هذا ليتم استخدامه لعرض واجهة المستخدم في دفتر ملاحظات Jupiter. إذا كان الوصول إلى البيانات الأساسية مطلوبًا، فيجب استخدام ملف نتائج metrics
بدلاً من ذلك (راجع metrics_for_slice.proto ).
التخصيص
بالإضافة إلى المقاييس المخصصة التي تتم إضافتها كجزء من keras المحفوظة (أو EvalSavedModel القديم). هناك طريقتان لتخصيص المقاييس في حفظ ما بعد TFMA: (1) عن طريق تحديد فئة قياس keras مخصصة و(2) عن طريق تحديد فئة مقاييس TFMA مخصصة مدعومة بمجمع شعاع.
في كلتا الحالتين، يتم تكوين المقاييس عن طريق تحديد اسم فئة المقياس والوحدة المرتبطة به. على سبيل المثال:
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
metrics { class_name: "MyMetric" module: "my.module"}
}
""", tfma.EvalConfig()).metrics_specs
مقاييس Keras المخصصة
لإنشاء مقياس keras مخصص، يحتاج المستخدمون إلى توسيع tf.keras.metrics.Metric
مع التنفيذ ثم التأكد من توفر وحدة المقياس في وقت التقييم.
لاحظ أنه بالنسبة للمقاييس المضافة لحفظ نموذج النشر، يدعم TFMA فقط المقاييس التي تأخذ التصنيف (أي y_true)، والتنبؤ (y_pred)، ووزن المثال (sample_weight) كمعلمات لطريقة update_state
.
مثال متري كيراس
فيما يلي مثال لمقياس keras المخصص:
class MyMetric(tf.keras.metrics.Mean):
def __init__(self, name='my_metric', dtype=None):
super(MyMetric, self).__init__(name=name, dtype=dtype)
def update_state(self, y_true, y_pred, sample_weight=None):
return super(MyMetric, self).update_state(
y_pred, sample_weight=sample_weight)
مقاييس TFMA المخصصة
لإنشاء مقياس TFMA مخصص، يحتاج المستخدمون إلى توسيع tfma.metrics.Metric
مع التنفيذ ثم التأكد من توفر وحدة المقياس في وقت التقييم.
متري
يتكون تطبيق tfma.metrics.Metric
من مجموعة من kwargs التي تحدد تكوين المقاييس إلى جانب وظيفة لإنشاء الحسابات (ربما المتعددة) اللازمة لحساب قيمة المقاييس. هناك نوعان رئيسيان من العمليات الحسابية يمكن استخدامهما: tfma.metrics.MetricComputation
و tfma.metrics.DerivedMetricComputation
الموضحين في الأقسام أدناه. سيتم تمرير الوظيفة التي تنشئ هذه الحسابات المعلمات التالية كمدخلات:
-
eval_config: tfam.EvalConfig
- تم تمرير تكوين التقييم إلى المقيم (مفيد للبحث عن إعدادات مواصفات النموذج مثل مفتاح التنبؤ المراد استخدامه، وما إلى ذلك).
-
model_names: List[Text]
- قائمة بأسماء النماذج لحساب المقاييس (لا شيء إذا كان النموذج فرديًا)
-
output_names: List[Text]
.- قائمة بأسماء المخرجات لحساب المقاييس (لا شيء إذا كان النموذج فرديًا)
-
sub_keys: List[tfma.SubKey]
.- قائمة المفاتيح الفرعية (معرف الفئة، أعلى K، إلخ) لحساب المقاييس لـ (أو لا شيء)
-
aggregation_type: tfma.AggregationType
- نوع التجميع في حالة حساب مقياس التجميع.
-
class_weights: Dict[int, float]
.- أوزان الفئة المستخدمة في حالة حساب مقياس التجميع.
-
query_key: Text
- مفتاح الاستعلام المستخدم في حالة حساب مقياس قائم على الاستعلام/التصنيف.
إذا لم يكن المقياس مرتبطًا بواحد أو أكثر من هذه الإعدادات، فقد يترك هذه المعلمات خارج تعريف التوقيع الخاص به.
إذا تم حساب المقياس بنفس الطريقة لكل نموذج ومخرج ومفتاح فرعي، فيمكن استخدام الأداة المساعدة tfma.metrics.merge_per_key_computations
لإجراء نفس الحسابات لكل من هذه المدخلات بشكل منفصل.
حساب المتري
يتكون MetricComputation
من مجموعة من preprocessors
combiner
. preprocessors
عبارة عن قائمة من preprocessor
، وهي عبارة عن حزمة من beam.DoFn
DoFn التي تأخذ المستخلصات كمدخلات لها وتخرج الحالة الأولية التي سيتم استخدامها بواسطة الموحد (انظر البنية لمزيد من المعلومات حول المستخلصات). سيتم تنفيذ كافة المعالجات المسبقة بالتسلسل حسب ترتيب القائمة. إذا كانت preprocessors
فارغة، فسيتم تمرير الموحد StandardMetricInputs (تحتوي مدخلات القياس القياسية على تسميات وتنبؤات وexample_weights). combiner
عبارة عن beam.CombineFn
CombineFn تأخذ مجموعة من (مفتاح الشريحة، مخرجات المعالج المسبق) كمدخل لها وتخرج مجموعة من (slice_key، نتائج القياس) كنتيجة لها.
لاحظ أن التقطيع يحدث بين preprocessors
combiner
.
لاحظ أنه إذا كان الحساب المتري يريد الاستفادة من كل من المدخلات المترية القياسية، ولكن مع زيادتها بعدد قليل من الميزات من مقتطفات features
، فيمكن استخدام الميزة المسبقة الخاصة التي ستدمج الميزات المطلوبة من أدوات الدمج المتعددة في أداة واحدة واحدة قيمة StandardMetricsInputs المشتركة التي يتم تمريرها إلى جميع المجمعات (المجمعات مسؤولة عن قراءة الميزات التي تهمها وتجاهل الباقي).
مثال
فيما يلي مثال بسيط جدًا لتعريف متري TFMA لحساب عدد الأمثلة:
class ExampleCount(tfma.metrics.Metric):
def __init__(self, name: Text = 'example_count'):
super(ExampleCount, self).__init__(_example_count, name=name)
def _example_count(
name: Text = 'example_count') -> tfma.metrics.MetricComputations:
key = tfma.metrics.MetricKey(name=name)
return [
tfma.metrics.MetricComputation(
keys=[key],
preprocessors=[_ExampleCountPreprocessor()],
combiner=_ExampleCountCombiner(key))
]
class ExampleCountTest(tfma.test.testutil.TensorflowModelAnalysisTest):
def testExampleCount(self):
metric = ExampleCount()
computations = metric.computations(example_weighted=False)
computation = computations[0]
with beam.Pipeline() as pipeline:
result = (
pipeline
| 'Create' >> beam.Create([...]) # Add inputs
| 'PreProcess' >> beam.ParDo(computation.preprocessors[0])
| 'Process' >> beam.Map(tfma.metrics.to_standard_metric_inputs)
| 'AddSlice' >> beam.Map(lambda x: ((), x))
| 'ComputeMetric' >> beam.CombinePerKey(computation.combiner)
)
def check_result(got):
try:
self.assertLen(got, 1)
got_slice_key, got_metrics = got[0]
self.assertEqual(got_slice_key, ())
key = computation.keys[0]
self.assertIn(key, got_metrics)
self.assertAlmostEqual(got_metrics[key], expected_value, places=5)
except AssertionError as err:
raise util.BeamAssertException(err)
util.assert_that(result, check_result, label='result')
class _ExampleCountPreprocessor(beam.DoFn):
def process(self, extracts: tfma.Extracts) -> Iterable[int]:
yield 1
class _ExampleCountPreprocessorTest(unittest.TestCase):
def testExampleCountPreprocessor(self):
... # Init the test case here
with beam.Pipeline() as pipeline:
updated_pcoll = (
pipeline
| 'Create' >> beam.Create([...]) # Add inputs
| 'Preprocess'
>> beam.ParDo(
_ExampleCountPreprocessor()
)
)
beam_testing_util.assert_that(
updated_pcoll,
lambda result: ..., # Assert the test case
)
class _ExampleCountCombiner(beam.CombineFn):
def __init__(self, metric_key: tfma.metrics.MetricKey):
self._metric_key = metric_key
def create_accumulator(self) -> int:
return 0
def add_input(self, accumulator: int, state: int) -> int:
return accumulator + state
def merge_accumulators(self, accumulators: Iterable[int]) -> int:
accumulators = iter(accumulators)
result = next(accumulator)
for accumulator in accumulators:
result += accumulator
return result
def extract_output(self,
accumulator: int) -> Dict[tfma.metrics.MetricKey, int]:
return {self._metric_key: accumulator}
حساب المشتقات
يتكون DerivedMetricComputation
من دالة نتيجة تُستخدم لحساب القيم المترية بناءً على مخرجات الحسابات المترية الأخرى. تأخذ دالة النتيجة إملاءًا للقيم المحسوبة كمدخل لها وتخرج إملاءً لنتائج القياس الإضافية.
لاحظ أنه من المقبول (الموصى به) تضمين الحسابات التي تعتمد عليها الحسابات المشتقة في قائمة الحسابات التي تم إنشاؤها بواسطة المقياس. يؤدي هذا إلى تجنب الاضطرار إلى إنشاء الحسابات المشتركة بين مقاييس متعددة وتمريرها مسبقًا. سيقوم المقيِّم تلقائيًا بإلغاء الحسابات المكررة التي لها نفس التعريف بحيث يتم تشغيل عملية حسابية واحدة فعليًا.
مثال
توفر مقاييس TJUR مثالاً جيدًا للمقاييس المشتقة.