Tổng quan
Đường ống phân tích mô hình TensorFlow (TFMA) được mô tả như sau:
Đường ống được tạo thành từ bốn thành phần chính:
- Đọc đầu vào
- Khai thác
- Sự đánh giá
- Viết kết quả
Các thành phần này sử dụng hai loại chính: tfma.Extracts
và tfma.evaluators.Evaluation
. Kiểu tfma.Extracts
đại diện cho dữ liệu được trích xuất trong quá trình xử lý đường ống và có thể tương ứng với một hoặc nhiều ví dụ cho mô hình. tfma.evaluators.Evaluation
biểu thị kết quả đầu ra từ việc đánh giá các chất chiết xuất tại các điểm khác nhau trong quá trình chiết xuất. Để cung cấp một API linh hoạt, các loại này chỉ là các phân đoạn trong đó các khóa được xác định (dành riêng để sử dụng) bởi các triển khai khác nhau. Các loại được định nghĩa như sau:
# 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]
Lưu ý rằng tfma.Extracts
không bao giờ được viết ra trực tiếp, chúng luôn phải thông qua một người đánh giá để tạo ra một tfma.evaluators.Evaluation
sau đó được viết ra. Cũng lưu ý rằng tfma.Extracts
là các dict được lưu trữ trong một beam.pvalue.PCollection
(tức là beam.PTransform
s lấy làm đầu vào beam.pvalue.PCollection[tfma.Extracts]
) trong khi tfma.evaluators.Evaluation
là một chính sách có các giá trị là beam.pvalue.PCollection
s (tức là beam.PTransform
s lấy chính dict làm đối số cho đầu vào beam.value.PCollection
). Nói cách khác, tfma.evaluators.Evaluation
được sử dụng trong thời gian xây dựng đường ống, nhưng tfma.Extracts
được sử dụng trong thời gian chạy đường ống.
Đọc đầu vào
Giai đoạn ReadInputs
được tạo thành từ một phép biến đổi lấy đầu vào thô (tf.train.Example, CSV, ...) và chuyển đổi chúng thành phần trích xuất. Ngày nay các phần chiết xuất được biểu diễn dưới dạng các byte đầu vào thô được lưu trữ dưới tfma.INPUT_KEY
, tuy nhiên các phần trích xuất có thể ở bất kỳ dạng nào tương thích với đường ống trích xuất - nghĩa là nó tạo ra tfma.Extracts
. máy vắt sổ. Tùy thuộc vào các trình trích xuất khác nhau để ghi lại rõ ràng những gì họ yêu cầu.
Khai thác
Quá trình trích xuất là một danh sách các beam.PTransform
được chạy theo chuỗi. Bộ giải nén lấy tfma.Extracts
làm đầu vào và trả về tfma.Extracts
làm đầu ra. Trình trích xuất điển hình là tfma.extractors.PredictExtractor
sử dụng trích xuất đầu vào được tạo ra bởi biến đổi đầu vào đọc và chạy nó thông qua một mô hình để tạo ra các trích xuất dự đoán. Các trình trích xuất tùy chỉnh có thể được chèn vào bất kỳ lúc nào miễn là các biến đổi của chúng tuân theo tfma.Extracts
in và tfma.Extracts
out. Một bộ giải nén được định nghĩa như sau:
# 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
được sử dụng để trích xuất các đối tượng địa lý thô, nhãn thô và trọng số ví dụ thô từ các bản ghi tf.train.Example
để sử dụng trong phân loại và tính toán số liệu. Theo mặc định, các giá trị được lưu trữ trong các features
, labels
và example_weights
của khóa trích xuất tương ứng. Các nhãn mô hình đầu ra đơn và trọng số ví dụ được lưu trữ trực tiếp dưới dạng giá trị np.ndarray
. Nhãn mô hình nhiều đầu ra và trọng số ví dụ được lưu trữ dưới dạng các giá trị np.ndarray
(được khóa bằng tên đầu ra). Nếu đánh giá đa mô hình được thực hiện, các nhãn và trọng số ví dụ sẽ được nhúng thêm vào trong một chính tả khác (được khóa bằng tên mô hình).
Dự đoán
Các tfma.extractors.P Dự tfma.extractors.PredictExtractor
chạy các dự đoán của mô hình và lưu trữ chúng dưới các predictions
quan trọng trong tfma.Extracts
dict. Các dự đoán của mô hình một đầu ra được lưu trữ trực tiếp dưới dạng các giá trị đầu ra được dự đoán. Các dự đoán của mô hình nhiều đầu ra được lưu trữ dưới dạng một lệnh của các giá trị đầu ra (được khóa bằng tên đầu ra). Nếu đánh giá đa mô hình được thực hiện, dự đoán sẽ được nhúng thêm vào trong một mệnh lệnh khác (được khóa bằng tên mô hình). Giá trị đầu ra thực tế được sử dụng phụ thuộc vào mô hình (ví dụ: kết quả trả về của công cụ ước tính TF ở dạng dict trong khi keras trả về giá trị np.ndarray
).
SliceKeyExtractor
tfma.extractors.SliceKeyExtractor
sử dụng thông số kỹ thuật cắt để xác định lát nào áp dụng cho mỗi đầu vào ví dụ dựa trên các tính năng được trích xuất và thêm các giá trị cắt tương ứng cốt lõi vào phần trích xuất để người đánh giá sử dụng sau này.
Sự đánh giá
Đánh giá là quá trình lấy một chiết xuất và đánh giá nó. Mặc dù thông thường thực hiện đánh giá ở cuối đường ống khai thác, nhưng có những trường hợp sử dụng yêu cầu đánh giá sớm hơn trong quá trình khai thác. Vì các bộ đánh giá như vậy được liên kết với các bộ trích xuất có đầu ra mà chúng phải được đánh giá dựa trên. Người đánh giá được định nghĩa như sau:
# 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
Lưu ý rằng bộ đánh giá là một beam.PTransform
lấy tfma.Extracts
làm đầu vào. Không có gì ngăn cản việc triển khai thực hiện các phép biến đổi bổ sung trên các phần trích xuất như một phần của quá trình đánh giá. Không giống như các trình trích xuất phải trả về một tfma.Extracts
.
MetricsAndPlotsEvaluator
tfma.evaluators.MetricsAndPlotsEvaluator
lấy features
, labels
và predictions
làm đầu vào, chạy chúng thông qua tfma.slicer.FanoutSlices
để nhóm chúng theo từng phần, sau đó thực hiện các phép tính số liệu và biểu đồ. Nó tạo ra các kết quả đầu ra dưới dạng từ điển số liệu và vẽ các khóa và giá trị (sau này được chuyển đổi thành các giao thức tuần tự hóa để xuất ra bởi tfma.writers.MetricsAndPlotsWriter
).
Viết kết quả
Giai đoạn WriteResults
là nơi kết quả đánh giá được ghi ra đĩa. WriteResults sử dụng các trình ghi để ghi ra dữ liệu dựa trên các phím xuất. Ví dụ: tfma.evaluators.Evaluation
có thể chứa các khóa cho metrics
và biểu plots
. Sau đó, chúng sẽ được kết hợp với từ điển chỉ số và biểu đồ được gọi là 'số liệu' và 'biểu đồ'. Người viết chỉ định cách ghi ra từng tệp:
# 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
Chúng tôi cung cấp tfma.writers.MetricsAndPlotsWriter
chuyển đổi từ điển số liệu và sơ đồ thành các giao thức tuần tự và ghi chúng vào đĩa.
Nếu bạn muốn sử dụng một định dạng tuần tự hóa khác, bạn có thể tạo một trình viết tùy chỉnh và sử dụng định dạng đó thay thế. Vì tfma.evaluators.Evaluation
được chuyển cho người viết chứa kết quả đầu ra cho tất cả các trình đánh giá được kết hợp, nên một biến đổi trình trợ giúp tfma.writers.Write
được cung cấp để người viết có thể sử dụng trong triển khai ptransform
của họ để chọn beam.PCollection
thích hợp. phím đầu ra (xem ví dụ bên dưới).
Tùy biến
Phương thức tfma.run_model_analysis
nhận đối số trình extractors
, trình evaluators
và trình writers
để tùy chỉnh trình trích xuất, trình đánh giá và trình ghi được sử dụng bởi đường ống. Nếu không có đối số nào được cung cấp thì tfma.default_extractors
, tfma.default_evaluators
và tfma.default_writers
được sử dụng theo mặc định.
Trích xuất tùy chỉnh
Để tạo một trình trích xuất tùy chỉnh, hãy tạo một kiểu tfma.extractors.Extractor
bao bọc một beam.PTransform
lấy tfma.Extracts
làm đầu vào và trả về tfma.Extracts
làm đầu ra. Ví dụ về trình trích xuất có sẵn trong tfma.extractors
.
Người đánh giá tùy chỉnh
Để tạo bộ đánh giá tùy chỉnh, hãy tạo loại tfma.evaluators.Evaluator
bao bọc một beam.PTransform
lấy tfma.Extracts
làm đầu vào và trả về tfma.evaluators.Evaluation
làm đầu ra. Một người đánh giá rất cơ bản có thể chỉ lấy tfma.Extracts
đến và xuất chúng để lưu trữ trong một bảng. Đây chính xác là những gì tfma.evaluators.AnalysisTableEvaluator
làm. Người đánh giá phức tạp hơn có thể thực hiện xử lý bổ sung và tổng hợp dữ liệu. Hãy xem tfma.evaluators.MetricsAndPlotsEvaluator
làm ví dụ.
Lưu ý rằng bản thân tfma.evaluators.MetricsAndPlotsEvaluator
có thể được tùy chỉnh để hỗ trợ số liệu tùy chỉnh (xem số liệu để biết thêm chi tiết).
Người viết tùy chỉnh
Để tạo trình viết tùy chỉnh, hãy tạo kiểu tfma.writers.Writer
bao bọc một beam.PTransform
lấy tfma.evaluators.Evaluation
làm đầu vào và trả về beam.pvalue.PDone
làm đầu ra. Sau đây là một ví dụ cơ bản về một người viết để viết ra các Từ TFRecords có chứa các chỉ số:
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))
Đầu vào của người viết phụ thuộc vào đầu ra của bộ đánh giá liên quan. Đối với ví dụ trên, đầu ra là một proto tuần tự được tạo ra bởi tfma.evaluators.MetricsAndPlotsEvaluator
. Một người viết cho tfma.evaluators.AnalysisTableEvaluator
sẽ chịu trách nhiệm viết ra một beam.pvalue.PCollection
của tfma.Extracts
.
Lưu ý rằng người viết được liên kết với đầu ra của người đánh giá thông qua khóa đầu ra được sử dụng (ví dụ: tfma.METRICS_KEY
, tfma.ANALYSIS_KEY
, v.v.).
Ví dụ từng bước
Sau đây là ví dụ về các bước liên quan đến quy trình khai thác và đánh giá khi cả tfma.evaluators.MetricsAndPlotsEvaluator
và tfma.evaluators.AnalysisTableEvaluator
được sử dụng:
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