Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Estimadores

Ver en TensorFlow.org Ejecutar en Google Colab Ver código fuente en GitHub Descargar cuaderno

Este documento presenta tf.estimator una API de TensorFlow de alto nivel. Los estimadores encapsulan las siguientes acciones:

  • formación
  • evaluación
  • predicción
  • exportar para servir

Puede usar los Estimadores prefabricados que proporcionamos o escribir sus propios Estimadores personalizados. Todos los estimadores, ya sean prefabricados o personalizados, son clases basadas en la clase tf.estimator.Estimator .

Para un ejemplo rápido, pruebe los tutoriales de Estimator Para obtener una descripción general del diseño de la API, consulte el documento técnico .

Ventajas

Similar a un tf.keras.Model , un estimator es una abstracción a nivel de modelo. El tf.estimator proporciona algunas capacidades actualmente todavía en desarrollo para tf.keras . Estos son:

  • Formación basada en el servidor de parámetros
  • Integración TFX completa.

Capacidades de estimadores

Los estimadores brindan los siguientes beneficios:

  • Puede ejecutar modelos basados ​​en Estimator en un host local o en un entorno multiservidor distribuido sin cambiar su modelo. Además, puede ejecutar modelos basados ​​en Estimator en CPU, GPU o TPU sin recodificar su modelo.
  • Los estimadores proporcionan un ciclo de entrenamiento distribuido seguro que controla cómo y cuándo:
    • Cargar datos
    • manejar excepciones
    • crear archivos de puntos de control y recuperarse de fallas
    • guardar resúmenes para TensorBoard

Al escribir una aplicación con Estimadores, debe separar la tubería de entrada de datos del modelo. Esta separación simplifica los experimentos con diferentes conjuntos de datos.

Estimadores prefabricados

Los Estimadores prefabricados le permiten trabajar a un nivel conceptual mucho más alto que las API básicas de TensorFlow. Ya no tiene que preocuparse por crear el gráfico computacional o las sesiones ya que los Estimadores manejan toda la "plomería" por usted. Además, los Estimadores prefabricados le permiten experimentar con diferentes arquitecturas de modelo al hacer solo cambios mínimos de código. tf.estimator.DNNClassifier , por ejemplo, es una clase de Estimador prefabricada que entrena modelos de clasificación basados ​​en densas redes neuronales de retroalimentación.

Estructura de un programa de Estimadores prefabricado

Un programa TensorFlow que se basa en un Estimador prefabricado generalmente consta de los siguientes cuatro pasos:

1. Escriba una o más funciones de importación de conjuntos de datos.

Por ejemplo, puede crear una función para importar el conjunto de entrenamiento y otra función para importar el conjunto de prueba. Cada función de importación del conjunto de datos debe devolver dos objetos:

  • un diccionario en el que las claves son nombres de funciones y los valores son Tensores (o SparseTensors) que contienen los datos de funciones correspondientes
  • un tensor que contiene una o más etiquetas

Por ejemplo, el siguiente código ilustra el esqueleto básico para una función de entrada:

 def input_fn(dataset):
    ...  # manipulate dataset, extracting the feature dict and the label
    return feature_dict, label
 

Consulte la guía de datos para más detalles.

2. Defina las columnas de características.

Cada tf.feature_column identifica un nombre de característica, su tipo y cualquier preprocesamiento de entrada. Por ejemplo, el siguiente fragmento crea tres columnas de características que contienen datos enteros o de punto flotante. Las dos primeras columnas de características simplemente identifican el nombre y el tipo de la característica. La tercera columna de características también especifica una lambda que el programa invocará para escalar los datos sin procesar:

 # Define three numeric feature columns.
population = tf.feature_column.numeric_column('population')
crime_rate = tf.feature_column.numeric_column('crime_rate')
median_education = tf.feature_column.numeric_column(
  'median_education',
  normalizer_fn=lambda x: x - global_education_mean)
 

Para obtener más información, consulte el tutorial de columnas de características .

3. Instanciar el Estimador prefabricado relevante.

Por ejemplo, aquí hay una instancia de muestra de un Estimador LinearClassifier llamado LinearClassifier :

 # Instantiate an estimator, passing the feature columns.
estimator = tf.estimator.LinearClassifier(
  feature_columns=[population, crime_rate, median_education])
 

Para obtener más información, consulte el tutorial del clasificador lineal .

4. Llame a un método de capacitación, evaluación o inferencia.

Por ejemplo, todos los Estimadores proporcionan un método de train , que entrena un modelo.

 # `input_fn` is the function created in Step 1
estimator.train(input_fn=my_training_set, steps=2000)
 

Puedes ver un ejemplo de esto a continuación.

Beneficios de los estimadores prefabricados

Los Estimadores prefabricados codifican las mejores prácticas, proporcionando los siguientes beneficios:

  • Mejores prácticas para determinar dónde deben ejecutarse las diferentes partes del gráfico computacional, implementando estrategias en una sola máquina o en un clúster.
  • Mejores prácticas para la redacción de eventos (resumen) y resúmenes universalmente útiles.

Si no utiliza Estimadores prefabricados, debe implementar las características anteriores usted mismo.

Estimadores personalizados

El corazón de cada Estimador, ya sea prefabricado o personalizado, es su función de modelo , que es un método que crea gráficos para capacitación, evaluación y predicción. Cuando utiliza un Estimador prefabricado, otra persona ya ha implementado la función del modelo. Al confiar en un Estimador personalizado, debe escribir la función del modelo usted mismo.

  1. Suponiendo que exista un Estimador prefabricado adecuado, úselo para construir su primer modelo y use sus resultados para establecer una línea de base.
  2. Cree y pruebe su canalización general, incluida la integridad y confiabilidad de sus datos con este Estimador prefabricado.
  3. Si hay disponibles Estimadores prefabricados alternativos adecuados, realice experimentos para determinar qué Estimador prefabricado produce los mejores resultados.
  4. Posiblemente, mejore aún más su modelo construyendo su propio Estimador personalizado.
 import tensorflow as tf
 
 import tensorflow_datasets as tfds
tfds.disable_progress_bar()
 

Crear un estimador a partir de un modelo de Keras

Puede convertir los modelos Keras existentes en Estimadores con tf.keras.estimator.model_to_estimator . Hacerlo permite que su modelo Keras acceda a las fortalezas de Estimator, como el entrenamiento distribuido.

Cree una instancia de un modelo Keras MobileNet V2 y compile el modelo con el optimizador, la pérdida y las métricas para entrenar con:

 keras_mobilenet_v2 = tf.keras.applications.MobileNetV2(
    input_shape=(160, 160, 3), include_top=False)
keras_mobilenet_v2.trainable = False

estimator_model = tf.keras.Sequential([
    keras_mobilenet_v2,
    tf.keras.layers.GlobalAveragePooling2D(),
    tf.keras.layers.Dense(1)
])

# Compile the model
estimator_model.compile(
    optimizer='adam',
    loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
    metrics=['accuracy'])
 
Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/mobilenet_v2/mobilenet_v2_weights_tf_dim_ordering_tf_kernels_1.0_160_no_top.h5
9412608/9406464 [==============================] - 1s 0us/step

Cree un Estimator partir del modelo compilado de Keras. El estado del modelo inicial del modelo de Keras se conserva en el Estimator creado:

 est_mobilenet_v2 = tf.keras.estimator.model_to_estimator(keras_model=estimator_model)
 
INFO:tensorflow:Using default config.
WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmp3kl6ql4q
INFO:tensorflow:Using the Keras model provided.
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/ops/resource_variable_ops.py:1666: calling BaseResourceVariable.__init__ (from tensorflow.python.ops.resource_variable_ops) with constraint is deprecated and will be removed in a future version.
Instructions for updating:
If using Keras pass *_constraint arguments to layers.
INFO:tensorflow:Using config: {'_model_dir': '/tmp/tmp3kl6ql4q', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true
graph_options {
  rewrite_options {
    meta_optimizer_iterations: ONE
  }
}
, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_service': None, '_cluster_spec': ClusterSpec({}), '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}

Trate el Estimator derivado como lo haría con cualquier otro Estimator .

 IMG_SIZE = 160  # All images will be resized to 160x160

def preprocess(image, label):
  image = tf.cast(image, tf.float32)
  image = (image/127.5) - 1
  image = tf.image.resize(image, (IMG_SIZE, IMG_SIZE))
  return image, label
 
 def train_input_fn(batch_size):
  data = tfds.load('cats_vs_dogs', as_supervised=True)
  train_data = data['train']
  train_data = train_data.map(preprocess).shuffle(500).batch(batch_size)
  return train_data
 

Para entrenar, llame a la función de tren del Estimador:

 est_mobilenet_v2.train(input_fn=lambda: train_input_fn(32), steps=500)
 
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/training/training_util.py:236: Variable.initialized_value (from tensorflow.python.ops.variables) is deprecated and will be removed in a future version.
Instructions for updating:
Use Variable.read_value. Variables in 2.X are initialized automatically both in eager and graph (inside tf.defun) contexts.
Downloading and preparing dataset cats_vs_dogs/4.0.0 (download: 786.68 MiB, generated: Unknown size, total: 786.68 MiB) to /home/kbuilder/tensorflow_datasets/cats_vs_dogs/4.0.0...

Warning:absl:1738 images were corrupted and were skipped

Shuffling and writing examples to /home/kbuilder/tensorflow_datasets/cats_vs_dogs/4.0.0.incompleteY3OG6H/cats_vs_dogs-train.tfrecord
Dataset cats_vs_dogs downloaded and prepared to /home/kbuilder/tensorflow_datasets/cats_vs_dogs/4.0.0. Subsequent calls will reuse this data.
INFO:tensorflow:Calling model_fn.

INFO:tensorflow:Calling model_fn.

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Warm-starting with WarmStartSettings: WarmStartSettings(ckpt_to_initialize_from='/tmp/tmp3kl6ql4q/keras/keras_model.ckpt', vars_to_warm_start='.*', var_name_to_vocab_info={}, var_name_to_prev_var_name={})

INFO:tensorflow:Warm-starting with WarmStartSettings: WarmStartSettings(ckpt_to_initialize_from='/tmp/tmp3kl6ql4q/keras/keras_model.ckpt', vars_to_warm_start='.*', var_name_to_vocab_info={}, var_name_to_prev_var_name={})

INFO:tensorflow:Warm-starting from: /tmp/tmp3kl6ql4q/keras/keras_model.ckpt

INFO:tensorflow:Warm-starting from: /tmp/tmp3kl6ql4q/keras/keras_model.ckpt

INFO:tensorflow:Warm-starting variables only in TRAINABLE_VARIABLES.

INFO:tensorflow:Warm-starting variables only in TRAINABLE_VARIABLES.

INFO:tensorflow:Warm-started 158 variables.

INFO:tensorflow:Warm-started 158 variables.

INFO:tensorflow:Create CheckpointSaverHook.

INFO:tensorflow:Create CheckpointSaverHook.

INFO:tensorflow:Graph was finalized.

INFO:tensorflow:Graph was finalized.

INFO:tensorflow:Running local_init_op.

INFO:tensorflow:Running local_init_op.

INFO:tensorflow:Done running local_init_op.

INFO:tensorflow:Done running local_init_op.

INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...

INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...

INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmp3kl6ql4q/model.ckpt.

INFO:tensorflow:Saving checkpoints for 0 into /tmp/tmp3kl6ql4q/model.ckpt.

INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...

INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...

INFO:tensorflow:loss = 0.7249289, step = 0

INFO:tensorflow:loss = 0.7249289, step = 0

INFO:tensorflow:global_step/sec: 20.5614

INFO:tensorflow:global_step/sec: 20.5614

INFO:tensorflow:loss = 0.67807716, step = 100 (4.865 sec)

INFO:tensorflow:loss = 0.67807716, step = 100 (4.865 sec)

INFO:tensorflow:global_step/sec: 22.1484

INFO:tensorflow:global_step/sec: 22.1484

INFO:tensorflow:loss = 0.6722798, step = 200 (4.515 sec)

INFO:tensorflow:loss = 0.6722798, step = 200 (4.515 sec)

INFO:tensorflow:global_step/sec: 21.9558

INFO:tensorflow:global_step/sec: 21.9558

INFO:tensorflow:loss = 0.60414714, step = 300 (4.555 sec)

INFO:tensorflow:loss = 0.60414714, step = 300 (4.555 sec)

INFO:tensorflow:global_step/sec: 21.9324

INFO:tensorflow:global_step/sec: 21.9324

INFO:tensorflow:loss = 0.7141589, step = 400 (4.559 sec)

INFO:tensorflow:loss = 0.7141589, step = 400 (4.559 sec)

INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 500...

INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 500...

INFO:tensorflow:Saving checkpoints for 500 into /tmp/tmp3kl6ql4q/model.ckpt.

INFO:tensorflow:Saving checkpoints for 500 into /tmp/tmp3kl6ql4q/model.ckpt.

INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 500...

INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 500...

INFO:tensorflow:Loss for final step: 0.6571169.

INFO:tensorflow:Loss for final step: 0.6571169.

<tensorflow_estimator.python.estimator.estimator.EstimatorV2 at 0x7f7aa444ef60>

Del mismo modo, para evaluar, llame a la función de evaluación del Estimador:

 est_mobilenet_v2.evaluate(input_fn=lambda: train_input_fn(32), steps=10)
 
INFO:tensorflow:Calling model_fn.

INFO:tensorflow:Calling model_fn.

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Starting evaluation at 2020-07-23T01:29:37Z

INFO:tensorflow:Starting evaluation at 2020-07-23T01:29:37Z

INFO:tensorflow:Graph was finalized.

INFO:tensorflow:Graph was finalized.

INFO:tensorflow:Restoring parameters from /tmp/tmp3kl6ql4q/model.ckpt-500

INFO:tensorflow:Restoring parameters from /tmp/tmp3kl6ql4q/model.ckpt-500

INFO:tensorflow:Running local_init_op.

INFO:tensorflow:Running local_init_op.

INFO:tensorflow:Done running local_init_op.

INFO:tensorflow:Done running local_init_op.

INFO:tensorflow:Evaluation [1/10]

INFO:tensorflow:Evaluation [1/10]

INFO:tensorflow:Evaluation [2/10]

INFO:tensorflow:Evaluation [2/10]

INFO:tensorflow:Evaluation [3/10]

INFO:tensorflow:Evaluation [3/10]

INFO:tensorflow:Evaluation [4/10]

INFO:tensorflow:Evaluation [4/10]

INFO:tensorflow:Evaluation [5/10]

INFO:tensorflow:Evaluation [5/10]

INFO:tensorflow:Evaluation [6/10]

INFO:tensorflow:Evaluation [6/10]

INFO:tensorflow:Evaluation [7/10]

INFO:tensorflow:Evaluation [7/10]

INFO:tensorflow:Evaluation [8/10]

INFO:tensorflow:Evaluation [8/10]

INFO:tensorflow:Evaluation [9/10]

INFO:tensorflow:Evaluation [9/10]

INFO:tensorflow:Evaluation [10/10]

INFO:tensorflow:Evaluation [10/10]

INFO:tensorflow:Inference Time : 2.13840s

INFO:tensorflow:Inference Time : 2.13840s

INFO:tensorflow:Finished evaluation at 2020-07-23-01:29:39

INFO:tensorflow:Finished evaluation at 2020-07-23-01:29:39

INFO:tensorflow:Saving dict for global step 500: accuracy = 0.60625, global_step = 500, loss = 0.63060856

INFO:tensorflow:Saving dict for global step 500: accuracy = 0.60625, global_step = 500, loss = 0.63060856

INFO:tensorflow:Saving 'checkpoint_path' summary for global step 500: /tmp/tmp3kl6ql4q/model.ckpt-500

INFO:tensorflow:Saving 'checkpoint_path' summary for global step 500: /tmp/tmp3kl6ql4q/model.ckpt-500

{'accuracy': 0.60625, 'loss': 0.63060856, 'global_step': 500}

Para obtener más detalles, consulte la documentación de tf.keras.estimator.model_to_estimator .