Konfigurowanie zapisanego modelu Eval

Analiza modelu TensorFlow (TFMA) może wyeksportować wykres oceny modelu do specjalnego SavedModel o nazwie EvalSavedModel . (Należy pamiętać, że używany jest wykres oceny, a nie wykres do uczenia lub wnioskowania.) EvalSavedModel zawiera dodatkowe informacje, które umożliwiają TFMA obliczenie tych samych metryk oceny zdefiniowanych w modelu w sposób rozproszony na dużej ilości danych i zdefiniowanych przez użytkownika plasterki.

Zmodyfikuj istniejący model

Aby użyć istniejącego modelu z TFMA, najpierw zmodyfikuj model, aby wyeksportować EvalSavedModel . Odbywa się to poprzez dodanie wywołania do tfma.export.export_eval_savedmodel i jest podobne do estimator.export_savedmodel . Na przykład:

# 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 musi zostać zdefiniowany i jest podobny do serving_input_receiver_fn dla estimator.export_savedmodel . Podobnie jak serving_input_receiver_fn , funkcja eval_input_receiver_fn definiuje przykładowy symbol zastępczy danych wejściowych, analizuje funkcje z przykładu i zwraca przeanalizowane funkcje. Analizuje i zwraca etykietę.

Poniższy fragment definiuje przykład 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'])

W tym przykładzie widać, że:

  • labels mogą być również słownikiem. Przydatne w przypadku modelu wielogłowego.
  • Funkcja eval_input_receiver_fn będzie najprawdopodobniej taka sama, jak funkcja serving_input_receiver_fn . Jednak w niektórych przypadkach możesz chcieć zdefiniować dodatkowe funkcje krojenia. Na przykład wprowadzasz funkcję age_category , która dzieli funkcję age na wiele segmentów. Następnie możesz przeanalizować tę funkcję w TFMA, aby pomóc zrozumieć, jak wyniki Twojego modelu różnią się w różnych kategoriach wiekowych.

Dodawanie wskaźników poeksportowych

Dodatkowe metryki, które nie są uwzględnione w modelu, można dodać za pomocą add_metrics_callbacks . Aby uzyskać więcej informacji, zobacz pomoc Pythona dla run_model_analysis .

Przykłady od końca do końca

Wypróbuj obszerny, kompleksowy przykład obejmujący transformację TensorFlow do wstępnego przetwarzania funkcji, estymatory TensorFlow do szkolenia, analizę modelu TensorFlow i Jupyter do oceny oraz udostępnianie TensorFlow do udostępniania.

Dodawanie niestandardowej metryki poeksportowej

Jeśli chcesz dodać własną, niestandardową metrykę poeksportową w TFMA, zapoznaj się z dokumentacją tutaj .