Uso de activaciones
Las activaciones pueden usarse a través de una capa Activation
, o a través del argumento activation
soportado por todas las capas forward:
model.add(layers.Dense(64, activation=activations.relu))
Esto es equivalente a:
Todas las activaciones incorporadas también pueden pasarse a través de su identificador de cadena:
model.add(layers.Dense(64, activation='relu'))
Activaciones disponibles
función relu
tf.keras.activations.relu(x, alpha=0.0, max_value=None, threshold=0)
Aplica la función de activación de la unidad lineal rectificada.
Con los valores por defecto, esto devuelve la activación ReLU estándar:max(x, 0)
, el máximo de elementos de 0 y el tensor de entrada.
La modificación de los parámetros por defecto permite utilizar umbrales no nulos, cambiar el valor máximo de la activación y utilizar un múltiplo no nulo de la entrada para valores inferiores al umbral.
Por ejemplo:
Argumentos
- x: Entrada
tensor
ovariable
. - alfa: Un
float
que gobierna la pendiente para valores inferiores al umbral. - valor_máximo: Un
float
que establece el umbral de saturación (el mayor valor que devolverá la función). - umbral: Un
float
que da el valor del umbral de la función de activación por debajo del cual los valores serán amortiguados o puestos a cero.
Devuelve
Un Tensor
que representa el tensor de entrada,transformado por la función de activación relu.El tensor será de la misma forma y tipo d de entrada x
.
Función sigmoide
tf.keras.activations.sigmoid(x)
Función de activación sigmoide, sigmoid(x) = 1 / (1 + exp(-x))
.
Aplica la función de activación sigmoide. Para valores pequeños (<-5),sigmoid
devuelve un valor cercano a cero, y para valores grandes (>5)el resultado de la función se acerca a 1.
Sigmoid es equivalente a un Softmax de 2 elementos, donde el segundo elemento se asume como cero. La función sigmoide siempre devuelve un valor entre0 y 1.
Por ejemplo:
Argumentos
- x: Tensor de entrada.
Devuelve
- Tensor con la activación sigmoidea:
1 / (1 + exp(-x))
.
Función softmax
tf.keras.activations.softmax(x, axis=-1)
Softmax convierte un vector real en un vector de probabilidades categóricas.
Los elementos del vector de salida están en el rango (0, 1) y suman 1.
Cada vector se maneja independientemente. El argumento axis
establece el eje de la entrada sobre el que se aplica la función.
El máximo suave se utiliza a menudo como activación para la última capa de una red de clasificación porque el resultado puede interpretarse como una distribución de probabilidad.
El softmax de cada vector x se calcula comoexp(x) / tf.reduce_sum(exp(x))
.
Los valores de entrada en son los logaritmos de la probabilidad resultante.
Argumentos
- x : Tensor de entrada.
- eje: Entero, eje a lo largo del cual se aplica la normalización softmax.
Devuelve
Tensor, salida de la transformación softmax (todos los valores son no negativos y suman 1).
Surge
- Error de valor: En el caso
dim(x) == 1
.
Función softplus
tf.keras.activations.softplus(x)
Función de activación softplus, softplus(x) = log(exp(x) + 1)
.
Ejemplo Uso:
Argumentos
- x: Tensor de entrada.
Devuelve
- La activación de softplus:
log(exp(x) + 1)
.
función softsign
tf.keras.activations.softsign(x)
Función de activación softsign, softsign(x) = x / (abs(x) + 1)
.
Ejemplo de uso:
>>> a = tf.constant(, dtype = tf.float32)>>> b = tf.keras.activations.softsign(a)>>> b.numpy()array(, dtype=float32)
Argumentos
- x: Tensor de entrada.
Devuelve
- La activación del softsigno:
x / (abs(x) + 1)
.
Función tanh
tf.keras.activations.tanh(x)
Función de activación tangente hiperbólica.
Por ejemplo:
Argumentos
- x: Tensor de entrada.
Devuelve
- Tensor de la misma forma y tipo d de la entrada
x
, con activación tanh:tanh(x) = sinh(x)/cosh(x) = ((exp(x) - exp(-x))/(exp(x) + exp(-x)))
.
Función selu
tf.keras.activations.selu(x)
Unidad lineal exponencial escalada (SELU).
La función de activación de la Unidad Lineal Exponencial Escalada (SELU) se define como:
if x > 0: return scale * x
if x < 0: return scale * alpha * (exp(x) - 1)
donde alpha
y scale
son constantes predefinidas(alpha=1.67326324
y scale=1.05070098
).
Básicamente, la función de activación SELU multiplica scale
(> 1) con la salida de la función tf.keras.activations.elu
para asegurar una pendiente mayor que uno para entradas positivas.
Los valores de alpha
y scale
se eligen de manera que la media y la varianza de las entradas se conservan entre dos capas consecutivas, siempre que los pesos se inicialicen correctamente (véase el inicializador tf.keras.initializers.LecunNormal
) y el número de unidades de entrada sea «suficientemente grande» (véase el documento de referencia para más información).
Ejemplo de uso:
Argumentos
- x: Un tensor o variable para calcular la función de activación.
Devuelve
- La activación exponencial unitaria escalada:
scale * elu(x, alpha)
.
Notes: – Para ser utilizado junto con el inicializador tf.keras.initializers.LecunNormal
. – Para ser utilizado junto con la variante de abandono tf.keras.layers.AlphaDropout
(no el abandono regular).
Referencias: – Klambauer et al., 2017
Función elu
tf.keras.activations.elu(x, alpha=1.0)
Unidad lineal exponencial.
La unidad lineal exponencial (ELU) con alpha > 0
es:x
si x > 0
yalpha * (exp(x) - 1)
si x < 0
El hiperparámetro ELU alpha
controla el valor al que unaELU satura para entradas netas negativas. Las ELUs disminuyen el efecto de gradiente creciente.
Las ELUs tienen valores negativos que empujan la media de las activaciones más cerca de cero.Las activaciones medias que están más cerca de cero permiten un aprendizaje más rápido ya que acercan el gradiente al gradiente natural.Las ELUs se saturan a un valor negativo cuando el argumento se hace más pequeño.La saturación significa una pequeña derivada que disminuye la variación y la información que se propaga a la siguiente capa.
Ejemplo de uso:
Argumentos
- x: Tensor de entrada.
- alfa: Un escalar, pendiente de sección negativa.
alpha
controla el valor al que una ELU satura para entradas de red negativas.
Retorna
- La función de activación de la unidad lineal exponencial (ELU):
x
six > 0
yalpha * (exp(x) - 1)
six < 0
.
Referencia: Aprendizaje rápido y preciso de redes profundas mediante unidades lineales exponenciales (ELU) (Clevert et al, 2016)
función exponencial
tf.keras.activations.exponential(x)
Función de activación exponencial.
Por ejemplo:
Argumentos
- x: Tensor de entrada.
Devuelve
- Tensor con activación exponencial:
exp(x)
.
Creación de activaciones personalizadas
También puedes utilizar un callable de TensorFlow como activación(en este caso debe tomar un tensor y devolver un tensor de la misma forma y dtype):
model.add(layers.Dense(64, activation=tf.nn.tanh))
Acerca de las capas de «activación avanzada»
Activaciones más complejas que una simple función de TensorFlow (Ej. activaciones aprendibles, que mantienen un estado)están disponibles como capas de activación avanzada,y se pueden encontrar en el módulo tf.keras.layers.advanced_activations
. Si necesitas una activación personalizada que requiera un estado, deberás implementarla como una capa personalizada.
Ten en cuenta que no debes pasar las instancias de las capas de activación como el argumento activation
de una capa.Están pensadas para ser utilizadas como las capas normales, por ejemplo:
x = layers.Dense(10)(x)x = layers.LeakyReLU()(x)