tf.estimator.DNNEstimator
| Просмотреть исходный код на GitHub |
Оценщик для моделей TensorFlow DNN с заданным пользователем головным блоком.
Наследуется от: Estimator
tf.estimator.DNNEstimator(
head, hidden_units, feature_columns, model_dir=None, optimizer='Adagrad',
activation_fn=tf.nn.relu, dropout=None, config=None, warm_start_from=None,
batch_norm=False
)
Пример:
sparse_feature_a = sparse_column_with_hash_bucket(...)
sparse_feature_b = sparse_column_with_hash_bucket(...)
sparse_feature_a_emb = embedding_column(sparse_id_column=sparse_feature_a,
...)
sparse_feature_b_emb = embedding_column(sparse_id_column=sparse_feature_b,
...)
estimator = tf.estimator.DNNEstimator(
head=tf.estimator.MultiLabelHead(n_classes=3),
feature_columns=[sparse_feature_a_emb, sparse_feature_b_emb],
hidden_units=[1024, 512, 256])
# Or estimator using the ProximalAdagradOptimizer optimizer with
# regularization.
estimator = tf.estimator.DNNEstimator(
head=tf.estimator.MultiLabelHead(n_classes=3),
feature_columns=[sparse_feature_a_emb, sparse_feature_b_emb],
hidden_units=[1024, 512, 256],
optimizer=tf.compat.v1.train.ProximalAdagradOptimizer(
learning_rate=0.1,
l1_regularization_strength=0.001
))
# Or estimator using an optimizer with a learning rate decay.
estimator = tf.estimator.DNNEstimator(
head=tf.estimator.MultiLabelHead(n_classes=3),
feature_columns=[sparse_feature_a_emb, sparse_feature_b_emb],
hidden_units=[1024, 512, 256],
optimizer=lambda: tf.keras.optimizers.Adam(
learning_rate=tf.compat.v1.train.exponential_decay(
learning_rate=0.1,
global_step=tf.compat.v1.train.get_global_step(),
decay_steps=10000,
decay_rate=0.96))
# Or estimator with warm-starting from a previous checkpoint.
estimator = tf.estimator.DNNEstimator(
head=tf.estimator.MultiLabelHead(n_classes=3),
feature_columns=[sparse_feature_a_emb, sparse_feature_b_emb],
hidden_units=[1024, 512, 256],
warm_start_from="/path/to/checkpoint/dir")
# Input builders
def input_fn_train:
# Returns tf.data.Dataset of (x, y) tuple where y represents label's class
# index.
pass
def input_fn_eval:
# Returns tf.data.Dataset of (x, y) tuple where y represents label's class
# index.
pass
def input_fn_predict:
# Returns tf.data.Dataset of (x, None) tuple.
pass
estimator.train(input_fn=input_fn_train)
metrics = estimator.evaluate(input_fn=input_fn_eval)
predictions = estimator.predict(input_fn=input_fn_predict)
Входные данные train и evaluate должны содержать следующие признаки, в противном случае возникнет KeyError:
- если
weight_columnне равноNone, признак с именемkey=weight_column, значение которого являетсяTensor. - для каждого
columnвfeature_columns:- если
columnявляетсяCategoricalColumn, признак с именемkey=column.name, значение которого являетсяSparseTensor. - если
columnявляетсяWeightedCategoricalColumn, два признака: первый с именем столбцаkey, второй с именем столбцаkey. Значения обоих признаков должны бытьSparseTensor. - если
columnявляетсяDenseColumn, признак с именемkey=column.name, значение которого являетсяTensor.
- если
Функция потерь и предсказанный вывод определяются заданным головным блоком.
| Аргументы | |
|---|---|
head | Экземпляр _Head, созданный с помощью метода, такого как tf.contrib.estimator.multi_label_head. |
hidden_units | Последовательность чисел скрытых нейронов на каждом слое. Все слои являются полностью соединёнными. Например, [64, 32] означает, что первый слой имеет 64 узла, а второй — 32. |
feature_columns | Последовательность всех столбцов признаков, используемых моделью. Все элементы должны быть экземплярами классов, производных от _FeatureColumn. |
model_dir | Каталог для сохранения параметров модели, графа и т. д. Его также можно использовать для загрузки контрольных точек из каталога в оценщик для продолжения обучения ранее сохранённой модели. |
optimizer | Экземпляр tf.keras.optimizers.*, используемый для обучения модели. Также может быть строкой (одним из 'Adagrad', 'Adam', 'Ftrl', 'RMSProp', SGD') или вызываемым объектом. По умолчанию используется оптимизатор Adagrad. |
activation_fn | Функция активации, применяемая к каждому слою. Если None, будет использована tf.nn.relu. |
dropout | Вероятность отбрасывания заданной координаты, если она не None. |
config | Объект RunConfig для настройки параметров выполнения. |
warm_start_from | Путь к файлу контрольной точки для начального обучения (warm-start) или объект WarmStartSettings для полной настройки начального обучения. Если предоставлен путь к файлу, вместо объекта, то все веса будут начально обучены, и предполагается, что словари и имена тензоров не изменены. |
batch_norm | Использовать ли пакетную нормализацию после каждого скрытого слоя. |
Совместимость с Eager
Оценщики могут использоваться при включённом режиме eager execution. Обратите внимание, что input_fn и все хуки выполняются внутри контекста графа, поэтому они должны быть написаны для совместимости с режимом графа. Обратите внимание, что input_fn код, использующий tf.data, как правило, работает в обоих режимах (графа и eager).
| Атрибуты | |
|---|---|
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 | Функция, которая строит входные данные для оценки. См. Предварительно подготовленные оценщики для получения дополнительной информации. Функция должна создавать и возвращать один из следующих объектов:
|
steps | Количество шагов для оценки модели. Если None, оценка выполняется до тех пор, пока input_fn не вызовет исключение конца ввода. |
hooks | Список экземпляров подкласса tf.train.SessionRunHook . Используется для обратных вызовов внутри вызова оценки. |
checkpoint_path | Путь к определённой контрольной точке для оценки. Если None, используется последняя контрольная точка в model_dir . Если в model_dir нет контрольных точек, оценка выполняется с новыми инициализированными Variables вместо восстановленных из контрольной точки. |
name | Имя оценки, если пользователю нужно выполнить несколько оценок на разных наборах данных, например, на обучающих и тестовых данных. Метрики для разных оценок сохраняются в отдельных папках и отображаются отдельно в TensorBoard. |
| Возвращаемое значение | |
|---|---|
Словарь, содержащий метрики оценки, указанные в model_fn с ключами по имени, а также запись global_step, содержащую значение глобального шага, на котором была выполнена эта оценка. Для предварительно подготовленных оценщиков словарь содержит 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's 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.ExportOutputs, а входные данные всегда являются входными приемниками, предоставленными 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 | Строка, содержащая директорию, в которой будут создаваться поддиректории с отметкой времени, содержащие экспортированные SavedModels. |
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). См. Premade Estimators для получения дополнительной информации. Функция должна создать и вернуть одно из следующего:
|
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/r2.3/api_docs/python/tf/estimator/DNNEstimator