我正在尝试用定义为的分段线性函数替换 Keras sigmoid 函数:
def custom_activation_4(x):
if x < -6:
return 0
elif x >= -6 and x < -4:
return (0.0078*x + 0.049)
elif x >= -4 and x < 0:
return (0.1205*x + 0.5)
elif x >= 0 and x < 4:
return (0.1205*x + 0.5)
elif x >= 4 and x < 6:
return (0.0078*x + 0.951)
else:
return 1;
当我尝试将其运行为:
classifier_4.add(Dense(output_dim = 18, init = 'uniform', activation = custom_activation_4, input_dim = 9))
编译器抛出一个错误说:
Using a `tf.Tensor` as a Python `bool` is not allowed.
我对此进行了研究并了解到,我将变量 x 视为一个简单的 python 变量,而它是一个张量。这就是它不能被视为一个简单的 bool 变量的原因。我也尝试使用 tensorflow cond 方法。这里如何处理和使用 x 作为张量?非常感谢您提供的所有帮助。
最佳答案
您的自定义激活被编写为单个浮点数的函数,但您希望将其应用于整个张量。最好的方法是使用 tf.where
。就像是
def custom_activation_4(x):
orig = x
x = tf.where(orig < -6, tf.zeros_like(x), x)
x = tf.where(orig >= -6 and orig < -4, (0.0078*x + 0.049), x)
x = tf.where(orig >= -4 and orig < 0, (0.1205*x + 0.5), x)
x = tf.where(orig >= 0 and orig < 4, (0.1205*x + 0.5), x)
x = tf.where(orig >= 4 and orig < 6, (0.0078*x + 0.951), x)
return tf.where(orig >= 6, 1, x)
关于python - 用自定义激活替换 sigmoid 激活,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52435394/