
Traducción de la guía general de Tensorflow.org. Esta guía le dará los conceptos básicos para comenzar a usar Keras. La lectura lleva 10 minutos.
Importar tf.keras
tf.keras
es una implementación de la especificación API TensorFlow Keras. Esta es una API de alto nivel para construir y entrenar modelos que incluye soporte de primera clase para funcionalidades específicas de TensorFlow como
ejecución ansiosa , tuberías de datos
tf.data
y
estimadores .
tf.keras
facilita el uso de TensorFlow sin sacrificar la flexibilidad y el rendimiento.
Para comenzar, importe
tf.keras
como parte de su configuración de TensorFlow:
from __future__ import absolute_import, division, print_function, unicode_literals import tensorflow as tf from tensorflow import keras
tf.keras
puede ejecutar cualquier código compatible con Keras, pero tenga en cuenta:
- La versión de
tf.keras
en la última versión de TensorFlow puede ser diferente de la última versión de keras
en PyPI. Echa un vistazo a tf.keras.__version__
. - Cuando guarda los pesos del modelo,
tf.keras
hace de manera predeterminada en formato de punto de control. Pase el save_format='h5'
para usar HDF5 (o agregue la extensión .h5
al .h5
del archivo).
Construye un modelo simple
Modelo secuencial
En Keras, recolecta
capas para construir
modelos . Un modelo es un gráfico de capa (generalmente). El tipo de modelo más común es la pila de capas:
tf.keras.Sequential
. Modelo
tf.keras.Sequential
.
Construimos una red simple totalmente conectada (es decir, un perceptrón multicapa):
from tensorflow.keras import layers model = tf.keras.Sequential()
Personaliza capas
Muchas variedades de capas
tf.keras.layers
están
tf.keras.layers
. La mayoría de ellos usa un constructor de argumento común:
activation
: establece la función de activación para la capa. Este parámetro especifica el nombre de la función incorporada o el objeto llamado. El parámetro no tiene valor predeterminado.kernel_initializer
y bias_initializer
: esquemas de inicialización que crean pesos de capa (núcleo y desplazamiento). Este parámetro puede ser el nombre o el objeto llamado. El inicializador predeterminado es "Glorot uniform"
.kernel_regularizer
y bias_regularizer
: esquemas de regularización agregados a los pesos de capa (núcleo y desplazamiento), como la regularización L1 o L2. Por defecto, la regularización no está establecida.
Los siguientes ejemplos de instancias de las capas `tf.keras.layers.Dense` usan argumentos de constructor:
Entrenamiento y evaluación
Configuración de entrenamiento
Después de construir el modelo, configure el proceso de aprendizaje llamando al método de
compile
:
model = tf.keras.Sequential([
tf.keras.Model.compile
acepta tres argumentos importantes:
optimizer
: Este objeto define el procedimiento de entrenamiento. Pase instancias de optimizador desde el módulo tf.keras.optimizers
, como tf.keras.optimizers.Adam
o tf.keras.optimizers.SGD
. Si solo desea utilizar las opciones predeterminadas, también puede especificar optimizadores con palabras clave como 'adam'
o 'sgd'
.loss
: esta es una función que se minimiza en el proceso de aprendizaje. Entre las variaciones comunes están el error estándar ( mse
), categorical_crossentropy
, binary_crossentropy
. Las funciones de pérdida se especifican por nombre o pasando el objeto llamado desde el módulo tf.keras.losses
.metrics
: se utilizan para monitorear la capacitación. Estos son nombres de cadenas u objetos llamados del módulo tf.keras.metrics
.- Además, para asegurarse de que el modelo esté entrenado y evaluado con entusiasmo, verifique que pase el parámetro
run_eagerly=True
al compilador
A continuación, veremos algunos ejemplos de configuración de modelos para capacitación:
Aprendiendo de los datos de NumPy
Para conjuntos de datos más pequeños, use las matrices de memoria de NumPy para capacitación y evaluación de modelos. El modelo está "entrenado" en datos de entrenamiento utilizando el método `fit`:
import numpy as np data = np.random.random((1000, 32)) labels = np.random.random((1000, 10)) model.fit(data, labels, epochs=10, batch_size=32)
tf.keras.Model.fit
toma tres argumentos importantes:
epochs
: el aprendizaje se divide en * era *. La era es una iteración sobre todos los datos de entrada (esto se hace en pequeños lotes).batch_size
: al transmitir datos NumPy, el modelo divide los datos en bloques más pequeños (lotes) e itera sobre estos bloques durante el entrenamiento. Este número indica el tamaño de cada bloque de datos. Recuerde que el último bloque puede ser más pequeño si el número total de registros no se divide por el tamaño del lote.validation_data
: al crear prototipos de un modelo, desea realizar un seguimiento fácil de su rendimiento en los datos de validación. Al pasar una tupla de datos de entrada y etiquetas con este argumento, el modelo puede mostrar los valores de la función de pérdida y las métricas en modo de salida para los datos que se transmiten al final de cada era.
Aquí hay un ejemplo usando
validation_data
:
import numpy as np data = np.random.random((1000, 32)) labels = np.random.random((1000, 10)) val_data = np.random.random((100, 32)) val_labels = np.random.random((100, 10)) model.fit(data, labels, epochs=10, batch_size=32, validation_data=(val_data, val_labels))
Entrenamiento usando conjuntos de datos tf.data
Use la API de conjuntos de datos para escalar grandes bases de datos o capacitación en múltiples dispositivos. Pase la instancia de `tf.data.Dataset` al método de
fit
:
Dado que
Dataset
proporciona datos en lotes, este código no requiere el argumento
batch_size
.
Los conjuntos de datos también se pueden usar para validar:
dataset = tf.data.Dataset.from_tensor_slices((data, labels)) dataset = dataset.batch(32) val_dataset = tf.data.Dataset.from_tensor_slices((val_data, val_labels)) val_dataset = val_dataset.batch(32) model.fit(dataset, epochs=10, validation_data=val_dataset)
Valoración y predicción
Los
tf.keras.Model.predict
tf.keras.Model.evaluate
y
tf.keras.Model.predict
pueden usar los
tf.data.Dataset
NumPy y
tf.data.Dataset
.
Así es como puede
estimar las pérdidas en el modo de salida y las métricas para los datos proporcionados:
Y aquí está cómo
predecir la salida del último nivel en modo de salida para los datos proporcionados en forma de una matriz NumPy:
Construyendo modelos complejos
La API funcional
El modelo
tf.keras.Sequential
es una pila de capas simple con la que no puede imaginar un modelo arbitrario. Utilice la API funcional de Keras para crear topologías de modelos complejos, como:
- Múltiples modelos de entrada
- Modelos con múltiples salidas,
- Modelos con capas comunes (la misma capa se llama varias veces),
- Modelos con flujos de datos inconsistentes (por ejemplo, relaciones residuales).
La construcción de un modelo con una API funcional funciona de la siguiente manera:
- La instancia de capa es invocable y devuelve un tensor.
- Los tensores de entrada y salida se utilizan para determinar la instancia de
tf.keras.Model
- Este modelo está entrenado como el modelo 'secuencial'.
El siguiente ejemplo usa la API funcional para construir una red simple y completamente conectada:
inputs = tf.keras.Input(shape=(32,))
Cree una instancia del modelo con estas entradas y salidas.
model = tf.keras.Model(inputs=inputs, outputs=predictions)
Modelos de subclases
Cree un modelo totalmente personalizable utilizando la subclase
tf.keras.Model
y definiendo su propia distribución directa. Cree capas en el método
__init__
y
__init__
como atributos de la instancia de clase. Definir propagación directa en el método de
call
.
Subclasificar un modelo es especialmente útil cuando se habilita la ejecución ansiosa, ya que le permite escribir la distribución directa de manera imperativa.
Nota: si desea que su modelo
se ejecute
siempre imperativamente, puede establecer
dynamic=True
cuando llame al
super
.
Punto clave: utilice la API correcta para trabajar. Si bien la subclasificación de un modelo proporciona flexibilidad, debe pagarlo con mayor complejidad y mayor potencial de errores personalizados. Si es posible, elija la API funcional.
El siguiente ejemplo muestra un modelo subclases tf.keras.Model que usa distribución directa personalizada, que no es obligatorio que sea obligatorio:
class MyModel(tf.keras.Model): def __init__(self, num_classes=10): super(MyModel, self).__init__(name='my_model') self.num_classes = num_classes
Cree una instancia de la nueva clase de modelo:
model = MyModel(num_classes=10)
Capas personalizadas
Cree una capa personalizada subclasificando
tf.keras.layers.Layer
e implementando los siguientes métodos:
__init__
: opcionalmente, especifique las subcapas que se utilizarán en esta capa.- *
build
: crear pesos de capa. Agregue pesos utilizando el método add_weight
call
: Definir distribución directa.- Opcionalmente, la capa se puede serializar implementando el método
get_config
y el from_config
clase from_config
.
A continuación se muestra un ejemplo de una capa de usuario que multiplica la matriz (
matmul
) presentada con la entrada de matriz del núcleo:
class MyLayer(layers.Layer): def __init__(self, output_dim, **kwargs): self.output_dim = output_dim super(MyLayer, self).__init__(**kwargs) def build(self, input_shape):
Crea un modelo usando tu capa personalizada:
model = tf.keras.Sequential([ MyLayer(10), layers.Activation('softmax')])
Kolbeki
Kolbek es un objeto transferido al modelo para personalizar y expandir su comportamiento durante el entrenamiento. Puede escribir su propia devolución de llamada personalizada o usar el
tf.keras.callbacks
que incluye:
tf.keras.callbacks.ModelCheckpoint
: guardar puntos de interrupción del modelo a intervalos regulares.
tf.keras.callbacks.LearningRateScheduler
: cambia dinámicamente el paso de aprendizaje.
tf.keras.callbacks.EarlyStopping
: detiene el entrenamiento cuando el resultado de la validación deja de mejorar.
tf.keras.callbacks.TensorBoard:
monitorizar el comportamiento del modelo mediante
Tensorboard
Para usar
tf.keras.callbacks.Callback
,
tf.keras.callbacks.Callback
al método de
fit
modelo:
callbacks = [
Guardar y Restaurar
Guardar solo valores de peso
Guarde y cargue pesos de modelos utilizando
tf.keras.Model.save_weights
:
model = tf.keras.Sequential([ layers.Dense(64, activation='relu', input_shape=(32,)), layers.Dense(10, activation='softmax')]) model.compile(optimizer=tf.keras.optimizers.Adam(0.001), loss='categorical_crossentropy', metrics=['accuracy'])
Por defecto, los pesos del modelo se guardan en el formato de punto de control TensorFlow. Los pesos también se pueden guardar en formato Keras HDF5 (valor predeterminado para la implementación universal de Keras):
Guardar solo la configuración del modelo
La configuración del modelo se puede guardar; esto serializa la arquitectura del modelo sin ningún peso. Una configuración guardada puede restaurar e inicializar el mismo modelo, incluso sin código que defina el modelo original. Keras admite formatos de serialización JSON y YAML:
import json import pprint pprint.pprint(json.loads(json_string))
Restaurar un modelo (reinicializado) desde JSON:
fresh_model = tf.keras.models.model_from_json(json_string)
Serializar el modelo a YAML requiere la instalación de `pyyaml`
antes de importar TensorFlow :
yaml_string = model.to_yaml() print(yaml_string)
Restaurando un modelo de YAML:
fresh_model = tf.keras.models.model_from_yaml(yaml_string)
Nota: los modelos subclasificados no son serializables, porque su arquitectura está definida por el código Python en el cuerpo del método `call`.
Guardar todo el modelo en un archivo
Todo el modelo se puede guardar en un archivo que contiene los valores de los pesos, la configuración del modelo e incluso la configuración del optimizador. Esto le permitirá establecer un punto de interrupción del modelo y continuar entrenando más tarde desde exactamente la misma posición, incluso sin acceso al código fuente.
# model = tf.keras.Sequential([ layers.Dense(10, activation='softmax', input_shape=(32,)), layers.Dense(10, activation='softmax') ]) model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy']) model.fit(data, labels, batch_size=32, epochs=5) # HDF5 model.save('my_model.h5') # . model = tf.keras.models.load_model('my_model.h5')
Ansiosa ejecución
La ejecución ansiosa es un entorno de programación imperativo que realiza operaciones de inmediato. Esto no es necesario para Keras, pero es compatible con
tf.keras
y es útil para verificar su programa y depurar.
Todos los modelos de construcción de la API `tf.keras` son compatibles con la ejecución ansiosa. Aunque se pueden usar las API `secuenciales` y funcionales, la ejecución ansiosa es especialmente útil cuando se
subclasifica un modelo y se crean
capas personalizadas ; estas API requieren que escriba una distribución directa en forma de código (en lugar de las API que crean modelos ensamblando capas existentes).
Distribución
Múltiples GPU
tf.keras
modelos
tf.keras
se pueden ejecutar en múltiples GPU usando
tf.distribute.Strategy
. Esta API proporciona aprendizaje distribuido en múltiples GPU con poco o ningún cambio en el código existente.
Actualmente,
tf.distribute.MirroredStrategy
única estrategia de distribución compatible.
MirroredStrategy
replica gráficos con
Aprendizaje sincrónico con All-Reduce en una máquina. Para usar '
distribute.Strategy
.
Strategy
', anide la instalación del optimizador, el diseño y la compilación del modelo en `
Strategy
.
El siguiente ejemplo distribuye
tf.keras.Model
entre múltiples GPU en la misma máquina.
Primero, definimos un modelo dentro del área de una estrategia distribuida:
strategy = tf.distribute.MirroredStrategy() with strategy.scope(): model = tf.keras.Sequential() model.add(layers.Dense(16, activation='relu', input_shape=(10,))) model.add(layers.Dense(1, activation='sigmoid')) optimizer = tf.keras.optimizers.SGD(0.2) model.compile(loss='binary_crossentropy', optimizer=optimizer) model.summary()
Luego entrenamos el modelo en los datos como de costumbre:
x = np.random.random((1024, 10)) y = np.random.randint(2, size=(1024, 1)) x = tf.cast(x, tf.float32) dataset = tf.data.Dataset.from_tensor_slices((x, y)) dataset = dataset.shuffle(buffer_size=1024).batch(32) model.fit(dataset, epochs=1)
Después de la verificación, la traducción también aparecerá en Tensorflow.org. Si desea participar en la traducción de la documentación del sitio web de Tensorflow.org al ruso, comuníquese personalmente o envíe sus comentarios. Cualquier corrección o comentario son apreciados.