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 . Loại tfma.Extracts biểu thị 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 thể hiện đầu ra từ việc đánh giá các phần trích xuất tại các điểm khác nhau trong quá trình trích xuất. Để cung cấp API linh hoạt, các loại này chỉ là các lệnh trong đó các khóa được xác định (dành riêng để sử dụng) bằng các cách 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 mà chúng phải luôn thông qua người đánh giá để tạo ra 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 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 dict 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 tại thời điểm 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 các bản trích xuất. Ngày nay, các trích xuất được biểu diễn dưới dạng byte đầu vào thô được lưu trữ trong tfma.INPUT_KEY , tuy nhiên, các trích xuất có thể ở bất kỳ dạng nào tương thích với quy trình trích xuất - nghĩa là nó tạo ra tfma.Extracts làm đầu ra và các trích xuất đó tương thích với hạ lưu máy chiết. 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 nối tiếp. Trình trích xuất 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 ban đầu 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. Trình trích xuất tùy chỉnh có thể được chèn vào bất kỳ điểm nào miễn là các biến đổi của chúng tuân thủ API tfma.Extracts in và tfma.Extracts out. Một máy trích xuất đượ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

Trình trích xuất đầu vào

tfma.extractors.InputExtractor được sử dụng để trích xuất các tính năng thô, nhãn thô và trọng số mẫu thô từ các bản ghi tf.train.Example để sử dụng trong việc cắt và tính toán số liệu. Theo mặc định, các giá trị được lưu trữ dưới các khóa trích xuất features , labelsexample_weights tương ứng. Nhãn mô hình một đầu ra và trọng số mẫu đượ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ố mẫu được lưu trữ dưới dạng ký tự của các giá trị np.ndarray (được khóa theo tên đầu ra). Nếu việc đánh giá đa mô hình được thực hiện, các nhãn và trọng số mẫu sẽ được nhúng thêm vào một lệnh khác (được khóa theo tên mô hình).

Dự đoánExtractor

tfma.extractors.PredictExtractor chạy các dự đoán mô hình và lưu trữ chúng theo predictions chính trong lệnh tfma.Extracts . 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. Dự đoán mô hình nhiều đầu ra được lưu trữ dưới dạng lệnh của các giá trị đầu ra (được khóa theo tên đầu ra). Nếu việc đánh giá đa mô hình được thực hiện thì dự đoán sẽ được nhúng sâu hơn vào một lệnh khác (được khóa theo tên mô hình). Giá trị đầu ra thực tế được sử dụng tùy thuộc vào mô hình (ví dụ: đầu ra trả về của công cụ ước tính TF ở dạng lệnh trong khi máy ảnh trả về giá trị np.ndarray ).

SliceKeyExtractor

tfma.extractors.SliceKeyExtractor sử dụng thông số cắt để xác định những lát cắt nào áp dụng cho từng đầu vào mẫu dựa trên các tính năng được trích xuất và thêm các giá trị cắt lõi tương ứng vào các 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 trích đoạn và đánh giá nó. Mặc dù người ta thường thực hiện đánh giá ở cuối quy trình trích xuất, 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 trích xuất. 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 cần được đánh giá dựa vào. Một 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 chuyển đổi bổ sung trên các phần trích xuất như một phần của quy trình đánh giá. Không giống như các trình trích xuất phải trả về một lệnh tfma.Extracts , không có hạn chế nào về loại kết quả đầu ra mà người đánh giá có thể tạo ra mặc dù hầu hết các người đánh giá cũng trả về một lệnh (ví dụ: tên và giá trị số liệu).

Công cụ đánh giá MetricsAndPlots

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 các lát, 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 các số liệu, các khóa và giá trị biểu đồ (sau này chúng được chuyển đổi thành các giao thức được tuần tự hóa cho đầu 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 trình ghi để ghi dữ liệu dựa trên các phím đầu ra. Ví dụ: tfma.evaluators.Evaluation có thể chứa các khóa cho metricsplots . Sau đó, chúng sẽ được liên kết với các từ điển số liệu và biểu đồ được gọi là 'số liệu' và 'sơ đồ'. Người viết chỉ rõ cách ghi ra từng 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

MetricsAndPlotsNhà văn

Chúng tôi cung cấp tfma.writers.MetricsAndPlotsWriter để chuyển đổi các số liệu và biểu đồ từ điển thành các proto được tuần tự hóa 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 soạn thảo 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ả người đánh giá được kết hợp, nên một biến đổi trợ giúp tfma.writers.Write được cung cấp để người viết có thể sử dụng trong quá trình triển khai ptransform của họ để chọn beam.PCollection dựa trên một phím đầu ra (xem ví dụ bên dưới).

Tùy chỉnh

Phương thức tfma.run_model_analysis lấy các đối số extractors , evaluatorswriters để 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 dẫn. 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ì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 loại 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 một trình đá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 bảng. Đây chính xác là những gì tfma.evaluators.AnalysisTableEvaluator thực hiện. 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. 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ợ các 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 ghi tùy chỉnh, hãy tạo loại 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à ví dụ cơ bản về người viết để viết ra các TFRecord chứa số liệu:

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 người đánh giá liên quan. Đối với ví dụ trên, đầu ra là một proto được tuần tự hóa được tạo bởi tfma.evaluators.MetricsAndPlotsEvaluator . Người viết tfma.evaluators.AnalysisTableEvaluator sẽ chịu trách nhiệm viết ra beam.pvalue.PCollection của tfma.Extracts .

Lưu ý rằng trình ghi được liên kết với đầu ra của bộ đá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 trích xuất và đánh giá khi sử dụng cả tfma.evaluators.MetricsAndPlotsEvaluatortfma.evaluators.AnalysisTableEvaluator :

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