يوم مجتمع ML هو 9 نوفمبر! الانضمام إلينا للحصول على التحديثات من TensorFlow، JAX، وأكثر معرفة المزيد

الشروع في تحليل نموذج TensorFlow

ملخص

تحليل نموذج TensorFlow (TFMA) عبارة عن مكتبة لأداء تقييم النموذج.

  • إلى عن على : مهندسو التعلم الآلي أو علماء البيانات
  • من : يريدون تحليل وفهم نماذج TensorFlow الخاصة بهم
  • هي : مكتبة مستقلة أو مكون من خط أنابيب TFX
  • أن : تقييم النماذج على كميات كبيرة من البيانات بطريقة موزعة على نفس المقاييس المحددة في التدريب. تتم مقارنة هذه المقاييس عبر شرائح البيانات ، ويتم تصورها في دفاتر Jupyter أو Colab.
  • على عكس : بعض أدوات الاستبطان النموذجية مثل tensorboard التي تقدم الاستبطان النموذجي

تنفذ TFMA حساباتها بطريقة موزعة على كميات كبيرة من البيانات باستخدام Apache Beam . تصف الأقسام التالية كيفية إعداد خط أساسي لتقييم TFMA. انظر الهندسة المعمارية مزيد من التفاصيل حول التنفيذ الأساسي.

إذا كنت ترغب فقط في البدء والبدء ، تحقق من دفتر ملاحظات كولاب الخاص بنا.

يمكن أيضًا عرض هذه الصفحة من موقع tensorflow.org .

أنواع النماذج المعتمدة

تم تصميم TFMA لدعم النماذج القائمة على tensorflow ، ولكن يمكن توسيعها بسهولة لدعم الأطر الأخرى أيضًا. من الناحية التاريخية ، تطلب EvalSavedModel إنشاء نموذج EvalSavedModel لاستخدام TFMA ، لكن أحدث إصدار من TFMA يدعم أنواعًا متعددة من النماذج وفقًا لاحتياجات المستخدم. يجب أن يكون إعداد EvalSavedModel مطلوبًا فقط إذا تم استخدام نموذج قائم على tf.estimator وكانت مقاييس وقت التدريب المخصصة مطلوبة.

لاحظ أنه نظرًا لأن TFMA تعمل الآن استنادًا إلى نموذج التقديم ، فلن تقوم TFMA بعد الآن بتقييم المقاييس المضافة تلقائيًا في وقت التدريب. الاستثناء في هذه الحالة هو إذا تم استخدام نموذج keras لأن keras يحفظ المقاييس المستخدمة جنبًا إلى جنب مع النموذج المحفوظ. ومع ذلك، إذا كان هذا هو الشرط الصعب، أحدث TFMA متوافق إلى الوراء مثل أن EvalSavedModel لا يزال من الممكن تشغيل في خط أنابيب TFMA.

يلخص الجدول التالي النماذج المدعومة افتراضيًا:

نوع النموذج مقاييس وقت التدريب مقاييس ما بعد التدريب
TF2 (كيراس) نعم * ص
TF2 (عام) غير متاح ص
EvalSavedModel (مقدر) ص ص
لا شيء (pd.DataFrame ، إلخ) غير متاح ص
  • تشير مقاييس وقت التدريب إلى المقاييس المحددة في وقت التدريب والمحفوظة مع النموذج (إما نموذج TFMA EvalSavedModel أو نموذج keras المحفوظ). مقاييس ما بعد التدريب تشير إلى المقاييس المضافة عبر tfma.MetricConfig .
  • نماذج TF2 العامة هي نماذج مخصصة تقوم بتصدير التوقيعات التي يمكن استخدامها للاستدلال ولا تعتمد على keras أو المقدر.

راجع الأسئلة المتداولة للحصول على مزيد من المعلومات حول كيفية إعداد وتكوين أنواع النماذج المختلفة هذه.

يثبت

قبل إجراء تقييم ، يلزم قدر ضئيل من الإعداد. أولاً ، يجب تحديد كائن tfma.EvalConfig الذي يوفر مواصفات للنموذج والمقاييس والشرائح التي سيتم تقييمها. ثانيًا ، يجب إنشاء tfma.EvalSharedModel الذي يشير إلى النموذج الفعلي (أو النماذج) التي سيتم استخدامها أثناء التقييم. بمجرد تحديدها ، يتم إجراء التقييم عن طريق استدعاء tfma.run_model_analysis مع مجموعة بيانات مناسبة. لمزيد من التفاصيل ، راجع دليل الإعداد .

إذا كان يعمل ضمن خط أنابيب TFX ، فراجع دليل TFX للتعرف على كيفية تكوين TFMA للتشغيل كمكون TFX Evaluator .

أمثلة

تقييم نموذج واحد

يستخدم ما يلي tfma.run_model_analysis لإجراء تقييم على نموذج تقديم. للحصول على شرح للإعدادات المختلفة المطلوبة ، راجع دليل الإعداد .

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

للتقييم الموزع ، قم بإنشاء خط أنابيب Apache Beam باستخدام عداء موزع. في خط الأنابيب ، استخدم tfma.ExtractEvaluateAndWriteResults للتقييم وكتابة النتائج. يمكن تحميل النتائج للتصور باستخدام tfma.load_eval_result .

على سبيل المثال:

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

التحقق من صحة النموذج

لإجراء التحقق من صحة النموذج مقابل التصفية والخط الأساسي ، قم بتحديث التكوين ليشمل إعداد العتبة وتمرير نموذجين إلى tfma.run_model_analysis .

على سبيل المثال:

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

التصور

يمكن تصور نتائج تقييم TFMA في دفتر Jupyter باستخدام مكونات الواجهة الأمامية المضمنة في TFMA. على سبيل المثال:

متصفح TFMA Slicing Metrics .

معلومات اكثر