Взгляните на исходный код, в котором определены функции активации Keras:
keras/activations.py
Например:
def relu(x, alpha=0., max_value=None):
"""Rectified Linear Unit.
# Arguments
x: Input tensor.
alpha: Slope of the negative part. Defaults to zero.
max_value: Maximum value for the output.
# Returns
The (leaky) rectified linear unit activation: `x` if `x > 0`,
`alpha * x` if `x < 0`. If `max_value` is defined, the result
is truncated to this value.
"""
return K.relu(x, alpha=alpha, max_value=max_value)
А также как слои Keras вызывают функции активации: self.activation = activations.get(activation)
activation
может быть строковым или вызываемым.
Таким образом, аналогично вы можете определить свою собственную функцию активации, например:
def my_activ(x, p1, p2):
...
return ...
Предположим, вы хотите использовать эту активацию в слое Dense, вы просто поместите свою функцию следующим образом:
x = Dense(128, activation=my_activ(p1, p2))(input)
Если вы имеете в виду, что хотите реализовать свою собственную производную:
Если ваша функция активации написана на функциях Tensorflow / Keras, операции которых дифференцируются (например, K.dot(), tf.matmul(), tf.concat() etc.
), то производные будут получены путем автоматического дифференцирования https://en.wikipedia.org/wiki/Automatic_differentiation. В этом случае вам не нужно писать собственную производную.
Если вы все еще хотите переписать производные, проверьте этот документ https://www.tensorflow.org/extend/adding_an_op, где вам нужно зарегистрировать градиенты с помощью tf.RegisterGradient
person
Nathan Explosion
schedule
09.08.2018
activation=yourTensorflowFunc
. Или используйте слой активацииActivation(yourTensorflowFunc)
. - person Daniel Möller   schedule 08.08.2018