بررسی اجمالی
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
.
معیارهای باینریزه چند کلاسه/چند برچسب
چند کلاس / چند برچسب معیارهای می توان binarized به تولید معیارهای در هر کلاس، در هر 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
.
توجه داشته باشید که تنظیمات تجمع مستقل از binarization تنظیمات بنابراین شما می توانید هر دو استفاده 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 با استفاده از یک پروتو که encapulates انواع ارزش های مختلف پشتیبانی شده توسط معیارهای مختلف تعریف (به عنوان مثال 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
که رمز کلید متریک به عنوان یک بینی چند سطح که در آن سطح به ترتیب به نام های خروجی، کلاس ID، نام متریک، و ارزش متریک مطابقت دارد. این برای نمایش رابط کاربری در نوت بوک 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
پیاده سازی شده است تا مجموعه ای از kwargs که تعریف پیکربندی معیارهای همراه با یک تابع برای ایجاد محاسبات (احتمالا چند) مورد نیاز به calcuate ارزش معیارهای ساخته شده است. دو نوع محاسبات اصلی که می تواند مورد استفاده قرار گیرد وجود دارد: 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
است تا از ترکیبی از یک ساخته شده preprocessor
و یک combiner
. preprocessor
است beam.DoFn
که طول می کشد عصاره به عنوان میکند و خروجی آن به حالت اولیه خواهد شد که توسط ترکیب (نگاه کنید به استفاده معماری برای اطلاعات بیشتر در چه عصاره هستند). اگر یک preprocessor
تعریف نشده است، پس از آن ترکیب خواهد گذشت StandardMetricInputs (ورودی متریک استاندارد شامل برچسب، پیش بینی، و example_weights). combiner
است beam.CombineFn
که طول می کشد یک تاپل (کلید برش، خروجی پیش پردازنده) به عنوان میکند و خروجی آن یک تاپل (slice_key، نتایج متریک بینی) به عنوان نتیجه آن است.
توجه داشته باشید که برش بین اتفاق می افتد preprocessor
و 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],
preprocessor=_ExampleCountPreprocessor(),
combiner=_ExampleCountCombiner(key))
]
class _ExampleCountPreprocessor(beam.DoFn):
def process(self, extracts: tfma.Extracts) -> Iterable[int]:
yield 1
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 یک مثال خوب از معیارهای مشتق شده فراهم می کند.