Trả lời cho sự kiện TensorFlow Everywhere tại địa phương của bạn ngay hôm nay!
Trang này được dịch bởi Cloud Translation API.
Switch to English

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

Tổng quat

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ọ
  • nó là : một thư viện độc lập hoặc thành phần của một đường ống TFX
  • rằng : đánh giá các mô hình trên một lượng lớn dữ liệu theo cách phân tán trên cùng các chỉ số được xác định trong đào tạo. Các chỉ số 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 mô hình như tensorboard cung cấp xem xét mô hình

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

Nếu bạn chỉ muốn nhảy vào và bắt đầu, hãy kiểm tra của chúng tôi colab máy tính xách tay.

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, EvalSavedModel yêu cầu một EvalSavedModel được tạo để 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 chỉ số 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át, TFMA sẽ không còn tự động đánh giá các chỉ số được thêm vào thời điểm đào tạo. Ngoại lệ cho trường hợp này là nếu một mô hình keras được sử dụng vì keras 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ó, thì EvalSavedModel mới nhất tương thích ngược để một EvalSavedModel vẫn có thể chạy trong một đường ống EvalSavedModel .

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 Chỉ số thời gian đào tạo Chỉ số bài đào tạo
TF2 (keras) Y * Y
TF2 (chung) N / A Y
EvalSavedModel (công cụ ước tính) Y Y
Không có (pd.DataFrame, v.v.) N / A Y
  • Chỉ số Thời gian đào tạo đề cập đến các chỉ số được xác định tại thời điểm đào tạo và được lưu với mô hình (mô hình TFMA EvalSavedModel hoặc keras đã lưu). Chỉ số sau đào tạo đề cập đến các chỉ số được thêm qua tfma.MetricConfig .
  • Các mô hình TF2 chung là các mô hình tùy chỉnh xuất các chữ ký có thể được sử dụng để suy luận và không dựa trên keras 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à cấu hình các loại mô hình khác nhau này.

Thiết lập

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

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 một đường ống Apache Beam bằng cách sử dụng một trình chạy phân tán. Trong đường dẫn, 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 so với đường nề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 trực quan hóa 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