Tensorflow Model Analiz Mimarisi

genel bakış

TensorFlow Model Analizi (TFMA) işlem hattı aşağıdaki gibi gösterilmektedir:

TFMA Boru Hattı

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