सिंहावलोकन
TFMA समर्थित मेट्रिक्स के आधार पर मूल्य सीमाएँ और परिवर्तन सीमाएँ सेट करके एक मॉडल को मान्य करने का समर्थन करता है।
विन्यास
जेनेरिकवैल्यूथ्रेसहोल्ड
मूल्य सीमा यह जांच कर उम्मीदवार मॉडल को गेट करने के लिए उपयोगी है कि क्या संबंधित मेट्रिक्स निचली सीमा से बड़ा है और/या ऊपरी सीमा से छोटा है। उपयोगकर्ता निचली सीमा और ऊपरी सीमा में से एक या दोनों मान सेट कर सकता है। यदि सेट नहीं किया गया है तो निचला_बाउंड ऋणात्मक अनंत के लिए डिफ़ॉल्ट है, और यदि सेट नहीं किया गया है तो ऊपरी_बाउंड अनंत के लिए डिफ़ॉल्ट है।
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))
जेनेरिकचेंजथ्रेसहोल्ड
परिवर्तन सीमा उम्मीदवार मॉडल को गेट करने के लिए यह जांच कर उपयोगी है कि संबंधित मीट्रिक बेसलाइन मॉडल की तुलना में बड़ा/छोटा है या नहीं। परिवर्तन को दो तरीकों से मापा जा सकता है: पूर्ण परिवर्तन और सापेक्ष परिवर्तन। पूर्ण परिवर्तन की गणना उम्मीदवार और बेसलाइन मॉडल के मेट्रिक्स के बीच मूल्य अंतर के रूप में की जाती है, अर्थात्, v_c - v_b जहां v_c उम्मीदवार मीट्रिक मान को दर्शाता है और v_b बेसलाइन मान को दर्शाता है। सापेक्ष मान उम्मीदवार की मीट्रिक और आधार रेखा, अर्थात्, v_c/v_b के बीच सापेक्ष अंतर है। पूर्ण और सापेक्ष सीमा दोनों मानदंडों द्वारा गेट मॉडल में सह-अस्तित्व में हो सकती है। थ्रेशोल्ड मान सेट करने के अलावा, उपयोगकर्ता को मेट्रिकडायरेक्शन को भी कॉन्फ़िगर करना होगा। अनुकूल रूप से उच्च मान (जैसे, 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())
मेट्रिकथ्रेशोल्ड को मॉडल ट्रेनिंग टाइम मेट्रिक्स (या तो इवलसेव्डमॉडल या केरस सेव्ड मॉडल) और पोस्ट ट्रेनिंग मेट्रिक्स (टीएफएमए कॉन्फ़िगरेशन में परिभाषित) दोनों पर गेट पर सेट किया जा सकता है। प्रशिक्षण समय मेट्रिक्स के लिए, सीमाएँ tfma.MetricsSpec में निर्दिष्ट हैं:
metrics_spec = tfma.MetricSpec(thresholds={'auc': auc_threshold})
प्रशिक्षण के बाद मेट्रिक्स के लिए, थ्रेसहोल्ड सीधे tfma.MetricConfig में परिभाषित किए गए हैं:
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 पर सेट किया जाएगा। जब विफलताएं होती हैं, तो संबंधित मेट्रिक्स, थ्रेसहोल्ड और देखे गए मीट्रिक मानों के बारे में जानकारी प्रदान की जाती है। निम्नलिखित एक उदाहरण है जहां "भारित_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 }
}
}
}