Usagem de ativações
Ativações podem ser usadas através de uma camada Activation
, ou através do argumento activation
suportado por todas as camadas dianteiras:
model.add(layers.Dense(64, activation=activations.relu))
>
Isto é equivalente a:
Todas as ativações incorporadas também podem ser passadas através de seu identificador de string:
model.add(layers.Dense(64, activation='relu'))
Ativações disponíveis
Função relu
tf.keras.activations.relu(x, alpha=0.0, max_value=None, threshold=0)
Aplica a função de ativação da unidade linear retificada.
Com valores padrão, isto retorna a ativação ReLU padrão:max(x, 0)
, o máximo de 0 no sentido do elemento e o tensor de entrada.
Modificar parâmetros padrão permite usar limiares não zero, alterar o valor máximo da ativação e usar um múltiplo não zero da entrada para valores abaixo do limiar.
Por exemplo:
>
Argumentos
- x: Entrada
tensor
ouvariable
. - alfa: A
float
que rege a inclinação para valores inferiores ao limiar. - max_value: A
float
que define o limiar de saturação (o maior valor que a função irá retornar). - limiar: A
float
que dá o valor limiar da função de ativação abaixo do qual os valores serão amortecidos ou definidos para zero.
Retornos
A Tensor
que representa o tensor de entrada,transformado pela função de ativação do relu.O tensor será da mesma forma e tipo de entrada x
.
função sigmóide
tf.keras.activations.sigmoid(x)
Função de ativação sigmóide, sigmoid(x) = 1 / (1 + exp(-x))
.
Aplica a função de ativação sigmóide. Para valores pequenos (<-5),sigmoid
retorna um valor próximo a zero, e para valores grandes (>5)o resultado da função aproxima-se de 1.
Sigmoid é equivalente a um Softmax de 2 elementos, onde o segundo elemento é considerado zero. A função sigmóide sempre retorna um valor entre 0 e 1.
Por exemplo:
Argumentos
- x: Tensor de entrada.
>
Retornos
- Tensor com a ativação do sigmóide:
1 / (1 + exp(-x))
.
Função softmax
tf.keras.activations.softmax(x, axis=-1)
Softmax converte um vector real para um vector de probabilidades categóricas.
Os elementos do vector de saída estão no intervalo (0, 1) e a soma para 1.
Cada vector é manipulado independentemente. O argumento axis
define qual eixo da entrada a função é aplicada ao longo.
Softmax é frequentemente usado como ativação para a última camada de uma rede de classificação porque o resultado poderia ser interpretado como distribuição de probabilidade asa.
A softmax de cada vector x é calculada comoexp(x) / tf.reduce_sum(exp(x))
.
Os valores de entrada são os log-odds da probabilidade resultante.
Argumentos
- x : tensor de entrada.
- eixo: Inteiro, eixo ao longo do qual a normalização softmax é aplicada.
Retornos
Tensor, saída da transformação softmax (todos os valores são não negativos e soma a 1).
Aumentos
- ValueError: No caso
dim(x) == 1
.
função softplus
tf.keras.activations.softplus(x)
Função de ativaçãoSoftplus, softplus(x) = log(exp(x) + 1)
.
Exemplo de uso:
Argumentos
- x: Tensor de entrada.
>
Retornos
- >
- Ativação do softplus:
log(exp(x) + 1)
.
Função softsign
tf.keras.activations.softsign(x)
Função de ativação do softsign, softsign(x) = x / (abs(x) + 1)
.
Exemplo de uso:
>>> a = tf.constant(, dtype = tf.float32)>>> b = tf.keras.activations.softsign(a)>>> b.numpy()array(, dtype=float32)
>
Argumentos
- >
- x: Tensor de entrada.
>
Retornos
- A activação do softsign:
x / (abs(x) + 1)
.
Função tanh
tf.keras.activations.tanh(x)
Função de activação tangente hiperbólica.
Por exemplo:
>
Argumentos
- >
- x: Tensor de entrada.
>
Retornos
- >
- Tensor da mesma forma e tipo de entrada
x
, com ativação tanh:tanh(x) = sinh(x)/cosh(x) = ((exp(x) - exp(-x))/(exp(x) + exp(-x)))
.
Função selu
tf.keras.activations.selu(x)
Unidade Linear Exponencial Escalonada (SELU).
A função de ativação da Unidade Linear Exponencial Escalonada (SELU) é definida como:
if x > 0: return scale * x
-
if x < 0: return scale * alpha * (exp(x) - 1)
>
onde alpha
e scale
são constantes pré-definidas(alpha=1.67326324
e scale=1.05070098
).
Basicamente, a função de activação SELU multiplica-se scale
(> 1) com a saída da função tf.keras.activations.elu
para garantir uma inclinação maior do que a das entradas positivas.
Os valores de alpha
e scale
são escolhidos de modo a que a média e variância das entradas sejam preservadas entre duas camadas consecutivas desde que os pesos sejam inicializados correctamente (ver tf.keras.initializers.LecunNormal
inicializador)e o número de unidades de entrada seja “suficientemente grande” (ver documento de referência para mais informações).
Exemplo de utilização:
Argumentos
- x: Um tensor ou variável para computar a função de ativação para.
Retornos
- A ativação da unidade exponencial em escala:
scale * elu(x, alpha)
.
Notes: – Para ser usado em conjunto com o inicializador de tf.keras.initializers.LecunNormal
. – Para ser usado em conjunto com a variante dropout tf.keras.layers.AlphaDropout
(não dropout regular).
Referências: – Klambauer et al., 2017
função elu
tf.keras.activations.elu(x, alpha=1.0)
>
Unidade linear exponencial.
Unidade linear exponencial (ELU) com alpha > 0
é:x
if x > 0
ealpha * (exp(x) - 1)
if x < 0
O hiperparâmetro ELU alpha
controla o valor ao qual o anELU se satura para entradas líquidas negativas. As ELUs diminuem o efeito do gradiente devanização.
ELUs têm valores negativos que empurram a média do fecho de activação para zero. As activações médias que estão mais próximas de zero permitem uma aprendizagem mais rápida à medida que aproximam o gradiente do gradiente natural.Saturação significa uma pequena derivada que diminui a variação e a informação que é propagada para a próxima camada.
Exemplo de utilização:
Argumentos
- x: tensor de entrada.
- alfa: Um escalar, inclinação da secção negativa.
alpha
controla o valor ao qual uma ELU satura para entradas líquidas negativas.
Retornos
- >
- A função de ativação da unidade linear exponencial (ELU):
x
ifx > 0
ealpha * (exp(x) - 1)
ifx < 0
.
Referência: Aprendizagem rápida e precisa da rede profunda por unidades lineares exponenciais (UEL) (Clevert et al, 2016)
>
função exponencial
>
tf.keras.activations.exponential(x)
>
função de ativação exponencial.
>
Por exemplo:
>
>
Argumentos
>
- >
- x: Tensor de entrada.
>
Retornos
- Tensor com ativação exponencial:
exp(x)
.
Criar ativações personalizadas
Pode também usar um TensorFlow chamável como ativação(neste caso deve pegar um tensor e retornar um tensor da mesma forma e tipo):
model.add(layers.Dense(64, activation=tf.nn.tanh))
Sobre camadas de “ativação avançada”
Ativações que são mais complexas do que uma simples função TensorFlow (por exemplo ativações aprendíveis, que mantêm um estado)estão disponíveis como camadas de ativação avançada, e podem ser encontradas no módulo tf.keras.layers.advanced_activations
. Estas incluem PReLU
e LeakyReLU
.Se você precisa de uma ativação personalizada que requer um estado, você deve implementá-la como uma camada personalizada.
Nota que você não deve passar instâncias de camadas de ativação como o argumento activation
de uma camada. Elas devem ser usadas como camadas regulares, por exemplo:
x = layers.Dense(10)(x)x = layers.LeakyReLU()(x)