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

tf.keras.layers.BatchNormalization

TensorFlow 1 versión Ver código fuente en GitHub

Normalizar y entradas o activaciones escala.

Se utiliza en los cuadernos

Se utiliza en la guía Se utiliza en los tutoriales

Normalizar las activaciones de la capa anterior en cada lote, es decir, se aplica una transformación que mantiene la activación cerca media a 0 y la activación desviación estándar cerca de 1.

difiere por lotes de normalización de otras capas en varios aspectos clave:

1) Adición de BatchNormalization con training=True a un modelo hace que el resultado de un ejemplo de depender de los contenidos de todos los otros ejemplos en un minibatch. Tenga cuidado al relleno de lotes o enmascarar ejemplos, ya que pueden cambiar las estadísticas minibatch y afectar a otros ejemplos.

2) Las actualizaciones de los pesos (estadísticas en movimiento) se basan en el pase hacia adelante de un modelo más que el resultado de los cálculos de gradiente.

3) Cuando se realiza la inferencia utilizando un modelo que contiene la normalización de lotes, no es generalmente (aunque siempre) deseable usar estadísticas acumuladas en lugar de estadísticas mini-lotes. Esto se logra mediante el paso training=False cuando se llama el modelo, o el uso de model.predict .

axis Integer, el eje que debe ser normalizado (típicamente el eje características). Por ejemplo, después de un Conv2D capa con data_format="channels_first" , juego de axis=1 en BatchNormalization .
momentum El impulso para la media móvil.
epsilon Flotador pequeño añadido a la varianza para evitar la división por cero.
center Si es True, añadir desplazamiento de beta de normalizada tensor. Si es falso, beta se ignora.
scale Si es verdadero, se multiplica por gamma . Si es falso, gamma no se utiliza. Cuando la siguiente capa es lineal (también por ejemplo nn.relu ), esto puede ser desactivado ya que el escalado se realiza por la capa siguiente.
beta_initializer Inicializador para el peso beta.
gamma_initializer Inicializador para el peso gamma.
moving_mean_initializer Inicializador para la media en movimiento.
moving_variance_initializer Inicializador para la varianza en movimiento.
beta_regularizer regularizador opcional para el peso beta.
gamma_regularizer regularizador opcional para el peso gamma.
beta_constraint restricción opcional para el peso beta.
gamma_constraint restricción opcional para el peso gamma.
renorm Si desea utilizar renormalización por lotes . Esto añade variables extra durante el entrenamiento. La inferencia es la misma para cualquiera de los valores de este parámetro.
renorm_clipping Un diccionario que pueden mapear teclas 'rmax', 'Rmin', 'Dmax' a escalar Tensors utiliza para recortar la corrección nueva normalización. La corrección (r, d) se utiliza como corrected_value = normalized_value * r + d , con r recortado a [Rmin, Rmax], y d a [-dmax, dmax]. Missing Rmax, Rmin, Dmax se establecen en inf, 0, inf, respectivamente.
renorm_momentum Momentum utiliza para actualizar los medios de movimiento y las desviaciones estándar con nueva normalización. A diferencia de momentum , esto afecta a la formación y no debe ser ni demasiado pequeño (lo que añadiría ruido) ni demasiado grande (lo que daría estimaciones rancios). Tenga en cuenta que momentum se sigue aplicando para obtener las medias y varianzas para la inferencia.
fused Si True , utilice una implementación más rápida fundida, o plantear una ValueError si la implementación fundido no se puede utilizar. Si None , utilizar la implementación más rápida si es posible. Si es falso, no se utiliza la implementación fundido.
trainable Booleano, si es True las variables se marcará como entrenable.
virtual_batch_size Un int . Por defecto, virtual_batch_size es None , que la normalización de lotes medios se realiza a través de todo el lote. Cuando virtual_batch_size no es None , en cambio realizar "Ghost lotes normalización", que crea sub-lotes virtuales que se normalizaron por separado cada uno (con gamma compartido, beta y estadísticas en movimiento). Debe dividir el tamaño real del lote durante la ejecución.
adjustment Una función de tomar el Tensor contiene el (dinámico) forma del tensor de entrada y devolver un par (escala, sesgo) para aplicar a los valores normalizados (antes gamma y beta), solamente durante el entrenamiento. Por ejemplo, si el eje == - 1, adjustment = lambda shape: ( tf.random.uniform(shape[-1:], 0.93, 1.07), tf.random.uniform(shape[-1:], -0.1, 0.1)) se escala el valor normalizado hasta en un 7% hacia arriba o abajo, a continuación, cambiar el resultado por hasta 0,1 (con ampliación independiente y sesgo para cada característica, pero compartida a través de todos los ejemplos), y finalmente aplicar gamma y / o beta. Si None , no se aplica ningún ajuste. No se puede especificar si se especifica virtual_batch_size.

argumentos de la llamada:

  • inputs : tensor de entrada (de cualquier rango).
  • training : Pitón booleano que indica si la capa debe comportarse en el modo de entrenamiento o en el modo de inferencia.
    • training=True : La capa se normalizará sus entradas utilizando la media y la varianza del lote actual de los insumos.
    • training=False : La capa se normalizará sus entradas utilizando la media y la varianza de sus estadísticas en movimiento, aprendidas durante el entrenamiento.

de entrada de forma arbitraria. Utilice el argumento palabra clave input_shape (tupla de números enteros, no incluye el eje muestras) cuando se utiliza esta capa como la primera capa en un modelo. de forma de salida: La misma forma como entrada.
Acerca de la configuración layer.trainable = False en una capa de `BatchNormalization:

El significado de ajuste layer.trainable = False es congelar la capa, es decir, su estado interno no cambiará durante el entrenamiento: sus pesos entrenables no se actualizarán durante fit() o train_on_batch() , y no puede ejecutar sus actualizaciones de estado.

Por lo general, esto no significa necesariamente que la capa se ejecuta en modo de inferencia (que normalmente está controlada por la training argumento de que se puede pasar cuando se llama a una capa). "Estado congelado" y "modo de inferencia" son dos conceptos distintos.

Sin embargo, en el caso de la BatchNormalization capa, estableciendo trainable = False en los medios de capa que la capa será posteriormente ejecuta en modo de inferencia (lo que significa que utilizará la media en movimiento y la varianza en movimiento para normalizar el lote actual, en lugar de utilizar la media y la varianza del lote actual).

Este comportamiento se ha introducido en TensorFlow 2.0, a fin de permitir layer.trainable = False para producir el comportamiento más comúnmente se espera en el caso convnet ajuste fino uso.

Tenga en cuenta que:

  • Este comportamiento sólo se produce como de TensorFlow 2.0. En 1. *, el establecimiento de layer.trainable = False congelaría la capa, pero no modificarla a modo de inferencia.
  • Configuración trainable en un modelo que contiene otras capas fijará de forma recursiva la trainable valor de todas las capas internas.
  • Si el valor de la trainable se cambia después de llamar atributo compile() en un modelo, el nuevo valor no entra en vigor para este modelo hasta compile() se llama de nuevo.

ecuaciones de normalización: Considerar las activaciones intermedios (x) de una mini-lote de tamaño \ (m \): Podemos calcular la media y la varianza de la tanda \ ({\ mu_B} = \ frac {1} {m} \ sum_ {i = 1} ^ {m} {x_i} \) \ ({\ sigma_B ^ 2} = \ frac {1} {m} \ sum_ {i = 1} ^ {m} ({x_i} - {\ mu_B }) ^ 2 \) y luego calcular un normalizado \ (x \), incluyendo un pequeño factor \ ({\ epsilon} \) para la estabilidad numérica. \ (\ Hat {x_i} = \ frac {x_i - \ mu_B} {\ sqrt {\ sigma_B ^ 2 + \ epsilon}} \) Y, por último \ (\ hat {x} \) es linealmente transformados por \ ({\ gamma} \) y \ ({\ beta} \), que se supo parámetros: \ ({y_i} = {\ gamma * \ hat {x_i} + \ beta} \) Referencia: