Xác thực mô hình phân tích mô hình Tensorflow

Tổng quan

TFMA hỗ trợ xác thực mô hình bằng cách thiết lập ngưỡng giá trị và thay đổi ngưỡng dựa trên số liệu được hỗ trợ .

Cấu hình

Ngưỡng giá trị chung

Ngưỡng giá trị rất hữu ích để phân loại mô hình ứng cử viên bằng cách kiểm tra xem số liệu tương ứng có lớn hơn giới hạn dưới và/hoặc nhỏ hơn giới hạn trên hay không. Người dùng có thể đặt một hoặc cả hai giá trị giới hạn dưới và giới hạn trên. Giới hạn dưới được mặc định là vô cực âm nếu không được đặt và giới hạn trên mặc định là vô cùng nếu không được đặt.

import tensorflow_model_analysis as tfma

lower_bound = tfma.GenericValueThreshold(lower_bound={'value':0})
upper_bound = tfma.GenericValueThreshold(upper_bound={'value':1})
lower_upper_bound = tfma.GenericValueThreshold(lower_bound={'value':0},
                                               upper_bound={'value':1))

Ngưỡng thay đổi chung

Ngưỡng thay đổi rất hữu ích để chuyển mô hình ứng viên bằng cách kiểm tra xem số liệu tương ứng có lớn hơn/nhỏ hơn số liệu của mô hình cơ sở hay không. Có hai cách để đo lường sự thay đổi: sự thay đổi tuyệt đối và sự thay đổi tương đối. Thay đổi tuyệt đối được tính bằng chênh lệch giá trị giữa các số liệu của mô hình cơ sở và ứng cử viên, cụ thể là v_c - v_b trong đó v_c biểu thị giá trị số liệu ứng viên và v_b biểu thị giá trị cơ sở. Giá trị tương đối là sự khác biệt tương đối giữa số liệu của ứng cử viên và đường cơ sở, cụ thể là v_c/v_b . Ngưỡng tuyệt đối và ngưỡng tương đối có thể cùng tồn tại trong mô hình cổng theo cả hai tiêu chí. Bên cạnh việc thiết lập các giá trị ngưỡng, người dùng cũng cần định cấu hình MetricDirection. đối với các số liệu có giá trị thuận lợi cao hơn (ví dụ: AUC), hãy đặt hướng thành HIGHER_IS_BETTER, đối với các số liệu có giá trị thuận lợi thấp hơn (ví dụ: mất), hãy đặt hướng thành LOWER_IS_BETTER. Ngưỡng thay đổi yêu cầu đánh giá mô hình cơ sở cùng với mô hình ứng viên. Xem hướng dẫn Bắt đầu để biết ví dụ.

import tensorflow_model_analysis as tfma

absolute_higher_is_better = tfma.GenericChangeThreshold(absolute={'value':1},
                                                        direction=tfma.MetricDirection.HIGHER_IS_BETTER)
absolute_lower_is_better = tfma.GenericChangeThreshold(absolute={'value':1},
                                                       direction=tfma.MetricDirection.LOWER_IS_BETTER)
relative_higher_is_better = tfma.GenericChangeThreshold(relative={'value':1},
                                                        direction=tfma.MetricDirection.HIGHER_IS_BETTER)
relative_lower_is_better = tfma.GenericChangeThreshold(relative={'value':1},
                                                       direction=tfma.MetricDirection.LOWER_IS_BETTER)
absolute_and_relative = tfma.GenericChangeThreshold(relative={'value':1},
                                                    absolute={'value':0.2},
                                                    direction=tfma.MetricDirection.LOWER_IS_BETTER)

Đặt mọi thứ lại với nhau

Ví dụ sau kết hợp giá trị và ngưỡng thay đổi:

import tensorflow_model_analysis as tfma

lower_bound = tfma.GenericValueThreshold(lower_bound={'value':0.7})
relative_higher_is_better =
    tfma.GenericChangeThreshold(relative={'value':1.01},
                                direction=tfma.MetricDirection.HIGHER_IS_BETTER)
auc_threshold = tfma.MetricThreshold(value_threshold=lower_bound,
                                     change_threshold=relative_higher_is_better)

Có thể dễ đọc hơn khi viết cấu hình ở định dạng proto:

from google.protobuf import text_format

auc_threshold = text_format.Parse("""
  value_threshold { lower_bound { value: 0.6 } }
  change_threshold { relative { value: 1.01 } }
""", tfma.MetricThreshold())

MetricThreshold có thể được đặt thành cổng trên cả hai chỉ số Thời gian đào tạo của mô hình (mô hình đã lưu EvalSavedModel hoặc Keras) và chỉ số Sau đào tạo (được xác định trong cấu hình TFMA). Đối với số liệu Thời gian đào tạo, các ngưỡng được chỉ định trong tfma.MetricsSpec:

metrics_spec = tfma.MetricSpec(thresholds={'auc': auc_threshold})

Đối với các số liệu sau đào tạo, các ngưỡng được xác định trực tiếp trong tfma.MetricConfig:

metric_config = tfma.MetricConfig(class_name='TotalWeightedExample',
                                  threshold=lower_bound)

Đây là một ví dụ cùng với các cài đặt khác trong EvalConfig:

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

eval_config = text_format.Parse("""
  model_specs {
    # This assumes a serving model with a "serving_default" signature.
    label_key: "label"
    example_weight_key: "weight"
  }
  metrics_spec {
    # Training Time metric thresholds
    thresholds {
      key: "auc"
      value: {
        value_threshold {
          lower_bound { value: 0.7 }
        }
        change_threshold {
          direction: HIGHER_IS_BETTER
          absolute { value: -1e-10 }
        }
      }
    }
    # Post Training metrics and their thesholds.
    metrics {
      # This assumes a binary classification model.
      class_name: "AUC"
      threshold {
        value_threshold {
          lower_bound { value: 0 }
        }
      }
    }
  }
  slicing_specs {}
  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),
]

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="/path/for/output")

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

đầu ra

Ngoài đầu ra của tệp số liệu do người đánh giá tạo ra, khi sử dụng xác thực, một tệp "xác thực" bổ sung cũng được xuất ra. Định dạng tải trọng là ValidationResult . Đầu ra sẽ có "validation_ok" được đặt thành True khi không có lỗi nào. Khi xảy ra lỗi, thông tin sẽ được cung cấp về các chỉ số liên quan, các ngưỡng và giá trị chỉ số đã được quan sát. Sau đây là ví dụ trong đó "weighted_examle_count" không đạt ngưỡng giá trị (1,5 không nhỏ hơn 1,0, do đó không đạt ngưỡng):

  validation_ok: False
  metric_validations_per_slice {
    failures {
      metric_key {
        name: "weighted_example_count"
        model_name: "candidate"
      }
      metric_threshold {
        value_threshold {
          upper_bound { value: 1.0 }
        }
      }
      metric_value {
        double_value { value: 1.5 }
      }
    }
  }