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

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Tổng quat

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

Cấu hình

GenericValueThreshold

Ngưỡng giá trị hữu ích để kiểm tra mô hình ứng viên bằng cách kiểm tra xem các chỉ số 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ị under_bound và upper_bound. Giới hạn dưới được mặc định là âm vô cùng 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))

GenericChangeThreshold

Change threhold rất hữu ích để kiểm soát mô hình ứng viên bằng cách kiểm tra xem chỉ số tương ứng có lớn hơn / nhỏ hơn so với chỉ số của mô hình cơ sở hay không. Có hai cách để đo lường sự thay đổi: thay đổi tuyệt đối và thay đổi tương đối. Aboslute thay đổi được tính bằng cách lấy giá trị diference giữa các số liệu của mô hình ứng cử viên và cơ sở, cụ thể là, v_c - v_b nơi v_c biểu ứng cử viên giá trị metric và v_b biểu thị giá trị ban đầu. Giá trị tương đối là sự khác biệt tương đối giữa các số liệu của các ứng cử viên và các 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 phải định cấu hình MetricDirection. đối với các chỉ số có giá trị cao hơn có lợi (ví dụ: AUC), hãy đặt hướng thành HIGHER_IS_BETTER, đối với các chỉ số có giá trị thấp hơn có lợi (ví dụ: lỗ), hãy đặt hướng thành LOWER_IS_BETTER. Các ngưỡng thay đổi yêu cầu mô hình cơ sở được đánh giá cùng với mô hình ứng viên. Xem hướng dẫn bắt đầu cho mộ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)

Kết hợp mọi thứ lại với nhau

Ví dụ sau kết hợp các ngưỡng giá trị và 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 nếu viết ra 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())

Có thể đặt MetricThreshold thành cổng trên cả hai chỉ số Thời gian đào tạo của mô hình (hoặc mô hình đã lưu EvalSavedModel hoặc Keras) và chỉ số Bài huấn luyện (được xác định trong cấu hình TFMA). Đối với chỉ số 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 chỉ số 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 bởi người đánh giá, khi xác thực được sử dụng, một tệp "xác nhận" 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 có lỗi, thông tin được cung cấp về các chỉ số liên quan, các ngưỡng và các giá trị chỉ số được quan sát. Sau đây là một ví dụ trong đó "weighted_examle_count" không đạt ngưỡng giá trị (1,5 không nhỏ hơn 1,0, do đó lỗi):

  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 }
      }
    }
  }