Kiến trúc phân tích mô hình Tensorflow

Tổng quan

Đường ống phân tích mô hình TensorFlow (TFMA) được mô tả như sau:

Đường ống TFMA

Đườ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.Extractstfma.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 , labelsexample_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 , labelspredictions 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_evaluatorstfma.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.MetricsAndPlotsEvaluatortfma.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
}
# 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