Tensorflow Model Analiz Mimarisi

Genel Bakış

TensorFlow Model Analizi (TFMA) hattı şu şekilde gösterilmektedir:

TFMA Boru Hattı

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
}
# 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)
}
# 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