نمای کلی
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.*
در پایتون و استفاده از 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
نیز در دسترس است.
معیارهای باینریزه چند کلاسه/چند برچسب
معیارهای چند کلاسه/چند برچسبی را می توان با استفاده از tfma.BinarizationOptions
برای تولید معیارهای هر کلاس، در top_k و غیره باینریزه کرد. به عنوان مثال:
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
API همچنین از عبور نام مدل ها پشتیبانی می کند:
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")
معیارهای مقایسه به طور خودکار برای همه معیارهای قابل تغییر محاسبه می شوند (در حال حاضر فقط معیارهای ارزش اسکالر مانند دقت و AUC).
معیارهای مدل چند خروجی
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
API از نامهای خروجی نیز پشتیبانی میکند:
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
- ارزش در برش (مثلا precision@K، recall@K). دارایvalues
دارایی است که هر کدام دارایcutoff
وvalue
خاصیت هستند. -
confusion_matrix_at_thresholds
- ماتریس سردرگمی در آستانه ها. دارایmatrices
خاصیت است که هر کدام دارای خواصthreshold
،precision
،recall
و مقادیر ماتریس سردرگمی مانندfalse_negatives
هستند. -
array_value
- برای معیارهایی که آرایه ای از مقادیر را برمی گرداند.
کلیدهای طرح
PlotKeyها شبیه کلیدهای متریک هستند با این تفاوت که به دلایل تاریخی همه مقادیر نمودارها در یک پروتو ذخیره می شوند، بنابراین کلید نمودار نامی ندارد.
ارزش های طرح
تمام نمودارهای پشتیبانی شده در یک پروتو واحد به نام 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
میگیرند.
مثال متریک کراس
نمونه زیر نمونه ای از متریک کراس سفارشی است:
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
از مجموعه ای از کوارگ ها تشکیل شده است که پیکربندی متریک را به همراه تابعی برای ایجاد محاسبات (احتمالاً چندگانه) مورد نیاز برای محاسبه مقدار متریک ها تعریف می کند. دو نوع محاسبات اصلی وجود دارد که می توان از آنها استفاده کرد: tfma.metrics.MetricComputation
و tfma.metrics.DerivedMetricComputation
که در بخش های زیر توضیح داده شده است. تابعی که این محاسبات را ایجاد می کند، پارامترهای زیر را به عنوان ورودی ارسال می کند:
-
eval_config: tfam.EvalConfig
- پیکربندی eval به ارزیاب منتقل شد (برای جستجوی تنظیمات مشخصات مدل مانند کلید پیشبینی برای استفاده و غیره مفید است).
-
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، نتایج متریک dict) را به عنوان نتیجه خروجی می دهد.
توجه داشته باشید که برش بین preprocessors
و combiner
اتفاق می افتد.
توجه داشته باشید که اگر یک محاسبات متریک بخواهد از هر دو ورودی متریک استاندارد استفاده کند، اما آن را با تعدادی از ویژگیهای استخراج features
تقویت کند، میتوان از FeaturePreprocessor ویژه استفاده کرد که ویژگیهای درخواستی را از چندین ترکیب کننده در یک واحد ادغام میکند. مقدار مشترک StandardMetricsInputs که به همه ترکیبکنندهها ارسال میشود (ترکیبکنندهها مسئول خواندن ویژگیهایی هستند که به آنها علاقهمند هستند و بقیه را نادیده میگیرند).
مثال
مثال زیر یک مثال بسیار ساده از تعریف متریک TFMA برای محاسبه ExampleCount است:
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 نمونه خوبی از معیارهای مشتق شده است.