انضم إلينا في DevFest لأوكرانيا من 14 إلى 15 يونيو عبر الإنترنت سجل الآن

عمليات التحقق من نموذج تحليل نموذج Tensorflow

ملخص

TFMA يدعم المصادقة على نموذج من خلال إنشاء عتبات قيمة وعتبات التغيير على أساس المقاييس المدعومة .

ترتيب

GenericValueTtheshold

عتبة القيمة مفيدة في بوابة النموذج المرشح عن طريق التحقق مما إذا كانت المقاييس المقابلة أكبر من الحد الأدنى و / أو أصغر من الحد الأعلى. يمكن للمستخدم تعيين إما قيمة واحدة أو كلتا القيمتين السفليتين والعليا. يكون Lower_bound افتراضيًا على اللانهاية السالبة إذا لم يتم ضبطه ، ويكون الحد الأعلى للقيمة الافتراضية إلى ما لا نهاية إذا لم يتم ضبطه.

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

تغيير عام

يعد التغيير الثلاثي مفيدًا لبوابة النموذج المرشح عن طريق التحقق مما إذا كان المقياس المقابل أكبر / أصغر من النموذج الأساسي. هناك طريقتان يمكن قياس التغيير بهما: التغيير المطلق والتغير النسبي. يتم احتساب Aboslute التغيير كما السالب قيمة بين المقاييس من طراز مرشح والأساس، وهي v_c - v_b حيث v_c يدل على قيمة متري المرشح وv_b يدل على قيمة خط الأساس. القيمة النسبية هي الفرق النسبي بين متري المرشح والأساس، وهي v_c / v_b. يمكن أن تتعايش العتبة المطلقة والنسبية مع نموذج البوابة بواسطة كلا المعيارين. إلى جانب إعداد قيم العتبة ، يحتاج المستخدم أيضًا إلى تكوين MetricDirection. بالنسبة للمقاييس ذات القيم الأعلى بشكل إيجابي (على سبيل المثال ، AUC) ، اضبط الاتجاه على HIGHER_IS_BETTER ، للمقاييس ذات القيم المنخفضة بشكل إيجابي (على سبيل المثال ، الخسارة) ، اضبط الاتجاه على LOWER_IS_BETTER. يتطلب تغيير الحدود تقييم نموذج أساسي مع النموذج المرشح. انظر دليل الخطوات الأولى للحصول على مثال.

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)

وضع الأشياء معًا

يجمع المثال التالي بين القيمة وحدود التغيير:

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)

قد يكون من الأسهل قراءة تدوين التكوين بتنسيق أولي:

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 على البوابة في كل من مقاييس وقت التدريب النموذجية (إما نموذج EvalSavedModel أو Keras المحفوظ) ومقاييس ما بعد التدريب (المحددة في تكوين TFMA). بالنسبة لمقاييس وقت التدريب ، يتم تحديد العتبات في tfma.MetricsSpec:

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

لمقاييس ما بعد التدريب ، يتم تحديد العتبات مباشرة في tfma.

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

فيما يلي مثال مع الإعدادات الأخرى في 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)

انتاج |

بالإضافة إلى إخراج ملف المقاييس بواسطة المقيم ، عند استخدام التحقق ، يتم أيضًا إخراج ملف "تحقق" إضافي. شكل الحمولة هو ValidationResult . سيتم تعيين "validation_ok" للإخراج على True في حالة عدم وجود إخفاقات. عند وجود حالات فشل ، يتم تقديم معلومات حول المقاييس المرتبطة والحدود والقيم المترية التي تمت ملاحظتها. فيما يلي مثال على فشل "weighted_examle_count" في حد القيمة (1.5 ليس أصغر من 1.0 ، وبالتالي الفشل):

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