Ayuda a proteger la Gran Barrera de Coral con TensorFlow en Kaggle Únete Challenge

Exportar un modelo guardado

Esta página describe los detalles de la exportación (ahorro) un modelo de un programa TensorFlow al formato SavedModel de TensorFlow 2 . Este formato es la forma recomendada de compartir modelos previamente entrenados y piezas de modelos en TensorFlow Hub. Se reemplaza el viejo formato de TF1 Hub y viene con un nuevo conjunto de APIs. Puede encontrar más información sobre cómo exportar los modelos de formato TF1 Hub en formato de exportación TF1 Hub . Puede encontrar más información sobre cómo comprimir el SavedModel por compartirlo en TensorFlow Hub aquí .

Algunos juegos de herramientas de creación de modelos ya proporcionan herramientas para hacer esto (por ejemplo, ver más abajo para TensorFlow Modelo jardín ).

Descripción general

SavedModel es el formato de serialización estándar de TensorFlow para modelos entrenados o piezas de modelos. Almacena los pesos entrenados del modelo junto con las operaciones exactas de TensorFlow para realizar su cálculo. Se puede usar independientemente del código que lo creó. En particular, se puede reutilizar en diferentes API de creación de modelos de alto nivel como Keras, porque las operaciones de TensorFlow son su lenguaje básico común.

Salvando de Keras

A partir de TensorFlow 2, tf.keras.Model.save() y tf.keras.models.save_model() por defecto para el formato SavedModel (no HDF5). Los SavedModels resultantes que se pueden utilizar con hub.load() , hub.KerasLayer y adaptadores similares para otras API de alto nivel a medida que estén disponibles.

Para compartir un modelo Keras completa, simplemente guardarlo con include_optimizer=False .

Para compartir una parte de un modelo de Keras, haga que la parte sea un modelo en sí mismo y luego guárdelo. Puede diseñar el código así desde el principio....

piece_to_share = tf.keras.Model(...)
full_model = tf.keras.Sequential([piece_to_share, ...])
full_model.fit(...)
piece_to_share.save(...)

...o recorte la pieza para compartirla después (si se alinea con las capas de su modelo completo):

full_model = tf.keras.Model(...)
sharing_input = full_model.get_layer(...).get_output_at(0)
sharing_output = full_model.get_layer(...).get_output_at(0)
piece_to_share = tf.keras.Model(sharing_input, sharing_output)
piece_to_share.save(..., include_optimizer=False)

TensorFlow Modelos en GitHub utiliza el primer enfoque para el BERT (ver PNL / herramientas / export_tfhub_lib.py , tenga en cuenta la división entre core_model para la exportación y la pretrainer para restaurar el punto de control) y el último enfoque para ResNet (ver legado / image_classification / tfhub_export. PY ).

Guardar desde TensorFlow de bajo nivel

Esto requiere una buena familiaridad con TensorFlow de Guía SavedModel .

Si desea proporcionar algo más que una firma de servir, se debe implementar la interfaz reutilizable SavedModel . Conceptualmente, esto parece

class MyMulModel(tf.train.Checkpoint):
  def __init__(self, v_init):
    super().__init__()
    self.v = tf.Variable(v_init)
    self.variables = [self.v]
    self.trainable_variables = [self.v]
    self.regularization_losses = [
        tf.function(input_signature=[])(lambda: 0.001 * self.v**2),
    ]

  @tf.function(input_signature=[tf.TensorSpec(shape=None, dtype=tf.float32)])
  def __call__(self, inputs):
    return tf.multiply(inputs, self.v)

tf.saved_model.save(MyMulModel(2.0), "/tmp/my_mul")

layer = hub.KerasLayer("/tmp/my_mul")
print(layer([10., 20.]))  # [20., 40.]
layer.trainable = True
print(layer.trainable_weights)  # [2.]
print(layer.losses)  # 0.004

Consejos para creadores de modelos guardados

Al crear un modelo guardado para compartir en TensorFlow Hub, piense con anticipación si sus consumidores deben ajustarlo y cómo, y brinde orientación en la documentación.

El ahorro de un modelo Keras debe hacer toda la mecánica de trabajo de puesta a punto (ahorro de las pérdidas de peso de regularización, la declaración de variables entrenables, trazando __call__ tanto para training=True y training=False , etc.)

Elija una interfaz de modelo que funcione bien con el flujo de gradiente, por ejemplo, logits de salida en lugar de probabilidades softmax o predicciones top-k.

Si el modelo utiliza abandono, normalización por lotes o técnicas de entrenamiento similares que involucran hiperparámetros, configúrelos en valores que tengan sentido en muchos problemas de destino esperados y tamaños de lotes. (Al momento de escribir este artículo, guardar de Keras no facilita que los consumidores los ajusten).

Regularizers peso de las capas individuales se guardan (con sus coeficientes de resistencia regularización), pero regularización de peso dentro del optimizador (como tf.keras.optimizers.Ftrl.l1_regularization_strength=...) ) se pierde. Informe a los consumidores de su modelo guardado en consecuencia.

Jardín modelo TensorFlow

El TensorFlow Modelo Jardín repo contiene una gran cantidad de ejemplos de creación de modelos reutilizables TF2 guardadas para ser cargado en tfhub.dev .

Solicitudes de la comunidad

El equipo TensorFlow Hub genera sólo una pequeña fracción de los activos que están disponibles en tfhub.dev. Confiamos principalmente en investigadores de Google y Deepmind, instituciones de investigación corporativas y académicas y entusiastas de ML para producir modelos. Como resultado, no podemos garantizar que podamos cumplir con las solicitudes de la comunidad para activos específicos, y no podemos proporcionar estimaciones de tiempo para la disponibilidad de nuevos activos.

Las peticiones de la comunidad Modelo jalón siguiente contiene las peticiones de la comunidad para activos específicos - si usted o alguien que usted conoce está interesado en la producción del bien y compartirlo entfhub.dev, damos la bienvenida a la presentación!