genel bakış
TensorFlow Model Analizi (TFMA) işlem hattı aşağıdaki gibi gösterilmektedir:
Boru hattı dört ana bileşenden oluşur:
- Girişleri Oku
- çıkarma
- Değerlendirme
- Sonuçları Yaz
Bu bileşenler iki ana türden yararlanır: tfma.Extracts
ve tfma.evaluators.Evaluation
. tfma.Extracts
türü, işlem hattı 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 için bu türler, anahtarların farklı uygulamalar tarafından tanımlandığı (kullanım için ayrıldığı) yalnızca diktelerdir. Türler aşağıdaki gibi 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]
Unutmayın ki tfma.Extracts
asla doğrudan yazılmaz, daha sonra yazılan bir tfma.evaluators.Evaluation
üretmek için her zaman bir değerlendiriciden geçmeleri gerekir. Ayrıca, tfma.Extracts
bir beam.pvalue.PCollection
depolanan dikteler olduğuna (yani, beam.PTransform
s beam.pvalue.PCollection[tfma.Extracts]
), oysa tfma.evaluators.Evaluation
öğesinin değerleri olan bir dict olduğuna dikkat edin. beam.pvalue.PCollection
s'dir (yani, beam.PTransform
s, dict'in kendisini beam.value.PCollection
girişi için bağımsız değişken olarak alır). Başka bir deyişle, tfma.evaluators.Evaluation
, boru hattı yapım zamanında kullanılır, ancak tfma.Extracts
, boru hattı çalışma zamanında kullanılır.
Girişleri Oku
ReadInputs
aşaması, ham girdileri (tf.train.Example, CSV, ...) alan ve bunları özütlere dönüştüren bir dönüşümden oluşur. Bugün özler, tfma.INPUT_KEY
altında depolanan ham girdi baytları olarak temsil edilir, ancak özler, çıkarma ardışık düzeniyle uyumlu herhangi bir biçimde olabilir - yani, çıktı olarak tfma.Extracts
oluşturur ve bu özler, aşağı akışla uyumludur. çıkarıcılar. Neye ihtiyaç duyduklarını açıkça belgelemek farklı çıkarıcılara kalmıştır.
çıkarma
Çıkarma işlemi, seri olarak çalıştırılan beam.PTransform
bir listesidir. Çıkarıcılar girdi olarak tfma.Extracts
alır ve çıktı olarak tfma.Extracts
döndürür. Proto-tipik çıkarıcı, okuma girdileri dönüşümü tarafından üretilen girdi özünü kullanan ve tahmin özleri üretmek için bir model aracılığıyla ç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 noktada eklenebilir. Bir çıkarıcı aşağıdaki gibi 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
, ham özellikleri, ham etiketleri ve ham örnek ağırlıklarını tf.train.Example
kayıtlarından metrik dilimleme ve hesaplamalarda kullanmak için çıkarmak için kullanılır. Varsayılan olarak değerler, sırasıyla çıkarma tuşları features
, labels
ve example_weights
altında saklanır. Tek çıkışlı model etiketleri ve örnek ağırlıklar doğrudan np.ndarray
değerleri olarak saklanır. Çok çıkışlı model etiketleri ve örnek ağırlıklar, np.ndarray
değerlerinin dikteleri olarak saklanır (çıktı adına göre anahtarlanır). Çoklu model değerlendirmesi yapılırsa, etiketler ve örnek ağırlıklar başka bir dikte (model adına göre anahtarlanmış) içine gömülecektir.
Tahmin Çıkarıcı
tfma.extractors.PredictExtractor
, model tahminlerini çalıştırır ve bunları tfma.Extracts
anahtar predictions
altında saklar. Tek çıkışlı model tahminleri, doğrudan tahmin edilen çıkış değerleri olarak saklanır. Çok çıkışlı model tahminleri, çıkış değerlerinin bir ifadesi olarak saklanır (çıkış adına göre anahtarlanır). Çok modelli değerlendirme yapılırsa, tahmin başka bir dikte (model adına göre anahtarlanmış) içine gömülür. Kullanılan gerçek çıktı değeri modele bağlıdır (örneğin, TF tahmincisinin bir dikt biçimindeki dönüş çıktıları, keras ise np.ndarray
değerleri döndürür).
DilimAnahtarı Çıkarıcı
tfma.extractors.SliceKeyExtractor
, ayıklanan özelliklere dayalı olarak her örnek girdiye hangi dilimlerin uygulanacağını belirlemek için dilimleme özelliğini kullanır ve değerlendiriciler tarafından daha sonra kullanılmak üzere karşılık gelen dilimleme değerlerini özütlere ekler.
Değerlendirme
Değerlendirme, bir özü alma ve değerlendirme sürecidir. Değerlendirmeyi çıkarma hattının sonunda gerçekleştirmek yaygın olsa da, çıkarma işleminin daha erken aşamalarında değerlendirme gerektiren kullanım durumları vardır. Bu tür değerlendiriciler, çıktılarına karşı değerlendirilmeleri gereken çıkarıcılarla ilişkilendirilir. Bir 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
Değerlendiricinin, girdi olarak tfma.Extracts
alan bir beam.PTransform
olduğuna dikkat edin. Bir uygulamanın, değerlendirme sürecinin bir parçası olarak özler üzerinde ek dönüşümler gerçekleştirmesini engelleyen hiçbir şey yoktur. Bir tfma.Extracts
dict döndürmesi gereken çıkarıcıların aksine, bir değerlendiricinin üretebileceği çıktı türleri üzerinde herhangi bir kısıtlama yoktur, ancak çoğu değerlendirici de bir dict (örneğin metrik adları ve değerleri) döndürür.
Metrikler ve GrafiklerDeğ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 metrikler ve grafik hesaplamaları gerçekleştirir. Metrik sözlükleri şeklinde çıktılar üretir ve anahtarları ve değerleri çizer (bunlar daha sonra çıktı için tfma.writers.MetricsAndPlotsWriter
tarafından 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, çıktı anahtarlarına dayalı olarak verileri yazmak için yazarları kullanır. Örneğin, bir tfma.evaluators.Evaluation
, metrics
ve plots
için anahtarlar içerebilir. Bunlar daha sonra 'metrik' ve 'grafik' adı verilen metrik ve grafik sözlükleriyle ilişkilendirilir. 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
MetriklerVe GrafiklerYazar
Metrikleri ve grafikleri sözlükleri serileştirilmiş protolara dönüştüren ve diske yazan bir tfma.writers.MetricsAndPlotsWriter
sağlıyoruz.
Farklı bir serileştirme formatı kullanmak isterseniz, özel bir yazıcı oluşturabilir ve bunun yerine bunu kullanabilirsiniz. Yazarlara iletilen tfma.evaluators.Evaluation
, tüm değerlendiricilerin birleştirilmiş çıktısını içerdiğinden, yazarların uygun beam.PCollection
seçmek için ptransform
uygulamalarında kullanabilecekleri bir tfma.writers.Write
yardımcı dönüşümü sağlanır. çıkış anahtarı (bir örnek için aşağıya bakın).
özelleştirme
tfma.run_model_analysis
yöntemi, ardışık düzen tarafından kullanılan çıkarıcıları, değerlendiricileri ve yazarları özelleştirmek için extractors
, evaluators
ve writers
bağımsız değişkenlerini alır. Herhangi 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, bir beam.PTransform
sarmalayan bir tfma.extractors.Extractor
tfma.Extracts
tfma.Extracts
. Çıkarıcı örnekleri tfma.extractors
altında mevcuttur.
Özel Değerlendiriciler
Özel bir değerlendirici oluşturmak için, bir beam.PTransform
sarmalayan bir tfma.evaluators.Evaluator
tfma.evaluators.Evaluation
tfma.Extracts
. Çok basit bir değerlendirici, gelen tfma.Extracts
alıp bir tabloda depolamak için çıkarabilir. Bu tam olarak tfma.evaluators.AnalysisTableEvaluator
yaptığı şeydir. Daha karmaşık bir değerlendirici, ek işleme ve veri toplama işlemi gerçekleştirebilir. Örnek olarak tfma.evaluators.MetricsAndPlotsEvaluator
bakın.
tfma.evaluators.MetricsAndPlotsEvaluator
kendisinin özel metrikleri destekleyecek şekilde özelleştirilebileceğini unutmayın (daha fazla ayrıntı için metriklere bakın).
Özel Yazarlar
Özel bir yazar oluşturmak için, bir beam.PTransform sarmalayan bir tfma.writers.Writer
türü oluşturun. beam.PTransform
öğesini girdi olarak alıp tfma.evaluators.Evaluation
öğesini çıktı olarak beam.pvalue.PDone
. Aşağıdaki, metrikleri içeren TFRecords'u yazmak için bir yazara ilişkin temel bir örnektir:
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, ilişkili değerlendiricinin çıktısına bağlıdır. Yukarıdaki örnek için çıktı, tfma.evaluators.MetricsAndPlotsEvaluator
tarafından üretilen serileştirilmiş bir protokoldür. tfma.evaluators.AnalysisTableEvaluator için bir yazar, tfma.evaluators.AnalysisTableEvaluator
için bir beam.pvalue.PCollection
yazmaktan sorumlu tfma.Extracts
.
Bir yazarın, kullanılan çıktı anahtarı aracılığıyla bir değerlendiricinin çıktısı ile ilişkilendirildiğini unutmayın (örn. tfma.METRICS_KEY
, tfma.ANALYSIS_KEY
, vb.).
Adım Adım Örnek
Aşağıda, hem tfma.evaluators.MetricsAndPlotsEvaluator
hem de tfma.evaluators.AnalysisTableEvaluator
kullanıldığında çıkarma ve değerlendirme ardışık düzeninde yer alan adımlara bir örnek 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