2017-08-19 1 views
0

La fonction active dans mon CNN a la forme:Comment faire une fonction d'activation par morceaux avec Python dans TensorFlow?

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 est une constante. Ainsi, dans TensorFlow, il est possible de créer sa propre fonction d'activation. Je ne veux pas l'écrire en C++ et recompiler l'intégralité de TensorFlow.

Comment puis-je utiliser la fonction disponible dans TensorFlow pour l'atteindre?

+0

Les trois conditions semblent incompatibles. Par exemple, que se passe-t-il lorsque x == tou? –

+0

la troisième condition est fausse. Je l'ai encore édité. S'il vous plaît essayer. merci ~ –

Répondre

0

En tensorflow il est facile d'écrire votre propre fonction d'activation si elle est inclut déjà existé ops, pour votre cas, vous pouvez utiliser 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) 
+0

la troisième condition est fausse. Je l'ai encore édité. jetez un coup d'oeil s'il vous plait. merci ~ –

+0

a modifié ma réponse selon les nouvelles conditions. –