tf.estimator.DNNClassifier
| Просмотреть исходный код на GitHub |
Классификатор для моделей TensorFlow DNN.
Наследуется от: Estimator, Estimator
tf.estimator.DNNClassifier(
hidden_units,
feature_columns,
model_dir=None,
n_classes=2,
weight_column=None,
label_vocabulary=None,
optimizer='Adagrad',
activation_fn=tf.nn.relu,
dropout=None,
config=None,
warm_start_from=None,
loss_reduction=tf.losses.Reduction.SUM_OVER_BATCH_SIZE,
batch_norm=False
)
Пример:
categorical_feature_a = categorical_column_with_hash_bucket(...)
categorical_feature_b = categorical_column_with_hash_bucket(...)
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.DNNClassifier(
feature_columns=[categorical_feature_a_emb, categorical_feature_b_emb],
hidden_units=[1024, 512, 256])
# Or estimator using the ProximalAdagradOptimizer optimizer with
# regularization.
estimator = tf.estimator.DNNClassifier(
feature_columns=[categorical_feature_a_emb, categorical_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.DNNClassifier(
feature_columns=[categorical_feature_a_emb, categorical_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.DNNClassifier(
feature_columns=[categorical_feature_a_emb, categorical_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.
- Если
Функция потерь вычисляется с использованием перекрестной энтропии softmax.
| Аргументы | |
|---|---|
hidden_units | Последовательность числа скрытых узлов на слое. Все слои являются полносвязными. Например, [64, 32] означает, что первый слой имеет 64 узла, а второй — 32. |
feature_columns | Последовательность всех столбцов признаков, используемых моделью. Все элементы должны быть экземплярами классов, производных от _FeatureColumn. |
model_dir | Директория для сохранения параметров модели, графика и т. д. Также может использоваться для загрузки контрольных точек из директории в эстиматор для продолжения обучения ранее сохраненной модели. |
n_classes | Количество классов меток. По умолчанию 2 (бинарная классификация). Должно быть > 1. |
weight_column | Строка или NumericColumn, созданный с помощью tf.feature_column.numeric_column, определяющий столбец признаков, представляющий веса. Используется для понижения или повышения веса примеров во время обучения. Будет умножен на потерю примера. Если это строка, она используется в качестве ключа для извлечения тензора весов из features. Если это _NumericColumn, сырой тензор извлекается по ключу weight_column.key, затем применяется weight_column.normalizer_fn, чтобы получить тензор весов. |
label_vocabulary | Список строк, представляющих возможные значения меток. Если задано, метки должны быть строкового типа и иметь любое значение в label_vocabulary. Если не задано, это означает, что метки уже закодированы как целые или вещественные числа в диапазоне [0, 1] для n_classes=2 и закодированы как целые значения в {0, 1,..., n_classes-1} для n_classes>2. Также будут ошибки, если словарь не задан, а метки являются строками. |
optimizer | Экземпляр tf.keras.optimizers.*, используемый для обучения модели. Также может быть строкой ('Adagrad', 'Adam', 'Ftrl', 'RMSProp', SGD') или вызываемым объектом. По умолчанию оптимизатор Adagrad. |
activation_fn | Функция активации, применяемая к каждому слою. Если None, будет использована tf.nn.relu. |
dropout | Если не None, вероятность того, что заданная координата будет отброшена. |
config | Объект RunConfig для настройки параметров выполнения. |
warm_start_from | Путь к файлу контрольной точки для начального обучения или объект WarmStartSettings для полной настройки начального обучения. Если указан путь к файлу строки вместо объекта WarmStartSettings, все веса будут начальны, и предполагается, что словари и имена тензоров не изменены. |
loss_reduction | Один из tf.losses.Reduction кроме NONE. Описывает, как уменьшить функцию потерь на батче. По умолчанию SUM_OVER_BATCH_SIZE. |
batch_norm | Нужно ли использовать пакетную нормализацию после каждого скрытого слоя. |
| Атрибуты | |
|---|---|
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.ExportOutputs, а входные данные всегда являются входными приемниками, предоставляемыми 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 | Строка, содержащая каталог, в котором создавать каталоги с отметкой времени, содержащие экспортированные 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 (по умолчанию), выбирается самый последний контрольный пункт, найденный в каталоге модели. |
| Returns | |
|---|---|
| Путь к экспортированному каталогу как объект байтов. |
| 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, см. Использование формата SavedModel.
Этот метод создаёт новую графу, сначала вызывая 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 для полной документации.
| Args | |
|---|---|
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, указывающее, какой режим будет экспортирован. Обратите внимание, что эта функция является экспериментальной. |
| Returns | |
|---|---|
| Путь к экспортированному каталогу как объект байтов. |
| 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
)
Возвращает предсказания для заданных признаков.
Обратите внимание, что переключение двух выходов predict не работает. См.: вопрос/20506
| Args | |
|---|---|
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 возвращает некоторые тензоры, первая размерность которых не равна размеру партии. |
| Yields | |
|---|---|
Оцененные значения тензоров predictions . |
| Raises | |
|---|---|
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.
| Args | |
|---|---|
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. Используется для обратного вызова, который выполняется непосредственно перед или после сохранения контрольных точек. |
| Returns | |
|---|---|
self, для цепочки вызовов. |
| Raises | |
|---|---|
ValueError | Если и steps, и max_steps не являются None. |
ValueError | Если либо steps, либо max_steps <= 0. |
совместимость с eager-режимом
Оценка можно использовать при включённом режиме eager execution. Обратите внимание, что input_fn и все хуки выполняются внутри контекста графа, поэтому они должны быть написаны так, чтобы быть совместимыми с режимом графа. Обратите внимание, что код input_fn с использованием tf.data обычно работает в обоих режимах — граф и eager.
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.9/api_docs/python/tf/estimator/DNNClassifier