如果我使用像 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 许可协议
使用像 PReLU 这样的高级激活的正确方法是将它与
add()
方法一起使用,而不是使用Activation
类包装它。例子: