genel bakış
TFMA aşağıdaki ölçümleri ve çizimleri destekler:
- Standart keras ölçümleri (
tf.keras.metrics.*
)- Keras metriklerini kullanmak için bir keras modeline ihtiyacınız olmadığını unutmayın. Metrikler, doğrudan metrik sınıfları kullanılarak ışında grafiğin dışında hesaplanır.
Standart TFMA ölçümleri ve grafikleri (
tfma.metrics.*
)Özel keras ölçümleri (
tf.keras.metrics.Metric
türetilen ölçümler)Özel ışın birleştiriciler veya diğer metriklerden türetilen metrikler kullanılarak özel TFMA metrikleri (
tfma.metrics.Metric
türetilen metrikler).
TFMA ayrıca, çoklu sınıf/çoklu etiket problemlerinde kullanılmak üzere ikili sınıflandırma ölçümlerini dönüştürmek için yerleşik destek sağlar:
- Sınıf kimliğine, üst K'ye vb. dayalı ikilileştirme.
- Mikro ortalamaya, makro ortalamaya vb. dayalı toplu metrikler.
TFMA ayrıca, örneklerin ardışık düzende otomatik olarak bir sorgu anahtarına göre gruplandırıldığı sorgu/sıralama tabanlı metrikler için yerleşik destek sağlar.
Kombine olarak, regresyon, ikili sınıflandırma, çok sınıflı/çok etiketli sınıflandırma, sıralama vb. dahil olmak üzere çeşitli problemler için 50'den fazla standart metrik ve grafik mevcuttur.
Yapılandırma
TFMA'da ölçümleri yapılandırmanın iki yolu vardır: (1) tfma.MetricsSpec
kullanarak veya (2) tf.keras.metrics.*
ve/veya tfma.metrics.*
sınıflarının örneklerini oluşturarak ve tfma.metrics'i kullanarak tfma.metrics.specs_from_metrics
onları bir tfma.MetricsSpec
listesine dönüştürmek için.
Aşağıdaki bölümlerde, farklı makine öğrenimi sorunları türleri için örnek yapılandırmalar açıklanmaktadır.
Regresyon Metrikleri
Aşağıda, bir regresyon sorunu için örnek bir yapılandırma kurulumu yer almaktadır. Desteklenen olası ek ölçümler için tf.keras.metrics.*
ve tfma.metrics.*
modüllerine başvurun.
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
Bu aynı kurulum, aşağıdaki python kodu kullanılarak oluşturulabilir:
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)
Bu kurulumun tfma.metrics.default_regression_specs
çağrılarak da kullanılabileceğini unutmayın.
İkili Sınıflandırma Metrikleri
Aşağıda, bir ikili sınıflandırma problemi için örnek bir konfigürasyon kurulumu yer almaktadır. Desteklenen olası ek ölçümler için tf.keras.metrics.*
ve tfma.metrics.*
modüllerine başvurun.
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
Bu aynı kurulum, aşağıdaki python kodu kullanılarak oluşturulabilir:
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)
Bu kurulumun tfma.metrics.default_binary_classification_specs
çağrılarak da kullanılabileceğini unutmayın.
Çok Sınıflı/Çok Etiketli Sınıflandırma Metrikleri
Aşağıda, çok sınıflı bir sınıflandırma problemi için örnek bir yapılandırma kurulumu yer almaktadır. Desteklenen olası ek ölçümler için tf.keras.metrics.*
ve tfma.metrics.*
modüllerine başvurun.
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
Bu aynı kurulum, aşağıdaki python kodu kullanılarak oluşturulabilir:
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)
Bu kurulumun tfma.metrics.default_multi_class_classification_specs
çağrılarak da kullanılabilir olduğunu unutmayın.
Çok Sınıflı/Çok Etiketli İkilileştirilmiş Metrikler
Çok sınıflı/çok etiketli ölçümler, tfma.BinarizationOptions kullanılarak sınıf başına, tfma.BinarizationOptions
vb. başına ölçüm üretmek için ikili hale getirilebilir. Örneğin:
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
Bu aynı kurulum, aşağıdaki python kodu kullanılarak oluşturulabilir:
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]}))
Çok Sınıflı/Çok Etiketli Toplu Metrikler
Çok sınıflı/çok etiketli metrikler, tfma.AggregationOptions
kullanılarak bir ikili sınıflandırma metriği için tek bir toplu değer üretmek üzere toplanabilir.
Toplama ayarlarının ikili hale getirme ayarlarından bağımsız olduğunu ve bu nedenle hem tfma.AggregationOptions
hem de tfma.BinarizationOptions
aynı anda kullanabileceğinizi unutmayın.
Mikro Ortalama
Mikro ortalama, tfma.AggregationOptions
içindeki micro_average
seçeneği kullanılarak gerçekleştirilebilir. Örneğin:
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
Bu aynı kurulum, aşağıdaki python kodu kullanılarak oluşturulabilir:
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))
Mikro ortalama, hesaplamada yalnızca en yüksek k değerlerinin kullanıldığı top_k
ayarını da destekler. Örneğin:
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
Bu aynı kurulum, aşağıdaki python kodu kullanılarak oluşturulabilir:
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]}))
Makro / Ağırlıklı Makro Ortalama
Makro ortalaması, tfma.AggregationOptions
içindeki macro_average
veya weighted_macro_average
seçenekleri kullanılarak gerçekleştirilebilir. top_k
ayarları kullanılmadığı sürece, makro, hangi sınıfların ortalamasını hesaplayacağını bilmek için class_weights
ayarlanmasını gerektirir. Bir class_weight
sağlanmazsa, 0.0 olduğu varsayılır. Örneğin:
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
Bu aynı kurulum, aşağıdaki python kodu kullanılarak oluşturulabilir:
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)}))
Mikro ortalama gibi, makro ortalama da hesaplamada yalnızca en yüksek k değerlerinin kullanıldığı top_k
ayarını destekler. Örneğin:
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
Bu aynı kurulum, aşağıdaki python kodu kullanılarak oluşturulabilir:
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]}))
Sorgu / Sıralamaya Dayalı Metrikler
Sorgu/sıralama tabanlı metrikler, metrik özelliklerinde query_key
seçeneği belirtilerek etkinleştirilir. Örneğin:
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
Bu aynı kurulum, aşağıdaki python kodu kullanılarak oluşturulabilir:
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')
Çoklu Model Değerlendirme Metrikleri
TFMA, aynı anda birden çok modeli değerlendirmeyi destekler. Çoklu model değerlendirmesi yapıldığında, her model için metrikler hesaplanacaktır. Örneğin:
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
# no model_names means all models
...
}
""", tfma.EvalConfig()).metrics_specs
Bir model alt kümesi için metriklerin hesaplanması gerekiyorsa, model_names
içinde metric_specs
. Örneğin:
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'si ayrıca model adlarını iletmeyi de destekler:
metrics = [
...
]
metrics_specs = tfma.metrics.specs_from_metrics(
metrics, model_names=['my-model1'])
Model Karşılaştırma Metrikleri
TFMA, bir aday model için karşılaştırma ölçütlerinin bir temel modele göre değerlendirilmesini destekler. Aday ve temel model çiftini kurmanın basit bir yolu, uygun model adlarıyla (tfma.BASELINE_KEY ve tfma.CANDIDATE_KEY) bir eval_shared_model geçirmektir:
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")
Karşılaştırma metrikleri, tüm diffable metrikler için otomatik olarak hesaplanır (şu anda sadece doğruluk ve AUC gibi skaler değer metrikleri).
Çok Çıkışlı Model Metrikleri
TFMA, farklı çıktılara sahip modellerde metriklerin değerlendirilmesini destekler. Çok çıkışlı modeller, çıktı tahminlerini çıktı adıyla anahtarlanmış bir dikte biçiminde saklar. Çok çıktılı modeller kullanıldığında, bir dizi metrikle ilişkili çıktıların adları, output_names
bölümünde belirtilmelidir. Örneğin:
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 ayrıca çıkış adlarını iletmeyi de destekler:
metrics = [
...
]
metrics_specs = tfma.metrics.specs_from_metrics(
metrics, output_names=['my-output'])
Metrik Ayarlarını Özelleştirme
TFMA, farklı metriklerle kullanılan ayarların özelleştirilmesine olanak tanır. Örneğin, adı değiştirmek, eşikleri ayarlamak vb. isteyebilirsiniz. Bu, metrik yapılandırmaya bir config
bölümü ekleyerek yapılır. Yapılandırma, metrics __init__
yöntemine iletilecek parametrelerin JSON dizesi sürümü kullanılarak belirtilir (kullanım kolaylığı için baştaki ve sondaki '{' ve '}' parantezleri atlanabilir). Örneğin:
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
Bu özelleştirme elbette doğrudan da desteklenir:
metrics = [
tfma.metrics.ConfusionMatrixAtThresholds(thresholds=[0.3, 0.5, 0.8]),
]
metrics_specs = tfma.metrics.specs_from_metrics(metrics)
çıktılar
Bir metrik değerlendirmesinin çıktısı, kullanılan konfigürasyona dayalı olarak bir dizi metrik anahtar/değer ve/veya çizim anahtar/değeridir.
Metrik Anahtarlar
Metrik Anahtarlar , yapılandırılmış bir anahtar türü kullanılarak tanımlanır. Bu anahtar, bir metriğin aşağıdaki yönlerinin her birini benzersiz şekilde tanımlar:
- Metrik adı (
auc
,mean_label
, vb.) - Model adı (yalnızca çoklu model değerlendirmesi yapılırsa kullanılır)
- Çıkış adı (yalnızca çok çıkışlı modeller değerlendirilirse kullanılır)
- Alt anahtar (örneğin, çok sınıflı model ikilileştirilmişse sınıf kimliği)
Metrik Değer
MetricValues , farklı metrikler (örn. double
, ConfusionMatrixAtThresholds
, vb.) tarafından desteklenen farklı değer türlerini özetleyen bir protokol kullanılarak tanımlanır.
Desteklenen metrik değer türleri aşağıdadır:
-
double_value
- Double tipi için bir sarıcı. -
bytes_value
- Bir bayt değeri. -
bounded_value
- İsteğe bağlı olarak bir tür yaklaşık sınırla, noktasal bir tahmin olabilecek gerçek bir değeri temsil eder.value
,lower_bound
veupper_bound
özelliklerine sahiptir. -
value_at_cutoffs
- Kesimlerdeki değer (örn. kesinlik@K, geri çağırma@K). Her biri özellikcutoff
vevalue
sahip olan özellikvalues
sahiptir. -
confusion_matrix_at_thresholds
- Eşiklerde kafa karışıklığı matrisi. Her birithreshold
,precision
,recall
vefalse_negatives
gibi karışıklık matrisi değerleri için özelliklere sahip olan özellikmatrices
sahiptir . -
array_value
- Bir dizi değer döndüren metrikler için.
Arsa Anahtarları
PlotKey'ler , tarihsel nedenlerle tüm grafik değerlerinin tek bir protokolde saklanması ve böylece çizim anahtarının bir adı olmaması dışında metrik anahtarlara benzer.
Arsa Değerleri
Desteklenen tüm grafikler, PlotData adlı tek bir protokolde saklanır.
Değerlendirme Sonucu
Bir değerlendirme çalıştırmasının getirisi bir tfma.EvalResult
. Bu kayıt, metrik anahtarını, seviyelerin sırasıyla çıktı adı, sınıf kimliği, metrik adı ve metrik değerine karşılık geldiği çok düzeyli bir dikte olarak kodlayan slicing_metrics
içerir. Bu, bir Jupiter not defterinde UI ekranı için kullanılmak üzere tasarlanmıştır. Altta yatan verilere erişim gerekiyorsa, bunun yerine metrics
sonuç dosyası kullanılmalıdır (bkz. metrics_for_slice.proto ).
özelleştirme
Kayıtlı keraların (veya eski EvalSavedModel) parçası olarak eklenen özel ölçümlere ek olarak. TFMA kaydetme sonrası metrikleri özelleştirmenin iki yolu vardır: (1) özel bir keras metrik sınıfı tanımlayarak ve (2) bir ışın birleştirici tarafından desteklenen özel bir TFMA metrik sınıfı tanımlayarak.
Her iki durumda da metrikler, metrik sınıfın ve ilişkili modülün adı belirtilerek yapılandırılır. Örneğin:
from google.protobuf import text_format
metrics_specs = text_format.Parse("""
metrics_specs {
metrics { class_name: "MyMetric" module: "my.module"}
}
""", tfma.EvalConfig()).metrics_specs
Özel Keras Metrikleri
Özel bir keras metriği oluşturmak için, kullanıcıların uygulamalarıyla birlikte tf.keras.metrics.Metric
genişletmeleri ve ardından değerlendirme sırasında metrik modülünün kullanılabilir olduğundan emin olmaları gerekir.
Model kaydı sonrası eklenen metrikler için TFMA'nın yalnızca update_state
yöntemine parametre olarak etiket (yani y_true), tahmin (y_pred) ve örnek ağırlık (sample_weight) alan metrikleri desteklediğini unutmayın.
Keras Metrik Örneği
Aşağıda özel bir keras metriği örneği verilmiştir:
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)
Özel TFMA Metrikleri
Özel bir TFMA metriği oluşturmak için, kullanıcıların uygulamalarıyla tfma.metrics.Metric
genişletmeleri ve ardından değerlendirme sırasında metrik modülünün kullanılabilir olduğundan emin olmaları gerekir.
Metrik
Bir tfma.metrics.Metric
uygulaması, metrik değerini hesaplamak için gereken hesaplamaları (muhtemelen birden çok) oluşturmaya yönelik bir işlevle birlikte metrik yapılandırmasını tanımlayan bir dizi kwarg'dan oluşur. Kullanılabilecek iki ana hesaplama türü vardır: aşağıdaki bölümlerde açıklanan tfma.metrics.MetricComputation
ve tfma.metrics.DerivedMetricComputation
. Bu hesaplamaları oluşturan işlev, aşağıdaki parametreleri girdi olarak iletecektir:
-
eval_config: tfam.EvalConfig
- Değerlendiriciye iletilen değerlendirme yapılandırması (kullanılacak tahmin anahtarı vb. gibi model spesifikasyon ayarlarına bakmak için kullanışlıdır).
-
model_names: List[Text]
- Metrikleri hesaplanacak model adlarının listesi (Tek model ise hiçbiri)
-
output_names: List[Text]
.- Metrikleri hesaplanacak çıktı adlarının listesi (Tek model ise hiçbiri)
-
sub_keys: List[tfma.SubKey]
.- (veya Hiçbiri) için metrikleri hesaplamak üzere alt anahtarların (sınıf kimliği, üst K vb.) listesi
-
aggregation_type: tfma.AggregationType
- Toplama metriği hesaplanıyorsa toplama türü.
-
class_weights: Dict[int, float]
.- Bir toplama metriği hesaplanıyorsa kullanılacak sınıf ağırlıkları.
-
query_key: Text
- Sorgu/sıralama tabanlı bir metrik hesaplanıyorsa kullanılan sorgu anahtarı.
Bir metrik, bu ayarlardan biri veya daha fazlasıyla ilişkilendirilmemişse, bu parametreleri imza tanımının dışında bırakabilir.
Bir metrik, her model, çıktı ve alt anahtar için aynı şekilde hesaplanırsa, bu girdilerin her biri için ayrı ayrı aynı hesaplamaları gerçekleştirmek üzere tfma.metrics.merge_per_key_computations
yardımcı programı kullanılabilir.
Metrik Hesaplama
Bir MetricComputation
, preprocessors
işlemciler ve bir combiner
kombinasyonundan oluşur. preprocessors
, giriş olarak özetleri alan ve birleştirici tarafından kullanılacak ilk durumu çıkaran bir beam.DoFn
olan preprocessor
bir listesidir (ekstraktların ne olduğu hakkında daha fazla bilgi için mimariye bakın). Tüm ön işlemciler, liste sırasına göre sıralı olarak yürütülecektir. preprocessors
boşsa, birleştiriciye StandardMetricInputs geçirilir (standart metrik girdiler etiketler, tahminler ve example_weights içerir). combiner
, girişi olarak bir demet (dilim anahtarı, önişlemci çıktısı) alan ve sonuç olarak bir demet ( beam.CombineFn
, metrik sonuçlar dict) çıkaran bir beam.CombineFn'dir.
Dilimlemenin preprocessors
ve combiner
arasında gerçekleştiğine dikkat edin.
Bir metrik hesaplama, her iki standart metrik girdiyi de kullanmak istiyorsa, ancak bunu features
özetlerinden birkaç özellik ile zenginleştiriyorsa, birden fazla birleştiriciden istenen özellikleri tek bir birleştiricide birleştirecek olan özel FeaturePreprocessor kullanılabilir. tüm birleştiricilere iletilen paylaşılan StandardMetricsInputs değeri (birleştiriciler ilgilendikleri özellikleri okumaktan ve gerisini göz ardı etmekten sorumludur).
Misal
Aşağıda, ExampleCount'u hesaplamak için çok basit bir TFMA metrik tanımı örneği verilmiştir:
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 _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}
TüretilmişMetrikHesaplama
Bir DerivedMetricComputation
, diğer metrik hesaplamaların çıktısına dayalı olarak metrik değerleri hesaplamak için kullanılan bir sonuç işlevinden oluşur. Sonuç işlevi, girdi olarak hesaplanan değerlerin bir diktesini alır ve ek metrik sonuçların bir diktesini çıkarır.
Türetilmiş bir hesaplamanın bağlı olduğu hesaplamaları bir metrik tarafından oluşturulan hesaplamalar listesine dahil etmenin kabul edilebilir (önerilen) olduğunu unutmayın. Bu, birden fazla metrik arasında paylaşılan hesaplamaları önceden oluşturma ve iletme zorunluluğunu ortadan kaldırır. Değerlendirici, aynı tanıma sahip hesaplamaları otomatik olarak tekilleştirir, böylece yalnızca bir hesaplama gerçekten çalıştırılır.
Misal
TJUR ölçümleri , türetilmiş ölçümlere iyi bir örnek sağlar.