如何使用Keras创建自定义激活功能?

Mar*_*oma 35 python keras keras-layer

有时默认的标准激活,如ReLU,tanh,softmax,......和LeakyReLU等高级激活是不够的.它也可能不属于keras-contrib.

你如何创建自己的激活功能?

Mar*_*oma 51

学分由吴里奇这个Github上的问题评论.

# Creating a model
from keras.models import Sequential
from keras.layers import Dense

# Custom activation function
from keras.layers import Activation
from keras import backend as K
from keras.utils.generic_utils import get_custom_objects


def custom_activation(x):
    return (K.sigmoid(x) * 5) - 1

get_custom_objects().update({'custom_activation': Activation(custom_activation)})

# Usage
model = Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation(custom_activation, name='SpecialActivation'))
print(model.summary())
Run Code Online (Sandbox Code Playgroud)

请记住,在保存和恢复模型时必须导入此功能.请参阅keras-contrib的注释.

  • 此外,它可以作为参数传递给图层,例如`model.add(Dense(10,activation = custom_activation))` (23认同)
  • 如果它是自定义激活函数,keras 是否知道如何通过微分反向传播它。(如西阿诺) (2认同)
  • 是的,Keras 会进行自分化 (2认同)
  • 如果需要对数值稳定性进行一些修改,我可以以某种方式为激活函数提供自己的导数吗? (2认同)

Epo*_*ous 12

Martin Thoma的回答要简单一些:您可以只创建一个自定义的元素后端函数并将其用作参数。在加载模型之前,您仍然需要导入此功能。

from keras import backend as K

def custom_activation(x):
    return (K.sigmoid(x) * 5) - 1

model.add(Dense(32 , activation=custom_activation))
Run Code Online (Sandbox Code Playgroud)