2016-01-11 23 views
16

Đây là mã của tôi mà làm việc nếu tôi sử dụng các lớp kích hoạt khác như tanh:Làm cách nào để sử dụng các lớp kích hoạt nâng cao trong Keras?

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) 

Trong trường hợp này, nó không hoạt động và nói "Lỗi Loại: đối tượng 'PReLU' không callable" và lỗi là được gọi tại dòng model.compile. Tại sao điều này là trường hợp? Tất cả các chức năng kích hoạt không nâng cao đều hoạt động. Tuy nhiên, không phải chức năng kích hoạt nâng cao nào, kể cả chức năng này, hoạt động.

Trả lời

17

Cách chính xác để sử dụng các kích hoạt nâng cao như PReLU là sử dụng phương pháp add() và không gói nó bằng cách sử dụng lớp Activation. Ví dụ:

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

- Nếu chúng ta có hai lớp FC dày đặc, chúng ta nên thêm sau mỗi lớp, và nếu chúng ta cũng bỏ học, chúng ta nên làm gì? – fermat4214

4

Nếu sử dụng Model API trong Keras bạn có thể gọi trực tiếp các chức năng bên trong Keras Layer. Dưới đây là một ví dụ:

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

Đối Keras API chức năng tôi nghĩ rằng cách chính xác để kết hợp rậm và PRelu (hoặc bất kỳ kích hoạt tiên tiến khác) là sử dụng nó như thế này:

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

dĩ nhiên ta nên các lớp parametrize theo vấn đề

+0

Có một vài ví dụ thực sự với các kích hoạt nâng cao bằng cách sử dụng API chức năng. Nếu bạn sử dụng nhiều đầu vào hoặc đầu ra, đây là cách để đi. Điều này đã cho tôi một cái nhìn sâu sắc tuyệt vời. Cảm ơn. –

Các vấn đề liên quan