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

Jin*_*oss 2 python keras tensorflow activation-function

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)})
Run Code Online (Sandbox Code Playgroud)

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

if x>0:
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

文件“/usr/local/lib/python3.4/dist-packages/tensorflow/python/framework/ops.py”,第 614 行,在bool raise TypeError(“不允许将 atf.Tensor作为 Pythonbool使用。”

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

有人可以帮我说清楚吗?

Jak*_*zuk 5

if x > 0没有意义,因为x > 0是张量,而不是布尔值。

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

例如你的

if x > 0:
   return t1
else:
   return t2
Run Code Online (Sandbox Code Playgroud)

会成为

keras.backend.switch(x > 0, t1, t2)
Run Code Online (Sandbox Code Playgroud)