keras + tensorflow 中的高级自定义激活函数


def newactivation(x):
    if x>0:
        return K.relu(x, alpha=0, max_value=None)
    else :
        return x * K.sigmoid(0.7* x)
get_custom_objects().update({'newactivation': Activation(newactivation)})

我正在尝试在 keras 中为我的模型使用此激活函数,但我很难找到要替换的内容

if x>0:

我得到的错误:

文件 "/usr/local/lib/python3.4/dist-packages/tensorflow/python/framework/ops.py", 614 行,布尔值 raise TypeError("不允许将tf.Tensor用作 Python bool

类型错误:不允许将tf.Tensor用作 Python bool。使用 if >t is not None: 而不是 if t: 来测试是否定义了张量,并>使用 TensorFlow 操作(如 tf.cond(执行以张量值>为条件的子图。

有人可以帮我说清楚吗?

if x > 0没有

意义,因为x > 0是一个张量,而不是一个布尔值。

要在 Keras 中执行条件语句,请使用 keras.backend.switch

例如您的

if x > 0:
   return t1
else:
   return t2

会成为

keras.backend.switch(x > 0, t1, t2)

尝试类似操作:

def newactivation(x):
    return tf.cond(x>0, x, x * tf.sigmoid(0.7* x))

x 不是一个 python 变量,它是一个张量,在模型运行时将保存一个值。x的值只有在评估该操作时才知道,因此需要由TensorFlow(或Keras(评估条件。

您可以评估张量,然后检查条件

from keras.backend.tensorflow_backend import get_session

sess=get_session()
if sess.run(x)>0:
    return t1
else:
    return t2

get_session不适用于 TensorFlow 2.0。您可以在此处找到解决方案

灵感来自 ed Mar 21 '18 at 17:28 的先前答案汤姆霍斯金。这对我有用。tf.cond

def custom_activation(x):
    return tf.cond(tf.greater(x, 0), lambda: ..., lambda: ....)

相关内容

  • 没有找到相关文章

最新更新