如何在 Keras 中使用高级激活层?

新手上路,请多包涵

如果我使用像 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)

在这种情况下,它不起作用并显示“TypeError: ‘PReLU’ object is not callable”并且在 model.compile 行调用错误。为什么会这样?所有非高级激活函数都有效。但是,包括这个在内的高级激活函数都不起作用。

原文由 pr338 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 823
2 个回答

使用像 PReLU 这样的高级激活的正确方法是将它与 add() 方法一起使用,而不是使用 Activation 类包装它。例子:

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

原文由 Tarantula 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果在 Keras 中使用 Model API,您可以直接调用 Keras 中的函数 Layer 。这是一个例子:

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

原文由 Mattia Paterna 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题