Как сделать кусочную функцию активации с Python в TensorFlow?

Активная функция в моей CNN имеет вид:

abs(X)< tou  f = 1.716tanh(0.667x)
x >= tou     f = 1.716[tanh(2tou/3)+tanh'(2tou/3)(x-tou)]
x <= -tou    f = 1.716[tanh(-2tou/3)+tanh'(-2tou/3)(x+tou)]

tou является константой.

Итак, в TensorFlow можно сделать свою функцию активации. Я не хочу писать его на C++ и перекомпилировать весь TensorFlow.

Как я могу использовать функцию, доступную в TensorFlow, для достижения этой цели?


person DL-Lily    schedule 19.08.2017    source источник
comment
Три условия кажутся несовместимыми. Например, что происходит, когда x==tou?   -  person Abhishek Bansal    schedule 19.08.2017
comment
3-е условие неверно. Я отредактировал его снова. Пожалуйста, попробуйте. спасибо~   -  person DL-Lily    schedule 21.08.2017


Ответы (1)


В тензорном потоке легко написать свою функцию активации, если она включает уже существующие операции, для вашего случая вы можете использовать tf.case

f = tf.case({tf.less(tf.abs(x), tou): lambda: 7.716 * tf.tanh(0.667 * x),
         tf.greater_equal(x, tou): lambda: 1.716 * tf.tanh(2 * tou / 3) + 1.716 * tf.tanh(2 * tou / 3) * (x - tou)},
        default=lambda: 1.716 * tf.tanh(-2 * tou / 3) + 1.716 * tf.tanh(-2 * tou / 3) * (x + tou), exclusive=True)
person Ishant Mrinal    schedule 19.08.2017
comment
третье условие неверно. Я отредактировал его снова. Пожалуйста, посмотрите. спасибо~ - person DL-Lily; 21.08.2017