Path: blob/master/site/es-419/guide/keras/sequential_model.ipynb
25118 views
Copyright 2020 The TensorFlow Authors.
El modelo Secuencial
Preparación
Cuándo utilizar un modelo Secuencial
Un modelo Sequential
es apropiado para realizar una simple pila de capas donde cada capa tiene exactamente un tensor de entrada y un tensor de salida.
Esquemáticamente, el siguiente modelo Sequential
:
es equivalente a esta función:
Un modelo Secuencial es no apropiado cuando:
Su modelo tiene múltiples entradas o múltiples salidas
Cualquiera de sus capas tiene múltiples entradas o múltiples salidas
Es necesario compartir capas
Desea una topología no lineal (por ejemplo, una conexión residual, un modelo multirramal)
Crear un modelo Secuencial
Puede crear un modelo Secuencial pasando una lista de capas al constructor Secuencial:
Se puede acceder a sus capas mediante el atributo layers
:
También puede crear un modelo Secuencial de forma incremental mediante el método add()
:
Tenga en cuenta que también hay un método pop()
para eliminar capas: un modelo Secuencial se comporta como una lista de capas.
Tenga en cuenta también que el constructor Secuencial acepta un argumento name
, al igual que cualquier capa o modelo en Keras. Esto es útil para anotar gráficos TensorBoard con nombres semánticamente significativos.
Especificación previa de la forma de entrada
Generalmente, todas las capas en Keras necesitan conocer la forma de sus entradas para poder crear sus pesos. Así que cuando cree una capa como esta, inicialmente, no tiene pesos:
Para ello, creará sus ponderaciones la primera vez que se le llame con una entrada, ya que la forma de las ponderaciones depende de la forma de las entradas:
Naturalmente, esto también se aplica a los modelos secuenciales. Al crear una instancia de un modelo secuencial sin una forma de entrada, no se "construye": no tiene pesos (y al llamar a model.weights
se produce un error que indica precisamente esto). Los pesos se crean cuando el modelo ve por primera vez algunos datos de entrada:
Una vez "construido" un modelo, puede llamar a su método summary()
para mostrar su contenido:
Sin embargo, puede ser muy útil cuando se construye un modelo secuencial de forma incremental para poder mostrar el resumen del modelo hasta el momento, incluyendo la forma de salida actual. En este caso, debe iniciar su modelo pasando un objeto Input
a su modelo, para que conozca su forma de entrada desde el principio:
Tenga en cuenta que el objeto Input
no se muestra como parte de model.layers
, ya que no es una capa:
Una alternativa sencilla es pasar un argumento input_shape
a la primera capa:
Los modelos construidos con una forma de entrada predefinida como esta siempre tienen pesos (incluso antes de ver cualquier dato) y siempre tienen una forma de salida definida.
En general, se recomienda especificar siempre por adelantado la forma de entrada de un modelo secuencial si se sabe cuál es.
Un flujo de trabajo de depuración común: add()
+ summary()
Cuando se construye una nueva arquitectura secuencial, es útil apilar capas incrementalmente con add()
e imprimir frecuentemente resúmenes del modelo. Por ejemplo, esto le permite controlar cómo una pila de capas Conv2D
y MaxPooling2D
está reduciendo el muestreo de los mapas de características de la imagen:
Es muy práctico, ¿verdad?
Qué hacer una vez que se tiene un modelo
Una vez que su arquitectura modelo esté lista, querrá:
Entrenar su modelo, evaluarlo y ejecutar la inferencia. Consulte nuestra guía de entrenamiento y evaluación con los bucles incorporados
Guarde su modelo en disco y restáurelo. Consulte nuestra guía de serialización y guardado.
Acelerar el entrenamiento de modelos aprovechando múltiples GPUs. Consulte nuestra guía sobre multi-GPU y entrenamiento distribuido.
Extracción de características con un modelo secuencial
Una vez se ha construido un modelo Secuencial, se comporta como un modelo API Funcional. Esto significa que cada capa tiene un atributo input
y output
. Estos atributos se pueden utilizar para hacer cosas interesantes, como crear rápidamente un modelo que extraiga las salidas de todas las capas intermedias en un modelo secuencial:
Este es un ejemplo similar que solo extrae características de una capa:
Aprendizaje por transferencia con un modelo secuencial
El aprendizaje por transferencia consiste en congelar las capas inferiores de un modelo y entrenar únicamente las capas superiores. Si no está familiarizado con él, asegúrese de leer nuestra guía del aprendizaje por transferencia.
A continuación se presentan dos modelos comunes de aprendizaje por transferencia que implican modelos secuenciales.
Primero, digamos que tiene un modelo Secuencial, y quiere congelar todas las capas excepto la última. En este caso, simplemente iteraría sobre model.layers
y establecería layer.trainable = False
en cada capa, excepto en la última. Así:
Otro modelo común es utilizar un modelo secuencial para apilar un modelo pre-entrenado y algunas capas de clasificación recién inicializadas. De esta manera:
Si se dedica al aprendizaje por transferencia, es probable que utilice con frecuencia estos dos patrones.
Esto es todo lo que necesita saber sobre los modelos secuenciales.
Para obtener más información sobre la creación de modelos en Keras, consulte: