Можно ли создать пользовательскую функцию активации вида:
def newactivation(x):
if x <= -1:
return -1
elif x > -1 and x <= 1
return x
else :
return 1
Так что в основном это будет линеаризованная версия tanh(x).
Это проблема во время оптимизации, что функция имеет две недифференцируемые позиции в -1 и 1?
Как я мог реализовать это?
Это легко реализовать с помощью функции clip:
import keras.backend as K
def activation(x):
return K.clip(x, -1.0, 1.0)
Поскольку градиент никогда не взрывается, это не должно быть проблемой, эта функция имеет форму, аналогичную ReLU.
Это не работает. K.min() и K.max() вводят тензор и возвращают минимальное/максимальное значение вдоль оси, которое в вашем случае указано как 1 и -1. [ K.min (тензор, ось)]
@KlemensKasseroller Да, верно, исправлено.
Потрясающий. Спасибо!
Не должно быть проблемой, я думаю. Даже
ReLu
не дифференцируем при 0. Проверьте реализацию исходного кода, чтобы увидеть, как они обрабатывают этот случай.