tf.estimator.DNNLinearCombinedEstimator
| Просмотреть исходный код на GitHub |
Estimator для соединённых моделей TensorFlow Linear и DNN с настраиваемой головкой.
Наследуется от: Estimator, Estimator
tf.estimator.DNNLinearCombinedEstimator(
head, model_dir=None, linear_feature_columns=None,
linear_optimizer='Ftrl', dnn_feature_columns=None,
dnn_optimizer='Adagrad', dnn_hidden_units=None,
dnn_activation_fn=tf.nn.relu, dnn_dropout=None, config=None,
linear_sparse_combiner='sum'
)
Примечание: Этот estimator также известен как wide-n-deep.
Пример:
numeric_feature = numeric_column(...)
categorical_column_a = categorical_column_with_hash_bucket(...)
categorical_column_b = categorical_column_with_hash_bucket(...)
categorical_feature_a_x_categorical_feature_b = crossed_column(...)
categorical_feature_a_emb = embedding_column(
categorical_column=categorical_feature_a, ...)
categorical_feature_b_emb = embedding_column(
categorical_column=categorical_feature_b, ...)
estimator = tf.estimator.DNNLinearCombinedEstimator(
head=tf.estimator.MultiLabelHead(n_classes=3),
# wide settings
linear_feature_columns=[categorical_feature_a_x_categorical_feature_b],
linear_optimizer=tf.keras.optimizers.Ftrl(...),
# deep settings
dnn_feature_columns=[
categorical_feature_a_emb, categorical_feature_b_emb,
numeric_feature],
dnn_hidden_units=[1000, 500, 100],
dnn_optimizer=tf.keras.optimizers.Adagrad(...))
# To apply L1 and L2 regularization, you can set dnn_optimizer to:
tf.compat.v1.train.ProximalAdagradOptimizer(
learning_rate=0.1,
l1_regularization_strength=0.001,
l2_regularization_strength=0.001)
# To apply learning rate decay, you can set dnn_optimizer to a callable:
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)
# It is the same for linear_optimizer.
# 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, steps=100)
metrics = estimator.evaluate(input_fn=input_fn_eval, steps=10)
predictions = estimator.predict(input_fn=input_fn_predict)
Входные данные train и evaluate должны иметь следующие признаки, в противном случае произойдёт KeyError.
- для каждого
columnвdnn_feature_columns+linear_feature_columns:- если
columnявляетсяCategoricalColumn, признак сkey=column.name, значение которогоvalueявляетсяSparseTensor. - если
columnявляетсяWeightedCategoricalColumn, два признака: первый сkeyименем столбца id, второй сkeyименем столбца weight. Значения обоих признаковvalueдолжны бытьSparseTensor. - если
columnявляетсяDenseColumn, признак сkey=column.name, значение которогоvalueявляетсяTensor.
- если
Функция потерь вычисляется с помощью среднеквадратичной ошибки.
| Аргументы | |
|---|---|
head | Экземпляр Head , созданный методом, например tf.estimator.MultiLabelHead. |
model_dir | Директория для сохранения параметров модели, графа и т. д. Также может быть использована для загрузки контрольных точек из директории в estimator для продолжения обучения ранее сохранённой модели. |
linear_feature_columns | Итерируемый объект, содержащий все столбцы признаков, используемые линейной частью модели. Все элементы должны быть экземплярами классов, производных от FeatureColumn. |
linear_optimizer | Экземпляр tf.keras.optimizers.* , используемый для применения градиентов к линейной части модели. Также может быть строкой (одной из 'Adagrad', 'Adam', 'Ftrl', 'RMSProp', 'SGD') или вызываемым объектом. По умолчанию используется оптимизатор FTRL. |
dnn_feature_columns | Итерируемый объект, содержащий все столбцы признаков, используемые глубокой частью модели. Все элементы должны быть экземплярами классов, производных от FeatureColumn. |
dnn_optimizer | Экземпляр tf.keras.optimizers.* , используемый для применения градиентов к глубокой части модели. Также может быть строкой (одной из 'Adagrad', 'Adam', 'Ftrl', 'RMSProp', 'SGD') или вызываемым объектом. По умолчанию используется оптимизатор Adagrad. |
dnn_hidden_units | Список скрытых узлов на слой. Все слои являются полностью подключёнными. |
dnn_activation_fn | Функция активации, применяемая к каждому слою. Если None, будет использована tf.nn.relu. |
dnn_dropout | Если не равно None, вероятность отбрасывания заданной координаты. |
config | Объект RunConfig для настройки параметров выполнения. |
linear_sparse_combiner | Строка, определяющая, как уменьшать линейную модель, если категориальный столбец многозначный. Одно из "mean", "sqrtn", "sum" — это эффективные способы нормализации на уровне примера, что может быть полезно для признаков типа «мешок слов». Подробнее см. tf.feature_column.linear_model. |
| Исключения | |
|---|---|
ValueError | Если как linear_feature_columns, так и dnn_features_columns пусты одновременно. |
Совместимость с Eager
Estimators могут использоваться при включённом eager выполнении. Обратите внимание, что 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 | Функция, которая строит входные данные для оценки. См. Предопределённые estimators для получения дополнительной информации. Функция должна сконструировать и вернуть один из следующих объектов:
|
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 для получения признаков и меток Tensors. Далее этот метод вызывает 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'}.
| Args | |
|---|---|
export_dir_base | Строка, содержащая каталог, в котором будут созданы подкаталоги с отметками времени, содержащие экспортированные SavedModel. |
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 (по умолчанию), выбирается самый последний чекпоинт, найденный в каталоге модели. |
| Returns | |
|---|---|
| Путь к экспортированному каталогу в виде объекта типа bytes. |
| Raises | |
|---|---|
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 from 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 для полной документации.
| Args | |
|---|---|
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, указывающее, какой режим будет экспортирован. Обратите внимание, что эта функция экспериментальная. |
| Returns | |
|---|---|
| Путь к экспортированному каталогу в виде объекта типа bytes. |
| Raises | |
|---|---|
ValueError | если не указан serving_input_receiver_fn, не указаны export_outputs или не найден чекпоинт. |
get_variable_names
get_variable_names()
Возвращает список всех имён переменных в этой модели.
| Returns | |
|---|---|
| Список имён. |
| Raises | |
|---|---|
ValueError | Если модель ещё не создала чекпоинт. |
get_variable_value
get_variable_value(
name
)
Возвращает значение переменной по имени.
| Args | |
|---|---|
name | Строка или список строк, имя тензора. |
| Returns | |
|---|---|
| Массив NumPy — значение тензора. |
| Raises | |
|---|---|
ValueError | Если модель ещё не создала чекпоинт. |
latest_checkpoint
latest_checkpoint()
Находит имя файла последнего сохранённого чекпоинта в model_dir.
| Returns | |
|---|---|
Полный путь к последнему чекпоинту или None в случае отсутствия чекпоинта. |
predict
predict(
input_fn, predict_keys=None, hooks=None, checkpoint_path=None,
yield_single_examples=True
)
Возвращает предсказания для заданных признаков.
Обратите внимание, что перекрестное использование двух результатов предсказания не работает. См.: issue/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, обучение продолжается бесконечно или до тех пор, пока 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.4/api_docs/python/tf/estimator/DNNLinearCombinedEstimator