Ringkasan
Pipeline TensorFlow Model Analysis (TFMA) digambarkan sebagai berikut:
Pipa terdiri dari empat komponen utama:
- Baca Masukan
- Ekstraksi
- Evaluasi
- Tulis Hasil
Komponen ini menggunakan dua tipe utama: tfma.Extracts
dan tfma.evaluators.Evaluation
. Jenis tfma.Extracts
mewakili data yang diekstraksi selama pemrosesan pipa dan mungkin sesuai dengan satu atau lebih contoh untuk model. tfma.evaluators.Evaluation
merupakan output dari evaluasi ekstrak di berbagai titik selama proses ekstraksi. Untuk menyediakan API yang fleksibel, tipe ini hanyalah dicts di mana kuncinya didefinisikan (dicadangkan untuk digunakan) oleh implementasi yang berbeda. Jenis-jenisnya didefinisikan sebagai berikut:
# 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]
Perhatikan bahwa tfma.Extracts
tidak pernah ditulis secara langsung mereka harus selalu melalui evaluator untuk menghasilkan tfma.evaluators.Evaluation
yang kemudian ditulis. Perhatikan juga bahwa tfma.Extracts
adalah dicts yang disimpan dalam beam.pvalue.PCollection
(yaitu beam.PTransform
s mengambil sebagai input beam.pvalue.PCollection[tfma.Extracts]
) sedangkan tfma.evaluators.Evaluation
adalah dict yang nilainya adalah beam.pvalue.PCollection
s (yaitu beam.PTransform
s mengambil dict itu sendiri sebagai argumen untuk input beam.value.PCollection
). Dengan kata lain tfma.evaluators.Evaluation
digunakan pada waktu konstruksi pipeline, tetapi tfma.Extracts
digunakan pada saat pipeline runtime.
Baca Masukan
Tahap ReadInputs
terdiri dari transformasi yang mengambil input mentah (tf.train.Example, CSV, ...) dan mengubahnya menjadi ekstrak. Hari ini ekstrak direpresentasikan sebagai byte input mentah yang disimpan di bawah tfma.INPUT_KEY
, namun ekstrak dapat dalam bentuk apa pun yang kompatibel dengan pipa ekstraksi -- artinya ia membuat tfma.Extracts
sebagai output, dan ekstrak tersebut kompatibel dengan hilir ekstraktor. Terserah ekstraktor yang berbeda untuk dengan jelas mendokumentasikan apa yang mereka butuhkan.
Ekstraksi
Proses ekstraksi adalah daftar beam.PTransform
s yang dijalankan secara seri. Ekstraktor mengambil tfma.Extracts
sebagai input dan mengembalikan tfma.Extracts
sebagai output. Ekstraktor proto-tipikal adalah tfma.extractors.PredictExtractor
yang menggunakan ekstrak input yang dihasilkan oleh transformasi input baca dan menjalankannya melalui model untuk menghasilkan ekstrak prediksi. Ekstraktor yang disesuaikan dapat dimasukkan kapan saja asalkan transformasinya sesuai dengan tfma.Extracts
in dan tfma.Extracts
out API. Sebuah extractor didefinisikan sebagai berikut:
# 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
InputExtractor
tfma.extractors.InputExtractor
digunakan untuk mengekstrak fitur mentah, label mentah, dan bobot contoh mentah dari catatan tf.train.Example
untuk digunakan dalam pemotongan dan penghitungan metrik. Secara default, nilai disimpan di bawah features
kunci ekstrak, labels
, dan example_weights
masing-masing. Label model keluaran tunggal dan bobot contoh disimpan langsung sebagai nilai np.ndarray
. Label model multi-output dan bobot contoh disimpan sebagai dikte nilai np.ndarray
(dikunci dengan nama output). Jika evaluasi multi-model dilakukan, label dan bobot contoh akan dimasukkan lebih jauh ke dalam dict lain (dikunci dengan nama model).
PredictExtractor
tfma.extractors.PredictExtractor
menjalankan prediksi model dan menyimpannya di bawah predictions
kunci di dict tfma.Extracts
. Prediksi model keluaran tunggal disimpan langsung sebagai nilai keluaran yang diprediksi. Prediksi model multi-output disimpan sebagai dict nilai output (dikunci dengan nama output). Jika evaluasi multi-model dilakukan, prediksi akan dimasukkan lebih jauh ke dalam dict lain (dikunci dengan nama model). Nilai keluaran aktual yang digunakan bergantung pada model (misalnya keluaran kembalian penaksir TF dalam bentuk dict sedangkan keras mengembalikan nilai np.ndarray
).
SliceKeyExtractor
tfma.extractors.SliceKeyExtractor
menggunakan spesifikasi slicing untuk menentukan irisan mana yang berlaku untuk setiap input contoh berdasarkan fitur yang diekstraksi dan menambahkan nilai slicing yang sesuai ke ekstrak untuk digunakan nanti oleh evaluator.
Evaluasi
Evaluasi adalah proses mengambil ekstrak dan mengevaluasinya. Meskipun biasanya melakukan evaluasi di akhir jalur ekstraksi, ada kasus penggunaan yang memerlukan evaluasi lebih awal dalam proses ekstraksi. Dengan demikian, evaluator terkait dengan ekstraktor yang outputnya harus dievaluasi. Seorang evaluator didefinisikan sebagai berikut:
# 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
Perhatikan bahwa evaluator adalah beam.PTransform
yang mengambil tfma.Extracts
sebagai input. Tidak ada yang menghentikan implementasi dari melakukan transformasi tambahan pada ekstrak sebagai bagian dari proses evaluasi. Tidak seperti ekstraktor yang harus mengembalikan dict tfma.Extracts
, tidak ada batasan pada jenis output yang dapat dihasilkan oleh evaluator meskipun sebagian besar evaluator juga mengembalikan dict (misalnya nama metrik dan nilai).
MetricsAndPlotsEvaluator
tfma.evaluators.MetricsAndPlotsEvaluator
mengambil features
, labels
, dan predictions
sebagai masukan, menjalankannya melalui tfma.slicer.FanoutSlices
untuk mengelompokkannya berdasarkan irisan, lalu melakukan penghitungan metrik dan plot. Ini menghasilkan output dalam bentuk kamus metrik dan kunci plot dan nilai (ini kemudian dikonversi ke proto serial untuk output oleh tfma.writers.MetricsAndPlotsWriter
).
Tulis Hasil
Tahap WriteResults
adalah tempat output evaluasi ditulis ke disk. WriteResults menggunakan penulis untuk menulis data berdasarkan kunci keluaran. Misalnya, tfma.evaluators.Evaluation
mungkin berisi kunci untuk metrics
dan plots
. Ini kemudian akan dikaitkan dengan kamus metrik dan plot yang disebut 'metrik' dan 'plot'. Penulis menentukan cara menulis setiap file:
# 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
MetricsAndPlotsWriter
Kami menyediakan tfma.writers.MetricsAndPlotsWriter
yang mengubah kamus metrik dan plot menjadi proto serial dan menulisnya ke disk.
Jika Anda ingin menggunakan format serialisasi yang berbeda, Anda dapat membuat penulis kustom dan menggunakannya sebagai gantinya. Karena tfma.evaluators.Evaluation
yang diteruskan ke penulis berisi output untuk semua gabungan evaluator, transformasi helper tfma.writers.Write
disediakan bahwa penulis dapat menggunakan dalam implementasi ptransform
mereka untuk memilih balok yang beam.PCollection
s berdasarkan pada kunci output (lihat di bawah untuk contoh).
Kustomisasi
Metode tfma.run_model_analysis
mengambil argumen extractors
, evaluators
, dan writers
untuk menyesuaikan ekstraktor, evaluator, dan penulis yang digunakan oleh pipeline. Jika tidak ada argumen yang diberikan maka tfma.default_extractors
, tfma.default_evaluators
, dan tfma.default_writers
digunakan secara default.
Ekstraktor Kustom
Untuk membuat ekstraktor kustom, buat jenis tfma.extractors.Extractor
yang membungkus beam.PTransform
mengambil tfma.Extracts
sebagai input dan mengembalikan tfma.Extracts
sebagai output. Contoh ekstraktor tersedia di bawah tfma.extractors
.
Evaluator Kustom
Untuk membuat evaluator kustom, buat jenis tfma.evaluators.Evaluator
yang membungkus beam.PTransform
mengambil tfma.Extracts
sebagai input dan mengembalikan tfma.evaluators.Evaluation
sebagai output. Seorang evaluator yang sangat mendasar mungkin hanya mengambil tfma.Extracts
yang masuk dan mengeluarkannya untuk disimpan dalam sebuah tabel. Inilah yang dilakukan oleh tfma.evaluators.AnalysisTableEvaluator
. Evaluator yang lebih rumit mungkin melakukan pemrosesan tambahan dan agregasi data. Lihat tfma.evaluators.MetricsAndPlotsEvaluator
sebagai contoh.
Perhatikan bahwa tfma.evaluators.MetricsAndPlotsEvaluator
itu sendiri dapat disesuaikan untuk mendukung metrik khusus (lihat metrik untuk detail selengkapnya).
Penulis Kustom
Untuk membuat penulis kustom, buat tipe tfma.writers.Writer
yang membungkus beam.PTransform
mengambil tfma.evaluators.Evaluation
sebagai input dan mengembalikan beam.pvalue.PDone
sebagai output. Berikut ini adalah contoh dasar penulis untuk menulis TFRecords yang berisi metrik:
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))
Input seorang penulis bergantung pada output dari evaluator terkait. Untuk contoh di atas, outputnya adalah proto serial yang diproduksi oleh tfma.evaluators.MetricsAndPlotsEvaluator
. Seorang penulis untuk tfma.evaluators.AnalysisTableEvaluator
akan bertanggung jawab untuk menulis beam.pvalue.PCollection
dari tfma.Extracts
.
Perhatikan bahwa penulis diasosiasikan dengan keluaran evaluator melalui kunci keluaran yang digunakan (misalnya tfma.METRICS_KEY
, tfma.ANALYSIS_KEY
, dll).
Contoh Langkah demi Langkah
Berikut ini adalah contoh langkah-langkah yang terlibat dalam pipa ekstraksi dan evaluasi saat tfma.evaluators.MetricsAndPlotsEvaluator
dan tfma.evaluators.AnalysisTableEvaluator
digunakan:
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