Genel Bakış
TensorFlow Model Analizi (TFMA) hattı şu şekilde gösterilmektedir:
Boru hattı dört ana bileşenden oluşur:
- Girişleri Oku
- Ekstraksiyon
- Değerlendirme
- Sonuçları Yaz
Bu bileşenler iki ana türden yararlanır: tfma.Extracts
ve tfma.evaluators.Evaluation
. tfma.Extracts
türü, ardışık düzen işleme sırasında çıkarılan verileri temsil eder ve model için bir veya daha fazla örneğe karşılık gelebilir. tfma.evaluators.Evaluation
ekstraksiyon işlemi sırasında çeşitli noktalarda ekstraktların değerlendirilmesinden elde edilen çıktıyı temsil eder. Esnek bir API sağlamak amacıyla, bu türler yalnızca anahtarların farklı uygulamalar tarafından tanımlandığı (kullanım için ayrıldığı) dict'lerdir. Türler şu şekilde tanımlanır:
# Extracts represent data extracted during pipeline processing.
# For example, the PredictExtractor stores the data for the
# features, labels, and predictions under the keys "features",
# "labels", and "predictions".
Extracts = Dict[Text, Any]
# Evaluation represents the output from evaluating extracts at
# particular point in the pipeline. The evaluation outputs are
# keyed by their associated output type. For example, the metric / plot
# dictionaries from evaluating metrics and plots will be stored under
# "metrics" and "plots" respectively.
Evaluation = Dict[Text, beam.pvalue.PCollection]
tfma.Extracts
asla doğrudan yazılmadığını, daha sonra yazılan bir tfma.evaluators.Evaluation
oluşturmak için her zaman bir değerlendiriciden geçmesi gerektiğini unutmayın. Ayrıca tfma.Extracts
bir beam.pvalue.PCollection
içinde depolanan dikteler olduğunu unutmayın (yani, beam.PTransform
s beam.pvalue.PCollection[tfma.Extracts]
girişi olarak alır), oysa bir tfma.evaluators.Evaluation
, değerleri olan bir diktedir. beam.pvalue.PCollection
s'dir (yani, beam.PTransform
s beam.value.PCollection
dict'in kendisinibeam.value.PCollection girişinin argümanı olarak alır). Başka bir deyişle tfma.evaluators.Evaluation
işlem hattı inşaatı sırasında kullanılır, ancak tfma.Extracts
hattı çalışma zamanında kullanılır.
Girişleri Oku
ReadInputs
aşaması, ham girdileri (tf.train.Example, CSV, ...) alan ve bunları alıntılara dönüştüren bir dönüşümden oluşur. Günümüzde alıntılar, tfma.INPUT_KEY
altında depolanan ham giriş baytları olarak temsil edilmektedir, ancak alıntılar, çıkarma ardışık düzeniyle uyumlu herhangi bir biçimde olabilir; bu, çıktı olarak tfma.Extracts
oluşturduğu ve bu alıntıların aşağı akış ile uyumlu olduğu anlamına gelir. çıkarıcılar. Neye ihtiyaç duyduklarını açıkça belgelemek farklı çıkarıcıların sorumluluğundadır.
Ekstraksiyon
Çıkarma işlemi seri olarak çalıştırılan beam.PTransform
bir listesidir. Çıkarıcılar tfma.Extracts
girdi olarak alır ve tfma.Extracts
çıktı olarak döndürür. Proto-tipik çıkarıcı, okuma girdileri dönüşümü tarafından üretilen girdi çıkarımını kullanan ve tahmin çıkarımları üretmek için bunu bir model boyunca çalıştıran tfma.extractors.PredictExtractor
. Özelleştirilmiş çıkarıcılar, dönüşümlerinin tfma.Extracts
in ve tfma.Extracts
out API'sine uyması koşuluyla herhangi bir noktaya eklenebilir. Bir çıkarıcı şu şekilde tanımlanır:
# An Extractor is a PTransform that takes Extracts as input and returns
# Extracts as output. A typical example is a PredictExtractor that receives
# an 'input' placeholder for input and adds additional 'predictions' extracts.
Extractor = NamedTuple('Extractor', [
('stage_name', Text),
('ptransform', beam.PTransform)]) # Extracts -> Extracts
Giriş Çıkarıcı
tfma.extractors.InputExtractor
metrik dilimleme ve hesaplamalarda kullanılmak üzere tf.train.Example
kayıtlarından ham özellikleri, ham etiketleri ve ham örnek ağırlıklarını çıkarmak için kullanılır. Varsayılan olarak değerler sırasıyla features
, labels
ve example_weights
çıkarma tuşları altında saklanır. Tek çıkışlı model etiketleri ve örnek ağırlıkları doğrudan np.ndarray
değerleri olarak saklanır. Çoklu çıkışlı model etiketleri ve örnek ağırlıklar, np.ndarray
değerlerinin dikteleri olarak saklanır (çıkış adına göre anahtarlanır). Çoklu model değerlendirmesi yapılırsa, etiketler ve örnek ağırlıklar başka bir dict içerisine (model adına göre anahtarlanmış) eklenecektir.
Tahmin Çıkarıcı
tfma.extractors.PredictExtractor
model tahminlerini çalıştırır ve bunları tfma.Extracts
dict'deki anahtar predictions
altında saklar. Tek çıkışlı model tahminleri doğrudan tahmin edilen çıkış değerleri olarak saklanır. Çoklu çıkış modeli tahminleri, çıkış değerlerinin bir diktesi olarak saklanır (çıkış adına göre anahtarlanır). Çoklu model değerlendirmesi yapılırsa tahmin başka bir dikteye (model adına göre anahtarlanmış) eklenecektir. Kullanılan gerçek çıktı değeri modele bağlıdır (örneğin, TF tahmincisinin çıktıları dict biçiminde dönerken keras, np.ndarray
değerlerini döndürür).
Dilim Anahtarı Çıkarıcı
tfma.extractors.SliceKeyExtractor
çıkarılan özelliklere göre her örnek girişe hangi dilimlerin uygulanacağını belirlemek için dilimleme spesifikasyonunu kullanır ve karşılık gelen dilimleme değerlerini değerlendiriciler tarafından daha sonra kullanılmak üzere ekstrelere ekler.
Değerlendirme
Değerlendirme, bir alıntı alıp onu değerlendirme sürecidir. Değerlendirmenin ekstraksiyon hattının sonunda yapılması yaygın olsa da, ekstraksiyon sürecinde daha erken değerlendirme gerektiren kullanım durumları da vardır. Bu tür değerlendiriciler, çıktılarının değerlendirilmesi gereken çıkarıcılarla ilişkilidir. Değerlendirici şu şekilde tanımlanır:
# An evaluator is a PTransform that takes Extracts as input and
# produces an Evaluation as output. A typical example of an evaluator
# is the MetricsAndPlotsEvaluator that takes the 'features', 'labels',
# and 'predictions' extracts from the PredictExtractor and evaluates
# them using post export metrics to produce metrics and plots dictionaries.
Evaluator = NamedTuple('Evaluator', [
('stage_name', Text),
('run_after', Text), # Extractor.stage_name
('ptransform', beam.PTransform)]) # Extracts -> Evaluation
Bir değerlendiricinin, tfma.Extracts
girdi olarak alan bir beam.PTransform
olduğuna dikkat edin. Bir uygulamanın, değerlendirme sürecinin bir parçası olarak alıntılar üzerinde ek dönüşümler gerçekleştirmesini engelleyen hiçbir şey yoktur. Bir tfma.Extracts
diktesi döndürmesi gereken çıkarıcılardan farklı olarak, çoğu değerlendirici aynı zamanda bir dikte (örneğin, metrik adları ve değerleri) döndürse de, bir değerlendiricinin üretebileceği çıktı türleri üzerinde herhangi bir kısıtlama yoktur.
MetricsAndPlotsDeğerlendirici
tfma.evaluators.MetricsAndPlotsEvaluator
girdi olarak features
, labels
ve predictions
alır, bunları dilimlere göre gruplandırmak için tfma.slicer.FanoutSlices
aracılığıyla çalıştırır ve ardından ölçümler ve grafik hesaplamaları gerçekleştirir. Metrik ve grafik anahtarları ve değerlerinin sözlükleri biçiminde çıktılar üretir (bunlar daha sonra tfma.writers.MetricsAndPlotsWriter
tarafından çıktı için serileştirilmiş protokollere dönüştürülür).
Sonuçları Yaz
WriteResults
aşaması, değerlendirme çıktısının diske yazıldığı yerdir. WriteResults, verileri çıkış anahtarlarına göre yazmak için yazarları kullanır. Örneğin, bir tfma.evaluators.Evaluation
metrics
ve plots
için anahtarlar içerebilir. Bunlar daha sonra 'metrikler' ve 'grafikler' adı verilen metrikler ve grafikler sözlükleriyle ilişkilendirilecektir. Yazarlar her dosyanın nasıl yazılacağını belirtir:
# A writer is a PTransform that takes evaluation output as input and
# serializes the associated PCollections of data to a sink.
Writer = NamedTuple('Writer', [
('stage_name', Text),
('ptransform', beam.PTransform)]) # Evaluation -> PDone
MetriklerVePlotlarYazar
Metrikleri ve grafikleri sözlükleri serileştirilmiş protokollere dönüştüren ve bunları diske yazan bir tfma.writers.MetricsAndPlotsWriter
sağlıyoruz.
Farklı bir serileştirme formatı kullanmak isterseniz özel bir yazıcı oluşturabilir ve onun yerine bunu kullanabilirsiniz. Yazarlara iletilen tfma.evaluators.Evaluation
tüm değerlendiricilerin çıktısını içerdiğinden, yazarların uygun beam.PCollection
temel alarak seçmek için ptransform
uygulamalarında kullanabilecekleri bir tfma.writers.Write
yardımcı dönüşümü sağlanır. çıkış anahtarı (örnek için aşağıya bakın).
Özelleştirme
tfma.run_model_analysis
yöntemi, ardışık düzen tarafından kullanılan extractors
, evaluators
ve writers
özelleştirmek için çıkarıcılar, değerlendiriciler ve yazarlar argümanlarını alır. Hiçbir bağımsız değişken sağlanmazsa, varsayılan olarak tfma.default_extractors
, tfma.default_evaluators
ve tfma.default_writers
kullanılır.
Özel Çıkarıcılar
Özel bir çıkarıcı oluşturmak için, tfma.Extracts
girdi olarak alan ve tfma.Extracts
çıktı olarak döndüren bir beam.PTransform
saran bir tfma.extractors.Extractor
türü oluşturun. Çıkarıcı örnekleri tfma.extractors
altında mevcuttur.
Özel Değerlendiriciler
Özel bir değerlendirici oluşturmak için, tfma.Extracts
girdi olarak alan ve tfma.evaluators.Evaluation
çıktı olarak döndüren bir beam.PTransform
saran bir tfma.evaluators.Evaluator
türü oluşturun. Çok basit bir değerlendirici, gelen tfma.Extracts
dosyasını alıp bunları bir tabloda saklamak üzere çıktı olarak alabilir. Bu tam olarak tfma.evaluators.AnalysisTableEvaluator
yaptığı şeydir. Daha karmaşık bir değerlendirici ek işleme ve veri toplama işlemlerini gerçekleştirebilir. Örnek olarak tfma.evaluators.MetricsAndPlotsEvaluator
bakın.
tfma.evaluators.MetricsAndPlotsEvaluator
kendisinin özel ölçümleri destekleyecek şekilde özelleştirilebileceğini unutmayın (daha fazla ayrıntı için ölçümlere bakın).
Özel Yazarlar
Özel bir yazıcı oluşturmak için, giriş olarak tfma.evaluators.Evaluation
alan ve çıktı olarak beam.pvalue.PDone
döndüren bir beam.PTransform
saran bir tfma.writers.Writer
türü oluşturun. Aşağıda, ölçümleri içeren TFRecord'ları yazmaya yönelik temel bir yazıcı örneği verilmiştir:
tfma.writers.Writer(
stage_name='WriteTFRecord(%s)' % tfma.METRICS_KEY,
ptransform=tfma.writers.Write(
key=tfma.METRICS_KEY,
ptransform=beam.io.WriteToTFRecord(file_path_prefix=output_file))
Bir yazarın girdileri ilgili değerlendiricinin çıktısına bağlıdır. Yukarıdaki örnekte çıktı, tfma.evaluators.MetricsAndPlotsEvaluator
tarafından üretilen serileştirilmiş bir protokoldür. tfma.evaluators.AnalysisTableEvaluator
yazarı, tfma.Extracts
bir beam.pvalue.PCollection
yazmaktan sorumlu olacaktır.
Bir yazarın, kullanılan çıkış anahtarı (örn. tfma.METRICS_KEY
, tfma.ANALYSIS_KEY
, vb.) aracılığıyla bir değerlendiricinin çıkışıyla ilişkilendirildiğine dikkat edin.
Adım Adım Örnek
Aşağıda, hem tfma.evaluators.MetricsAndPlotsEvaluator
hem de tfma.evaluators.AnalysisTableEvaluator
kullanıldığında çıkarma ve değerlendirme hattında yer alan adımların bir örneği verilmiştir:
run_model_analysis(
...
extractors=[
tfma.extractors.InputExtractor(...),
tfma.extractors.PredictExtractor(...),
tfma.extractors.SliceKeyExtrator(...)
],
evaluators=[
tfma.evaluators.MetricsAndPlotsEvaluator(...),
tfma.evaluators.AnalysisTableEvaluator(...)
])
ReadInputs
# Out
Extracts {
'input': bytes # CSV, Proto, ...
}
ExtractAndEvaluate
# In: ReadInputs Extracts
# Out:
Extracts {
'input': bytes # CSV, Proto, ...
'features': tensor_like # Raw features
'labels': tensor_like # Labels
'example_weights': tensor_like # Example weights
}
# In: InputExtractor Extracts
# Out:
Extracts {
'input': bytes # CSV, Proto, ...
'features': tensor_like # Raw features
'labels': tensor_like # Labels
'example_weights': tensor_like # Example weights
'predictions': tensor_like # Predictions
}
# In: PredictExtractor Extracts
# Out:
Extracts {
'features': tensor_like # Raw features
'labels': tensor_like # Labels
'example_weights': tensor_like # Example weights
'predictions': tensor_like # Predictions
'slice_key': Tuple[bytes...] # Slice
}
-
tfma.evaluators.MetricsAndPlotsEvaluator
(run_after:SLICE_KEY_EXTRACTOR_STAGE_NAME
)
# In: SliceKeyExtractor Extracts
# Out:
Evaluation {
'metrics': PCollection[Tuple[slicer.SliceKeyType, Dict[Text, Any]]] # Tuples of (slice key, dictionary from metric key to metric values)
'plots': PCollection[Tuple[slicer.SliceKeyType, Dict[Text, Any]]] # Tuples of (slice key, dictionary from plot key to plot values)
}
-
tfma.evaluators.AnalysisTableEvaluator
(run_after:LAST_EXTRACTOR_STAGE_NAME
)
# In: SliceKeyExtractor Extracts
# Out:
Evaluation {
'analysis': PCollection[Extracts] # Final Extracts
}
WriteResults
# In:
Evaluation {
'metrics': PCollection[Tuple[slicer.SliceKeyType, Dict[Text, Any]]] # Tuples of (slice key, dictionary from metric key to metric values)
'plots': PCollection[Tuple[slicer.SliceKeyType, Dict[Text, Any]]] # Tuples of (slice key, dictionary from plot key to plot values)
'analysis': PCollection[Extracts] # Final Extracts
}
# Out: metrics, plots, and analysis files