Como usar camadas de ativação avançados em Keras?

votos
19

Este é o meu código que funciona se eu usar outras camadas de ativação como tanh:

model = Sequential()
act = keras.layers.advanced_activations.PReLU(init='zero', weights=None)
model.add(Dense(64, input_dim=14, init='uniform'))
model.add(Activation(act))
model.add(Dropout(0.15))
model.add(Dense(64, init='uniform'))
model.add(Activation('softplus'))
model.add(Dropout(0.15))
model.add(Dense(2, init='uniform'))
model.add(Activation('softmax'))

sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='binary_crossentropy', optimizer=sgd)
model.fit(X_train, y_train, nb_epoch=20, batch_size=16, show_accuracy=True, validation_split=0.2, verbose = 2)

Neste caso, ele não funciona e diz TypeError: objeto 'PReLU' não é resgatável eo erro é chamado na linha de model.compile. Por que é este o caso? Todas as funções de ativação não-avançados funciona. No entanto, nenhuma das funções de ativação avançados, incluindo este, funciona.

Publicado 11/01/2016 em 06:44
fonte usuário
Em outras línguas...                            


3 respostas

votos
19

O modo correcto a utilizar as activações avançados como PReLU é usá-lo com add()método e não envolvendo-o usando Activationclasse. Exemplo:

model = Sequential()
act = keras.layers.advanced_activations.PReLU(init='zero', weights=None)
model.add(Dense(64, input_dim=14, init='uniform'))
model.add(act)
Respondeu 11/01/2016 em 10:47
fonte usuário

votos
9

Se estiver usando o ModelAPI em Keras você pode chamar diretamente a função dentro do Keras Layer. Aqui está um exemplo:

from keras.models import Model
from keras.layers import Dense, Input
# using prelu?
from keras.layers.advanced_activations import PReLU

# Model definition
# encoder
inp = Input(shape=(16,))
lay = Dense(64, kernel_initializer='uniform',activation=PReLU(),
            name='encoder')(inp)
#decoder
out = Dense(2,kernel_initializer='uniform',activation=PReLU(), 
            name='decoder')(lay)

# build the model
model = Model(inputs=inp,outputs=out,name='cae')
Respondeu 04/05/2017 em 08:55
fonte usuário

votos
1

Para API funcional Keras Eu acho que a maneira correta de combinar Densa e PRelu (ou qualquer outra ativação avançado) é usá-lo como este:

focus_tns =focus_lr(enc_bidi_tns)

enc_dense_lr = k.layers.Dense(units=int(hidden_size))
enc_dense_tns = k.layers.PReLU()(enc_dense_lr(focus_tns))

dropout_lr = k.layers.Dropout(0.2)
dropout_tns = dropout_lr(enc_dense_tns)

enc_dense_lr2 = k.layers.Dense(units=int(hidden_size/4))
enc_dense_tns2 = k.layers.PReLU()(enc_dense_lr2(dropout_tns)) 

é claro deve-se parametrizar camadas de acordo com o problema

Respondeu 01/02/2018 em 15:09
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more