首页 文章

keras tensorflow中的高级自定义激活功能

提问于
浏览
1
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行,在bool中引发TypeError(“不允许使用tf.Tensor作为Python bool . “TypeError:不允许使用tf.Tensor作为Python bool . 如果> t不是None,则使用if:而不是t:来测试是否定义了张量,并且>使用TensorFlow操作(如tf.cond)来执行子图以>张量的值为条件 .

有人能说清楚吗?

3 回答

  • 0

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

    from keras.backend.tensorflow_backend import get_session
    
    
    sess=get_session()
    if sess.run(x)>0:
        return t1
    else:
        return t2
    
  • 3

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

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

    比如你的

    if x > 0:
       return t1
    else:
       return t2
    

    会成为

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

    尝试类似的东西:

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

    x不是python变量,它是一个Tensor,它将在模型运行时保存一个值 . x的值仅在评估op时才知道,因此需要通过TensorFlow(或Keras)评估条件 .

相关问题