TensorFlow Model Analysis (TFMA) può esportare il grafico di valutazione di un modello in uno speciale SavedModel
chiamato EvalSavedModel
. (Si noti che viene utilizzato il grafico di valutazione e non il grafico per l'addestramento o l'inferenza.) EvalSavedModel
contiene informazioni aggiuntive che consentono a TFMA di calcolare gli stessi parametri di valutazione definiti nel modello in modo distribuito su una grande quantità di dati e parametri definiti dall'utente. fette.
Modificare un modello esistente
Per utilizzare un modello esistente con TFMA, modificare prima il modello per esportare EvalSavedModel
. Questo viene fatto aggiungendo una chiamata a tfma.export.export_eval_savedmodel
ed è simile a estimator.export_savedmodel
. Per esempio:
# Define, train and export your estimator as usual
estimator = tf.estimator.DNNClassifier(...)
estimator.train(...)
estimator.export_savedmodel(...)
# Also export the EvalSavedModel
tfma.export.export_eval_savedmodel(
estimator=estimator, export_dir_base=export_dir,
eval_input_receiver_fn=eval_input_receiver_fn)
eval_input_receiver_fn
deve essere definito ed è simile a serving_input_receiver_fn
per estimator.export_savedmodel
. serving_input_receiver_fn
, la funzione eval_input_receiver_fn
definisce un esempio di segnaposto di input, analizza le funzionalità dall'esempio e restituisce le funzionalità analizzate. Analizza e restituisce l'etichetta.
Il seguente frammento definisce un esempio eval_input_receiver_fn
:
country = tf.feature_column.categorical_column_with_hash('country', 100)
language = tf.feature_column.categorical_column_with_hash('language', 100)
age = tf.feature_column.numeric_column('age')
label = tf.feature_column.numeric_column('label')
def eval_input_receiver_fn():
serialized_tf_example = tf.compat.v1.placeholder(
dtype=tf.string, shape=[None], name='input_example_placeholder')
# This *must* be a dictionary containing a single key 'examples', which
# points to the input placeholder.
receiver_tensors = {'examples': serialized_tf_example}
feature_spec = tf.feature_column.make_parse_example_spec(
[country, language, age, label])
features = tf.io.parse_example(serialized_tf_example, feature_spec)
return tfma.export.EvalInputReceiver(
features=features,
receiver_tensors=receiver_tensors,
labels=features['label'])
In questo esempio puoi vedere che:
-
labels
possono anche essere un dizionario. Utile per un modello a più teste. - La funzione
eval_input_receiver_fn
sarà, molto probabilmente, la stessa dellaserving_input_receiver_fn
. Ma, in alcuni casi, potresti voler definire funzionalità aggiuntive per l'affettamento. Ad esempio, introduci una funzionalitàage_category
che divide la funzionalitàage
in più segmenti. Puoi quindi suddividere questa funzionalità in TFMA per comprendere in che modo le prestazioni del tuo modello differiscono nelle diverse categorie di età.
Aggiunta di metriche post-esportazione
È possibile aggiungere parametri aggiuntivi non inclusi nel modello utilizzando add_metrics_callbacks
. Per ulteriori dettagli, consultare la guida di Python per run_model_analysis
.
Esempi end-to-end
Prova l'ampio esempio end-to-end con TensorFlow Transform per la preelaborazione delle funzionalità, TensorFlow Estimators per l'addestramento, TensorFlow Model Analysis e Jupyter per la valutazione e TensorFlow Serving per la pubblicazione.
Aggiunta di una metrica di post-esportazione personalizzata
Se desideri aggiungere la tua metrica post-esportazione personalizzata in TFMA, consulta la documentazione qui .