tf.contrib.estimator.SavedModelEstimator
Создать Estimator из SavedModel.
Наследуется от: Estimator
tf.contrib.estimator.SavedModelEstimator(
saved_model_dir, model_dir=None
)
Для этого класса поддерживаются только SavedModel, экспортированные с помощью tf.estimator.Estimator.experimental_export_all_saved_models() или tf.estimator.Estimator.export_saved_model().
Пример с tf.estimator.DNNClassifier:
Шаг 1: Создать и обучить DNNClassifier.
feature1 = tf.feature_column.embedding_column(
tf.feature_column.categorical_column_with_vocabulary_list(
key='feature1', vocabulary_list=('green', 'yellow')), dimension=1)
feature2 = tf.feature_column.numeric_column(key='feature2', default_value=0.0)
classifier = tf.estimator.DNNClassifier(
hidden_units=[4,2], feature_columns=[feature1, feature2])
def input_fn():
features = {'feature1': tf.constant(['green', 'green', 'yellow']),
'feature2': tf.constant([3.5, 4.2, 6.1])}
label = tf.constant([1., 0., 0.])
return tf.data.Dataset.from_tensors((features, label)).repeat()
classifier.train(input_fn=input_fn, steps=10)
Шаг 2: Экспорт классификатора. Сначала создайте функции, которые определяют ожидаемые входные данные.
# During train and evaluation, both the features and labels should be defined.
supervised_input_receiver_fn = (
tf.estimator.experimental.build_raw_supervised_input_receiver_fn(
{'feature1': tf.placeholder(dtype=tf.string, shape=[None]),
'feature2': tf.placeholder(dtype=tf.float32, shape=[None])},
tf.placeholder(dtype=tf.float32, shape=[None])))
# During predict mode, expect to receive a `tf.Example` proto, so a parsing
# function is used.
serving_input_receiver_fn = (
tf.estimator.export.build_parsing_serving_input_receiver_fn(
tf.feature_column.make_parse_example_spec([feature1, feature2])))
Затем экспортируйте модель как SavedModel. Будет создана папка с отметкой времени (например /tmp/export_all/1234567890).
# Option 1: Save all modes (train, eval, predict)
export_dir = classifier.experimental_export_all_saved_models(
'/tmp/export_all',
{tf.estimator.ModeKeys.TRAIN: supervised_input_receiver_fn,
tf.estimator.ModeKeys.EVAL: supervised_input_receiver_fn,
tf.estimator.ModeKeys.PREDICT: serving_input_receiver_fn})
# Option 2: Only export predict mode
export_dir = classifier.export_saved_model(
'/tmp/export_predict', serving_input_receiver_fn)
Шаг 3: Создать SavedModelEstimator из экспортированного SavedModel.
est = tf.estimator.experimental.SavedModelEstimator(export_dir)
# If all modes were exported, you can immediately evaluate and predict, or
# continue training. Otherwise only predict is available.
eval_results = est.evaluate(input_fn=input_fn, steps=1)
print(eval_results)
est.train(input_fn=input_fn, steps=20)
def predict_input_fn():
example = tf.train.Example()
example.features.feature['feature1'].bytes_list.value.extend(['yellow'])
example.features.feature['feature2'].float_list.value.extend([1.])
return {'inputs':tf.constant([example.SerializeToString()])}
predictions = est.predict(predict_input_fn)
print(next(predictions))
| Аргументы | |
|---|---|
saved_model_dir | Директория, содержащая SavedModel protobuf и подпапки. |
model_dir | Директория для сохранения новых контрольных точек во время обучения. |
| Исключения | |
|---|---|
NotImplementedError | Если в конфигурации определена стратегия распределения. Этого не должно происходить, если SavedModelEstimator не является подклассом. |
| Атрибуты | |
|---|---|
config | |
export_savedmodel | |
model_dir | |
model_fn | Возвращает model_fn, привязанную к self.params. |
params | |
Методы
eval_dir
eval_dir(
name=None
)
Показывает имя директории, куда сохраняются метрики оценки.
| Аргументы | |
|---|---|
name | Имя оценки, если пользователю нужно выполнить несколько оценок на разных наборах данных, например, на обучающих и тестовых данных. Метрики для разных оценок сохраняются в отдельных папках и отображаются отдельно в tensorboard. |
| Возвращает | |
|---|---|
| Строка, представляющая путь к директории, содержащей метрики оценки. |
evaluate
evaluate(
input_fn, steps=None, hooks=None, checkpoint_path=None, name=None
)
Оценивает модель с использованием данных для оценки input_fn.
Для каждого шага вызывается input_fn, которое возвращает одну партию данных. Оценка выполняется до:
-
stepsпартий обработаны, или -
input_fnвозникает исключение конца ввода (tf.errors.OutOfRangeErrorилиStopIteration).
| Аргументы | |
|---|---|
input_fn | Функция, которая строит входные данные для оценки. См. Предварительно сконструированные Estimators для получения дополнительной информации. Функция должна строить и возвращать один из следующих объектов: * Объект tf.data.Dataset: Выходы объекта Dataset должны быть кортежем (features, labels) с теми же ограничениями, что и ниже. * Кортеж (features, labels): где features – это tf.Tensor или словарь из имени признака типа строка в Tensor, а labels – это Tensor или словарь из имени метки типа строка в Tensor. Оба features и labels потребляются model_fn. Они должны соответствовать ожиданиям от входов model_fn. |
steps | Количество шагов, на которых оценивается модель. Если None, оценивается до тех пор, пока input_fn не вызовет исключение конца ввода. |
hooks | Список экземпляров подкласса tf.train.SessionRunHook. Используется для обратных вызовов внутри вызова оценки. |
checkpoint_path | Путь к конкретной контрольной точке для оценки. Если None, используется последняя контрольная точка в model_dir. Если в model_dir нет контрольных точек, оценка выполняется с только что инициализированными Variables вместо тех, которые восстановлены из контрольной точки. |
name | Имя оценки, если пользователю нужно выполнить несколько оценок на разных наборах данных, например, на обучающих и тестовых данных. Метрики для разных оценок сохраняются в отдельных папках и отображаются отдельно в tensorboard. |
| Возвращает | |
|---|---|
Словарь, содержащий метрики оценки, указанные в model_fn, с ключами по имени, а также запись global_step, которая содержит значение глобального шага, для которого была выполнена эта оценка. Для готовых estimators, словарь содержит loss (средняя потеря на мини-пакет) и average_loss (средняя потеря на образец). Готовые классификаторы также возвращают accuracy. Готовые регрессоры также возвращают label/mean и prediction/mean. |
| Исключения | |
|---|---|
ValueError | Если steps <= 0. |
experimental_export_all_saved_models
experimental_export_all_saved_models(
export_dir_base, input_receiver_fn_map, assets_extra=None, as_text=False,
checkpoint_path=None
)
Экспортирует SavedModel с tf.MetaGraphDefs для каждого запрошенного режима.
Для каждого режима, переданного через input_receiver_fn_map, этот метод строит новую графу, вызывая input_receiver_fn для получения признаков и меток Tensor. Затем этот метод вызывает Estimator's model_fn в переданном режиме, чтобы сгенерировать граф модели на основе этих признаков и меток, и восстанавливает заданную контрольную точку (или, если таковой нет, последнюю контрольную точку) в граф. Только один из режимов используется для сохранения переменных в SavedModel (порядок предпочтения: tf.estimator.ModeKeys.TRAIN, tf.estimator.ModeKeys.EVAL, затем tf.estimator.ModeKeys.PREDICT), так что до трех tf.MetaGraphDefs сохраняются с одним набором переменных в одной директории экспорта SavedModel.
Для переменных и tf.MetaGraphDefs, создается временная папка экспорта под export_dir_base, и в нее записывается SavedModel , содержащий tf.MetaGraphDef для заданного режима и его связанных сигнатур.
Для предсказания экспортированный MetaGraphDef предоставит по одному SignatureDef для каждого элемента словаря export_outputs , возвращенного model_fn, с использованием тех же ключей. Один из этих ключей всегда tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY, указывающий, какая подпись будет обслуживаться, когда запрос обслуживания не указывает ее. Для каждой подписи выходы предоставляются соответствующими объектами tf.estimator.export.ExportOutput, а входные данные всегда являются получателями ввода, предоставленными serving_input_receiver_fn.
Для обучения и оценки train_op хранится в дополнительном наборе, и потери, метрики и предсказания включаются в SignatureDef для рассматриваемого режима.
Дополнительные ресурсы могут быть записаны в SavedModel через аргумент assets_extra. Это должен быть словарь, где каждый ключ задает путь назначения (включая имя файла) относительно директории assets.extra. Соответствующее значение дает полный путь к исходному файлу, который нужно скопировать. Например, простой случай копирования одного файла без переименования задается как {'my_asset_file.txt': '/path/to/my_asset_file.txt'}.
| Аргументы | |
|---|---|
export_dir_base | Строка, содержащая директорию, в которой должны быть созданы временные поддиректории, содержащие экспортированные SavedModels. |
input_receiver_fn_map | Словарь из tf.estimator.ModeKeys к отображениям input_receiver_fn, где input_receiver_fn – это функция без аргументов, которая возвращает соответствующий подкласс InputReceiver. |
assets_extra | Словарь, определяющий, как заполнить директорию assets.extra в экспортированном SavedModel, или None если дополнительные ресурсы не нужны. |
as_text | Признак записи SavedModel прото в текстовом формате. |
checkpoint_path | Путь к контрольной точке для экспорта. Если None (по умолчанию), выбирается последняя контрольная точка, найденная в каталоге модели. |
| Возвращает | |
|---|---|
| Путь к строке экспортированной директории. |
| Исключения | |
|---|---|
ValueError | если какой-либо input_receiver_fn – None, не предоставлены export_outputs или не найдена контрольная точка. |
export_saved_model
export_saved_model(
export_dir_base, serving_input_receiver_fn, assets_extra=None, as_text=False,
checkpoint_path=None, experimental_mode=ModeKeys.PREDICT
)
Экспортирует граф инференции как SavedModel в указанный каталог.
Подробное руководство см. в Использование SavedModel с Estimators.
Этот метод строит новый граф, сначала вызывая serving_input_receiver_fn для получения признаков Tensor, а затем вызывая Estimator этого model_fn для генерации графа модели на основе этих признаков. Он восстанавливает заданный контрольный пункт (или, при его отсутствии, самый последний контрольный пункт) в этот граф в новой сессии. Наконец, он создаёт каталог экспорта с отметкой времени в заданном export_dir_base, и записывает SavedModel в него, содержащий один tf.MetaGraphDef, сохранённый из этой сессии.
Экспортированный MetaGraphDef предоставит по одному SignatureDef для каждого элемента словаря export_outputs, возвращённого model_fn, используя те же ключи. Один из этих ключей всегда tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY, указывая, какая сигнатура будет использоваться при запросе обслуживания, если она не указана. Для каждой сигнатуры выходные данные предоставляются соответствующими tf.estimator.export.ExportOutput, а входные данные всегда — приёмниками входных данных, предоставляемыми serving_input_receiver_fn.
Дополнительные ресурсы могут быть записаны в SavedModel через аргумент assets_extra. Это должен быть словарь, где каждый ключ задаёт путь назначения (включая имя файла) относительно каталога assets.extra. Соответствующее значение даёт полный путь исходного файла, который будет скопирован. Например, простой случай копирования одного файла без переименования задаётся как {'my_asset_file.txt': '/path/to/my_asset_file.txt'}.
Параметр experimental_mode может использоваться для экспорта одного графа обучения/оценки/предсказания как SavedModel. См. experimental_export_all_saved_models для полного описания.
| Аргументы | |
|---|---|
export_dir_base | Строка, содержащая каталог, в котором создавать подкаталоги с отметкой времени, содержащие экспортированные SavedModelы. |
serving_input_receiver_fn | Функция, которая не принимает аргументов и возвращает tf.estimator.export.ServingInputReceiver или tf.estimator.export.TensorServingInputReceiver. |
assets_extra | Словарь, определяющий способ заполнения каталога assets.extra в экспортированном SavedModel, или None, если дополнительные ресурсы не требуются. |
as_text | Флаг записи протокола SavedModel в текстовом формате. |
checkpoint_path | Путь к контрольному пункту для экспорта. Если None (по умолчанию), выбирается самый последний контрольный пункт, найденный в каталоге модели. |
experimental_mode | Значение tf.estimator.ModeKeys, указывающее, какой режим будет экспортирован. Обратите внимание, что эта функция экспериментальная. |
| Возвращает | |
|---|---|
| Строковый путь к экспортированному каталогу. |
| Исключения | |
|---|---|
ValueError | если не указан serving_input_receiver_fn, не указаны export_outputs или не найден контрольный пункт. |
get_variable_names
get_variable_names()
Возвращает список всех имён переменных в этой модели.
| Возвращает | |
|---|---|
| Список имён. |
| Исключения | |
|---|---|
ValueError | Если Estimator ещё не создал контрольный пункт. |
get_variable_value
get_variable_value(
name
)
Возвращает значение переменной, заданной по имени.
| Аргументы | |
|---|---|
name | строка или список строк, имя тензора. |
| Возвращает | |
|---|---|
| Массив NumPy - значение тензора. |
| Исключения | |
|---|---|
ValueError | Если Estimator ещё не создал контрольный пункт. |
latest_checkpoint
latest_checkpoint()
Находит имя файла последнего сохранённого контрольного пункта в model_dir.
| Возвращает | |
|---|---|
Полный путь к последнему контрольному пункту или None , если контрольный пункт не был найден. |
predict
predict(
input_fn, predict_keys=None, hooks=None, checkpoint_path=None,
yield_single_examples=True
)
Возвращает предсказания для заданных признаков.
Обратите внимание, что чередование двух выходных данных предсказания не работает. См.: вопрос/20506
| Аргументы | |
|---|---|
input_fn | Функция, которая строит признаки. Предсказание продолжается до тех пор, пока input_fn не вызовет исключение конца ввода (tf.errors.OutOfRangeError или StopIteration). См. Предельные оценщики для получения дополнительной информации. Функция должна строить и возвращать одно из следующего:
|
predict_keys | список str, имя ключей для предсказания. Используется, если tf.estimator.EstimatorSpec.predictions является dict. Если predict_keys используется, остальная часть предсказаний будет отфильтрована из словаря. Если None, возвращает все. |
hooks | Список экземпляров подклассов tf.train.SessionRunHook. Используется для обратных вызовов внутри вызова предсказания. |
checkpoint_path | Путь к определённому контрольному пункту для предсказания. Если None, используется последний контрольный пункт в model_dir. Если в model_dir нет контрольных пунктов, предсказание выполняется с только что инициализированными Variables вместо восстановленных из контрольного пункта. |
yield_single_examples | Если False, возвращает всю партию, как возвращает model_fn вместо разбиения партии на отдельные элементы. Это полезно, если model_fn возвращает некоторые тензоры, первая размерность которых не равна размеру партии. |
Возвращает:
Вычисленные значения тензоров predictions.
| Исключения | |
|---|---|
ValueError | Если длина партии предсказаний не совпадает и yield_single_examples равно True. |
ValueError | Если есть конфликт между predict_keys и predictions. Например, если predict_keys не равно None, но tf.estimator.EstimatorSpec.predictions не является dict. |
train
train(
input_fn, hooks=None, steps=None, max_steps=None, saving_listeners=None
)
Обучает модель с использованием обучающих данных input_fn.
| Аргументы | |
|---|---|
input_fn | Функция, предоставляющая входные данные для обучения в виде мини-пакетов. См. Предопределенные оценщики для получения дополнительной информации. Функция должна строить и возвращать один из следующих объектов:
|
hooks | Список экземпляров подклассов tf.train.SessionRunHook. Используется для обратных вызовов внутри цикла обучения. |
steps | Количество шагов для обучения модели. Если None, обучение происходит бесконечно или до тех пор, пока input_fn не сгенерирует ошибку tf.errors.OutOfRange или исключение StopIteration. steps работает пошагово. Если вы вызовете train(steps=10) дважды, обучение произойдет в общей сложности на 20 шагах. Если OutOfRange или StopIteration возникнут в середине процесса, обучение остановится до достижения 20 шагов. Если вы не хотите пошагового поведения, установите max_steps вместо этого. Если установлено, max_steps должно быть None. |
max_steps | Общее количество шагов для обучения модели. Если None, обучение происходит бесконечно или до тех пор, пока input_fn не сгенерирует ошибку tf.errors.OutOfRange или исключение StopIteration. Если установлено, steps должно быть None. Если OutOfRange или StopIteration возникнут в середине, обучение остановится до достижения max_steps шагов. Два вызова train(steps=100) означают 200 итераций обучения. С другой стороны, два вызова train(max_steps=100) означают, что второй вызов не выполнит итерацию, так как первый вызов выполнил все 100 шагов. |
saving_listeners | список объектов CheckpointSaverListener. Используется для обратных вызовов, выполняемых непосредственно перед или после сохранения контрольных точек. |
| Возвращаемое значение | |
|---|---|
self, для цепочки вызовов. |
| Исключения | |
|---|---|
ValueError | Если оба steps и max_steps не являются None. |
ValueError | Если либо steps или max_steps <= 0. |
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/contrib/estimator/SavedModelEstimator