Вы можете использовать модифицированную активацию ReLU с некоторыми операциями деления. Следующее решение немного изменено, потому что оно выдает 0 для x == 0.5.
Выход O (x) можно переписать как
Теперь пользовательский слой будет
class CustomReLU(Layer):
def __init__(self, **kwargs):
super(CustomReLU, self).__init__(**kwargs)
def build(self, input_shape):
super(CustomReLU, self).build(input_shape)
def call(self, x):
relu = ReLU()
output = relu(x-0.5)/(x-0.5)
return output
def compute_output_shape(self, input_shape):
return input_shape
Edit:
Для x = 0,5 приведенное выше уравнение и код могут быть легко изменены следующим образом.
где (x==0.5)
оценивается в 1, если x равен 0,5 и 0 в любом случае.
import keras.backend as K
class CustomReLU(Layer):
def __init__(self, **kwargs):
super(CustomReLU, self).__init__(**kwargs)
def build(self, input_shape):
super(CustomReLU, self).build(input_shape)
def call(self, x):
relu = ReLU()
output = relu(x-0.5)/(x-0.5) + K.cast(K.equal(x, 0.5), K.floatx())
return output
def compute_output_shape(self, input_shape):
return input_shape