Bắt đầu với phân tích mô hình TensorFlow

Tổng quan

Phân tích mô hình TensorFlow (TFMA) là một thư viện để thực hiện đánh giá mô hình.

  • Dành cho : Kỹ sư học máy hoặc nhà khoa học dữ liệu
  • ai : muốn phân tích và hiểu các mô hình TensorFlow của họ
  • đó là : một thư viện hoặc thành phần độc lập của đường dẫn TFX
  • that : đánh giá các mô hình trên lượng lớn dữ liệu theo cách phân tán trên cùng các số liệu được xác định trong đào tạo. Các số liệu này được so sánh qua các phần dữ liệu và được hiển thị trong sổ ghi chép Jupyter hoặc Colab.
  • không giống như : một số công cụ xem xét nội tâm mô hình như tensorboard cung cấp khả năng xem xét nội mô hình

TFMA thực hiện các tính toán của mình theo cách phân tán trên lượng lớn dữ liệu bằng cách sử dụng Apache Beam . Các phần sau đây mô tả cách thiết lập quy trình đánh giá TFMA cơ bản. Xem kiến ​​trúc để biết thêm chi tiết về cách triển khai cơ bản.

Nếu bạn chỉ muốn bắt đầu và bắt đầu, hãy xem sổ tay colab của chúng tôi.

Trang này cũng có thể được xem từ tensorflow.org .

Các loại mô hình được hỗ trợ

TFMA được thiết kế để hỗ trợ các mô hình dựa trên tensorflow, nhưng cũng có thể dễ dàng mở rộng để hỗ trợ các khung công tác khác. Trước đây, TFMA yêu cầu tạo EvalSavedModel để sử dụng TFMA, nhưng phiên bản mới nhất của TFMA hỗ trợ nhiều loại mô hình tùy thuộc vào nhu cầu của người dùng. Chỉ nên thiết lập EvalSavedModel nếu sử dụng mô hình dựa trên tf.estimator và yêu cầu số liệu thời gian đào tạo tùy chỉnh.

Lưu ý rằng vì TFMA hiện chạy dựa trên mô hình phân phối nên TFMA sẽ không còn tự động đánh giá các số liệu được thêm vào thời điểm đào tạo nữa. Ngoại lệ cho trường hợp này là nếu mô hình máy ảnh được sử dụng vì máy ảnh lưu các số liệu được sử dụng cùng với mô hình đã lưu. Tuy nhiên, nếu đây là một yêu cầu khó khăn thì TFMA mới nhất có khả năng tương thích ngược sao cho EvalSavedModel vẫn có thể chạy trong đường dẫn TFMA.

Bảng sau đây tóm tắt các mô hình được hỗ trợ theo mặc định:

Loại mô hình Số liệu về thời gian đào tạo Số liệu sau đào tạo
TF2 (máy ảnh) Y* Y
TF2 (chung) không áp dụng Y
EvalSavedModel (công cụ ước tính) Y Y
Không có (pd.DataFrame, v.v.) không áp dụng Y
  • Số liệu Thời gian đào tạo đề cập đến các số liệu được xác định tại thời điểm đào tạo và được lưu cùng với mô hình (mô hình đã lưu TFMA EvalSavedModel hoặc máy ảnh). Số liệu sau đào tạo đề cập đến số liệu được thêm thông qua tfma.MetricConfig .
  • Các mô hình TF2 chung là các mô hình tùy chỉnh xuất chữ ký có thể được sử dụng để suy luận và không dựa trên máy ảnh hoặc công cụ ước tính.

Xem Câu hỏi thường gặp để biết thêm thông tin về cách thiết lập và định cấu hình các loại mô hình khác nhau này.

Cài đặt

Trước khi chạy đánh giá, cần phải thiết lập một chút. Đầu tiên, một đối tượng tfma.EvalConfig phải được xác định để cung cấp các thông số kỹ thuật cho mô hình, số liệu và lát cắt sẽ được đánh giá. Thứ hai, cần tạo một tfma.EvalSharedModel để trỏ đến mô hình (hoặc các mô hình) thực tế sẽ được sử dụng trong quá trình đánh giá. Khi những điều này đã được xác định, việc đánh giá sẽ được thực hiện bằng cách gọi tfma.run_model_analysis với tập dữ liệu thích hợp. Để biết thêm chi tiết, hãy xem hướng dẫn thiết lập .

Nếu chạy trong đường dẫn TFX, hãy xem hướng dẫn TFX để biết cách định cấu hình TFMA để chạy dưới dạng thành phần Bộ đánh giá TFX.

Ví dụ

Đánh giá mô hình đơn

Phần sau đây sử dụng tfma.run_model_analysis để thực hiện đánh giá trên mô hình phân phát. Để biết giải thích về các cài đặt khác nhau cần thiết, hãy xem hướng dẫn thiết lập .

# Run in a Jupyter Notebook.
from google.protobuf import text_format

eval_config = text_format.Parse("""
  ## Model information
  model_specs {
    # This assumes a serving model with a "serving_default" signature.
    label_key: "label"
    example_weight_key: "weight"
  }
  ## Post export metric information
  metrics_specs {
    # This adds AUC as a post training metric. If the model has built in
    # training metrics which also contains AUC, this metric will replace it.
    metrics { class_name: "AUC" }
    # ... other post training metrics ...

    # Plots are also configured here...
    metrics { class_name: "ConfusionMatrixPlot" }
  }
  ## Slicing information
  slicing_specs {}  # overall slice
  slicing_specs {
    feature_keys: ["age"]
  }
""", tfma.EvalConfig())

eval_shared_model = tfma.default_eval_shared_model(
    eval_saved_model_path='/path/to/saved/model', eval_config=eval_config)

eval_result = tfma.run_model_analysis(
    eval_shared_model=eval_shared_model,
    eval_config=eval_config,
    # This assumes your data is a TFRecords file containing records in the
    # tf.train.Example format.
    data_location='/path/to/file/containing/tfrecords',
    output_path='/path/for/output')

tfma.view.render_slicing_metrics(eval_result)

Để đánh giá phân tán, hãy xây dựng đường dẫn Apache Beam bằng cách sử dụng trình chạy phân tán. Trong quy trình, hãy sử dụng tfma.ExtractEvaluateAndWriteResults để đánh giá và viết ra kết quả. Kết quả có thể được tải để hiển thị bằng cách sử dụng tfma.load_eval_result .

Ví dụ:

# To run the pipeline.
from google.protobuf import text_format
from tfx_bsl.tfxio import tf_example_record

eval_config = text_format.Parse("""
  ## Model information
  model_specs {
    # This assumes a serving model with a "serving_default" signature.
    label_key: "label"
    example_weight_key: "weight"
  }
  ## Post export metric information
  metrics_specs {
    # This adds AUC and as a post training metric. If the model has built in
    # training metrics which also contains AUC, this metric will replace it.
    metrics { class_name: "AUC" }
    # ... other post training metrics ...

    # Plots are also configured here...
    metrics { class_name: "ConfusionMatrixPlot" }
  }
  ## Slicing information
  slicing_specs {}  # overall slice
  slicing_specs {
    feature_keys: ["age"]
  }
""", tfma.EvalConfig())

eval_shared_model = tfma.default_eval_shared_model(
    eval_saved_model_path='/path/to/saved/model', eval_config=eval_config)

output_path = '/path/for/output'

tfx_io = tf_example_record.TFExampleRecord(
    file_pattern=data_location, raw_record_column_name=tfma.ARROW_INPUT_COLUMN)

with beam.Pipeline(runner=...) as p:
  _ = (p
       # You can change the source as appropriate, e.g. read from BigQuery.
       # This assumes your data is a TFRecords file containing records in the
       # tf.train.Example format. If using EvalSavedModel then use the following
       # instead: 'ReadData' >> beam.io.ReadFromTFRecord(file_pattern=...)
       | 'ReadData' >> tfx_io.BeamSource()
       | 'ExtractEvaluateAndWriteResults' >>
       tfma.ExtractEvaluateAndWriteResults(
            eval_shared_model=eval_shared_model,
            eval_config=eval_config,
            output_path=output_path))

# To load and visualize results.
# Note that this code should be run in a Jupyter Notebook.
result = tfma.load_eval_result(output_path)
tfma.view.render_slicing_metrics(result)

Mẫu chính thức

Để thực hiện xác thực mô hình dựa trên ứng viên và đường cơ sở, hãy cập nhật cấu hình để bao gồm cài đặt ngưỡng và chuyển hai mô hình tới tfma.run_model_analysis .

Ví dụ:

# Run in a Jupyter Notebook.
from google.protobuf import text_format

eval_config = text_format.Parse("""
  ## Model information
  model_specs {
    # This assumes a serving model with a "serving_default" signature.
    label_key: "label"
    example_weight_key: "weight"
  }
  ## Post export metric information
  metrics_specs {
    # This adds AUC and as a post training metric. If the model has built in
    # training metrics which also contains AUC, this metric will replace it.
    metrics {
      class_name: "AUC"
      threshold {
        value_threshold {
          lower_bound { value: 0.9 }
        }
        change_threshold {
          direction: HIGHER_IS_BETTER
          absolute { value: -1e-10 }
        }
      }
    }
    # ... other post training metrics ...

    # Plots are also configured here...
    metrics { class_name: "ConfusionMatrixPlot" }
  }
  ## Slicing information
  slicing_specs {}  # overall slice
  slicing_specs {
    feature_keys: ["age"]
  }
""", tfma.EvalConfig())

eval_shared_models = [
  tfma.default_eval_shared_model(
      model_name=tfma.CANDIDATE_KEY,
      eval_saved_model_path='/path/to/saved/candiate/model',
      eval_config=eval_config),
  tfma.default_eval_shared_model(
      model_name=tfma.BASELINE_KEY,
      eval_saved_model_path='/path/to/saved/baseline/model',
      eval_config=eval_config),
]

output_path = '/path/for/output'

eval_result = tfma.run_model_analysis(
    eval_shared_models,
    eval_config=eval_config,
    # This assumes your data is a TFRecords file containing records in the
    # tf.train.Example format.
    data_location='/path/to/file/containing/tfrecords',
    output_path=output_path)

tfma.view.render_slicing_metrics(eval_result)
tfma.load_validation_result(output_path)

Hình dung

Kết quả đánh giá TFMA có thể được hiển thị trong sổ ghi chép Jupyter bằng cách sử dụng các thành phần giao diện người dùng có trong TFMA. Ví dụ:

Trình duyệt số liệu cắt lát TFMA .

Thêm thông tin