Como usar o LeakyRelu como função de ativação na sequência DNN em keras? Quando ele funciona melhor que o Relu?

14

Como você usa o LeakyRelu como uma função de ativação na sequência DNN em keras? Se eu quiser escrever algo parecido com:

 model = Sequential()
    model.add(Dense(90, activation='LeakyRelu'))

Qual é a solução? Coloque LeakyRelu semelhante a Relu?

A segunda pergunta é: qual é a melhor configuração geral para ajustar os parâmetros do LeakyRelu? Quando seu desempenho é significativamente melhor que o Relu?

user10296606
fonte

Respostas:

15

Você pode usar a camada LeakyRelu , como na classe python, em vez de apenas especificar o nome da string como no seu exemplo. Funciona de maneira semelhante a uma camada normal.

Importar o LeakyReLU e instanciar um modelo

from keras.layers import LeakyReLU
model = Sequential()

# here change your line to leave out an activation 
model.add(Dense(90))

# now add a ReLU layer explicitly:
model.add(LeakyReLU(alpha=0.05))

Ser capaz de simplesmente escrever, por exemplo, activation='relu'é possível devido a aliases simples que são criados no código-fonte.


Para sua segunda pergunta:

Qual é a melhor configuração geral para ajustar os parâmetros do LeakyRelu? E quando seu desempenho é significativamente melhor que o Relu?

Não posso fornecer as configurações ideais para o LeakyReLU, receio - elas dependem do modelo / dados.

A diferença entre o ReLU e o LeakyReLU é a capacidade do último de reter algum grau dos valores negativos que fluem para ele, enquanto o primeiro simplesmente define todos os valores menores que 0 como 0. Em teoria, esse intervalo de saída estendido oferece uma flexibilidade um pouco maior para o modelo que o utiliza. Tenho certeza de que os inventores pensaram que isso era útil e talvez tenha provado ser esse o caso de alguns benchmarks. Na prática, no entanto, as pessoas geralmente aderem ao ReLU, pois os benefícios do LeakyReLU não são consistentes e o ReLU é mais barato de calcular e, portanto, os modelos treinam um pouco mais rápido.

n1k31t4
fonte
1

Acredito que a pergunta era sobre o uso do LeayReLU na API Funcional do Keras . O que seria algo como isto:

from keras.layers import LeakyReLU
...
x = Dense(128)(x)
x = LeakyReLU(alpha=0.3)(x)

```
Surfista
fonte
0

LeakyRelu permite um pequeno gradiente quando a unidade não está ativa (negativa):

f(x)=umaeuphumaxparax<0 0,
f(x)=xparax> =0

ranaFire
fonte