usar redes neuronales modelo libreria español ejemplo como python machine-learning neural-network keras data-science

python - redes - ¿Cómo utilizar capas de activación avanzada en Keras?



modelo keras (3)

La forma correcta de usar las activaciones avanzadas como PReLU es usarlo con el método add() y no envolverlo usando la clase de Activation . Ejemplo:

model = Sequential() act = keras.layers.advanced_activations.PReLU(init=''zero'', weights=None) model.add(Dense(64, input_dim=14, init=''uniform'')) model.add(act)

Este es mi código que funciona si uso otras capas de activación 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)

En este caso, no funciona y dice "TypeError: El objeto ''PReLU'' no se puede llamar" y se llama al error en la línea model.compile. ¿Por qué es este el caso? Todas las funciones de activación no avanzadas funcionan. Sin embargo, ninguna de las funciones de activación avanzadas, incluida esta, funciona.


Para la API funcional de Keras, creo que la forma correcta de combinar Dense y PRelu (o cualquier otra activación avanzada) es usarlo así:

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))

Por supuesto, uno debe parametrizar capas de acuerdo con el problema.


Si usa el Model API en Keras, puede llamar directamente a la función dentro de la Layer Keras. Aquí hay un ejemplo:

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'')