Genel Bakış
TFMA aşağıdaki ölçümleri ve grafikleri destekler:
- Standart keras metrikleri (
tf.keras.metrics.*
)- Keras metriklerini kullanmak için keras modeline ihtiyacınız olmadığını unutmayın. Metrikler, doğrudan metrik sınıfları kullanılarak ışındaki 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ştiricileri veya diğer ölçümlerden türetilen ölçümler kullanılarak özel TFMA ölçümleri (
tfma.metrics.Metric
türetilen ölçümler).
TFMA ayrıca çok sınıflı/çok etiketli problemlerde kullanılmak üzere ikili sınıflandırma metriklerini dönüştürmek için yerleşik destek sağlar:
- Sınıf kimliğine, üst K'ya vb. dayalı ikilileştirme.
- Mikro ortalamaya, makro ortalamaya vb. dayalı toplu ölçümler.
TFMA ayrıca örneklerin ardışık düzende otomatik olarak bir sorgu anahtarına göre gruplandırıldığı sorgu/sıralama tabanlı ölçümler için yerleşik destek sağlar.
Birleştirilmiş olarak, regresyon, ikili sınıflandırma, çok sınıflı/çok etiketli sınıflandırma, sıralama vb. gibi çeşitli problemler için 50'den fazla standart ölçüm ve çizim mevcuttur.
Yapılandırma
TFMA'da metrikleri yapılandırmanın iki yolu vardır: (1) tfma.MetricsSpec
kullanarak veya (2) python'da tf.keras.metrics.*
ve/veya tfma.metrics.*
sınıflarının örneklerini oluşturarak ve tfma.metrics.specs_from_metrics
bunları bir tfma.MetricsSpec
listesine dönüştürmek için.
Aşağıdaki bölümlerde farklı makine öğrenimi sorunlarına yönelik örnek yapılandırmalar açıklanmaktadır.
Regresyon Metrikleri
Aşağıda bir regresyon sorunu için örnek bir yapılandırma kurulumu bulunmaktadır. Desteklenen olası ek ölçümler için tf.keras.metrics.*
ve tfma.metrics.*
modüllerine bakın.
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
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 yapılabileceğini unutmayın.
İkili Sınıflandırma Metrikleri
Aşağıda ikili sınıflandırma problemi için örnek bir konfigürasyon kurulumu bulunmaktadır. Desteklenen olası ek ölçümler için tf.keras.metrics.*
ve tfma.metrics.*
modüllerine bakın.
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
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 yapı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 konfigürasyon kurulumu bulunmaktadır. Desteklenen olası ek ölçümler için tf.keras.metrics.*
ve tfma.metrics.*
modüllerine bakın.
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
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 yapılabileceğini unutmayın.
Çok Sınıflı/Çok Etiketli İkili Metrikler
Çok sınıflı/çok etiketli ölçümler, tfma.BinarizationOptions
kullanılarak sınıf başına, top_k vb. başına ölçümler ü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
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 ölçümler, tfma.AggregationOptions
kullanılarak ikili sınıflandırma ölçümü için tek bir toplanmış değer üretmek üzere toplanabilir.
Toplama ayarlarının ikilileştirme ayarlarından bağımsız olduğunu ve böylece 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
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 alma aynı zamanda hesaplamada yalnızca en üst 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
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, ortalamanın hangi sınıflar için hesaplanacağını bilmek amacıyla class_weights
ayarlanmasını gerektirir. Bir class_weight
sağlanmazsa 0,0 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
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 üst 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
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
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 fazla modelin değerlendirilmesini 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, metric_specs
model_names
ayarlayın. Ö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ın iletilmesini de destekler:
metrics = [
...
]
metrics_specs = tfma.metrics.specs_from_metrics(
metrics, model_names=['my-model1'])
Model Karşılaştırma Metrikleri
TFMA, bir aday modele ilişkin karşılaştırma metriklerinin temel bir modele göre değerlendirilmesini destekler. Aday ve temel model çiftini ayarlamanın basit bir yolu, uygun model adlarıyla (tfma.BASELINE_KEY ve tfma.CANDIDATE_KEY) bir eval_shared_model iletmektir:
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 farklılaştırılabilir metrikler için otomatik olarak hesaplanır (şu anda yalnızca 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, çıkış tahminlerini çıkış adına göre anahtarlanan bir dikte biçiminde saklar. Çoklu çıktı modelleri kullanıldığında, bir dizi metrikle ilişkili çıktıların adları, MetricsSpec'in 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 çıktı adlarının iletilmesini 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ü eklenerek yapılır. Yapılandırma, metrik __init__
yöntemine aktarılacak parametrelerin JSON dize sürümü kullanılarak belirtilir (kullanım kolaylığı için baştaki ve sondaki '{' ve '}' parantezleri çıkarılabilir). Ö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 desteklenmektedir:
metrics = [
tfma.metrics.ConfusionMatrixAtThresholds(thresholds=[0.3, 0.5, 0.8]),
]
metrics_specs = tfma.metrics.specs_from_metrics(metrics)
Çıkışlar
Bir metrik değerlendirmenin çıktısı, kullanılan konfigürasyona dayalı bir dizi metrik anahtar/değer ve/veya çizim anahtarı/değeridir.
Metrik Anahtarlar
MetricKey'ler 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 durumunda 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ı ölçümler tarafından desteklenen farklı değer türlerini kapsayan bir protokol kullanılarak tanımlanır (örn. double
, ConfusionMatrixAtThresholds
, vb.).
Desteklenen metrik değer türleri aşağıda verilmiştir:
-
double_value
- Double türü için bir sarmalayıcı. -
bytes_value
- Bayt değeri. -
bounded_value
- İsteğe bağlı olarak bir tür yaklaşık sınırlarla noktasal bir tahmin olabilecek gerçek bir değeri temsil eder.value
,lower_bound
veupper_bound
özelliklerine sahiptir. -
value_at_cutoffs
- Kesim noktalarındaki değer (örneğin, Precision@K, Recall@K). Her biri özellikcutoff
vevalue
sahip olan özellikvalues
sahiptir. -
confusion_matrix_at_thresholds
- Eşiklerdeki karışıklık matrisi. Her birithreshold
,precision
,recall
vefalse_negatives
gibi karışıklık matrisi değerlerine yönelik özelliklere sahip olan özellikmatrices
sahiptir. -
array_value
- Bir değer dizisi döndüren ölçümler için.
Çizim Anahtarları
Çizim Anahtarları metrik anahtarlara benzer, ancak tarihsel nedenlerden ötürü tüm grafik değerleri tek bir protokolde saklanır, dolayısıyla çizim anahtarının bir adı yoktur.
Grafik Değerleri
Desteklenen tüm grafikler PlotData adı verilen tek bir protokolde saklanır.
DeğerlendirmeSonucu
Bir değerlendirme çalıştırmasının dönüşü bir tfma.EvalResult
. Bu kayıt, seviyelerin sırasıyla çıkış adı, sınıf kimliği, metrik adı ve metrik değerine karşılık geldiği çok düzeyli bir dict olarak metrik anahtarını kodlayan slicing_metrics
içerir. Bunun bir Jüpiter dizüstü bilgisayarda kullanıcı arayüzü ekranı için kullanılması amaçlanmıştır. Temel verilere erişim gerekiyorsa bunun yerine metrics
sonuç dosyası kullanılmalıdır (bkz. metrics_for_slice.proto ).
Özelleştirme
Kaydedilmiş kerasları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ın ve ilgili 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 tf.keras.metrics.Metric
uygulamalarıyla genişletmeleri ve ardından metriğin modülünün değerlendirme sırasında kullanılabilir olduğundan emin olmaları gerekir.
Model kaydı sonrasında eklenen metrikler için TFMA'nın, update_state
yöntemine parametre olarak yalnızca etiket (yani y_true), tahmin (y_pred) ve örnek ağırlığı (sample_weight) alan metrikleri desteklediğini unutmayın.
Keras Metrik Örneği
Aşağıda özel keras metriğinin bir ö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 tfma.metrics.Metric
uygulamalarıyla birlikte genişletmeleri ve ardından metriğin modülünün değerlendirme sırasında kullanılabilir olduğundan emin olmaları gerekir.
Metrik
Bir tfma.metrics.Metric
uygulaması, metrik yapılandırmasını tanımlayan bir dizi kwarg'dan ve metrik değerini hesaplamak için gereken hesaplamaları (muhtemelen birden fazla) oluşturmaya yönelik bir işlevden 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 fonksiyona aşağıdaki parametreler girdi olarak iletilecektir:
-
eval_config: tfam.EvalConfig
- Değerlendiriciye iletilen değerlendirme yapılandırması (kullanılacak tahmin anahtarı vb. gibi model spesifikasyon ayarlarını aramak için kullanışlıdır).
-
model_names: List[Text]
- Metriklerin hesaplanacağı model adlarının listesi (Tek model ise Yok)
-
output_names: List[Text]
.- Metriklerin hesaplanacağı çıktı adlarının listesi (Tek model ise Yok)
-
sub_keys: List[tfma.SubKey]
.- Metrikleri hesaplamak için alt anahtarların listesi (sınıf kimliği, üst K, vb.) (veya Hiçbiri)
-
aggregation_type: tfma.AggregationType
- Bir toplama metriği hesaplanıyorsa toplama türü.
-
class_weights: Dict[int, float]
.- Bir toplama metriği hesaplanırken kullanılacak sınıf ağırlıkları.
-
query_key: Text
- Sorgu/sıralama tabanlı bir ölçüm hesaplanırken kullanılan sorgu anahtarı.
Bir metrik bu ayarlardan bir veya daha fazlasıyla ilişkilendirilmemişse bu parametreleri imza tanımının dışında bırakabilir.
Bir ölçüm her model, çıktı ve alt anahtar için aynı şekilde hesaplanırsa, bu girdilerin her biri için aynı hesaplamaları ayrı ayrı gerçekleştirmek üzere tfma.metrics.merge_per_key_computations
yardımcı programı kullanılabilir.
MetrikHesaplama
MetricComputation
preprocessors
ve combiner
birleşiminden oluşur. preprocessors
, girdi olarak özütleri alan ve birleştirici tarafından kullanılacak başlangıç durumunu çıktı olarak veren bir beam.DoFn
olan preprocessor
bir listesidir (özetlerin 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ırayla yürütülecektir. preprocessors
boşsa birleştiriciye StandardMetricInputs (standart metrik girişler etiketleri, tahminleri ve example_weights'ı içerir) aktarılır. combiner
, girdi olarak bir (dilim anahtarı, önişlemci çıkışı) demetini alan ve sonuç olarak bir (slice_key, metrik results dict) demetini çıkaran bir beam.CombineFn
.
Dilimlemenin preprocessors
ve combiner
arasında gerçekleştiğini unutmayın.
Bir metrik hesaplamanın her iki standart metrik girdiyi de kullanmak, ancak bunu features
özütlerindeki birkaç özellik ile genişletmek istemesi durumunda, birden fazla birleştiriciden istenen özellikleri tek bir öğede birleştirecek özel ÖzellikÖnişlemcisinin kullanılabileceğini unutmayın. tüm birleştiricilere aktarılan paylaşılan StandardMetricsInputs değeri (birleştiriciler ilgilendikleri özellikleri okumak ve geri kalanını göz ardı etmekten sorumludur).
Örnek
Aşağıda, SampleCount'un hesaplanmasına yönelik ç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 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}
TüretilmişMetrikHesaplama
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 çıktı olarak verir.
Türetilmiş bir hesaplamanın bağlı olduğu hesaplamaların, bir metrik tarafından oluşturulan hesaplamalar listesine dahil edilmesinin kabul edilebilir (önerilen) olduğunu unutmayın. Bu, birden fazla ölçüm arasında paylaşılan hesaplamaları önceden oluşturma ve aktarma zorunluluğunu ortadan kaldırır. Değerlendirici, aynı tanıma sahip hesaplamaların tekrarlarını otomatik olarak kaldıracak ve böylece yalnızca bir hesaplama gerçekten çalıştırılacaktır.
Örnek
TJUR metrikleri türetilmiş metriklere iyi bir örnek sağlar.