首页 文章

Keras后端的逻辑AND / OR

提问于
浏览
3

Tensorflow有 tf.logical_and()tf.logical_or() 用于比较两个布尔张量,即 tf.logical_and(x,y)==TRUE 如果 x==TRUE and y==TRUE (doc) . 我在Keras后端找不到这样的东西 . 它们有 keras.backend.any().all() ,但这是用于张量内的聚合,而不是 . 我一直不得不使用嵌套的 K.switch() 函数的变通方法,但它很痛苦 .

2 回答

  • 2

    xy 是相同形状的布尔keras张量 .

    要采取元素或,请执行以下操作:

    keras.backend.any(keras.backend.stack([x, y], axis=0), axis=0)
    

    要采用元素,请执行以下操作:

    keras.backend.all(keras.backend.stack([x, y], axis=0), axis=0)
    

    这里 keras.backend.stack([x, y], axis=0) 将x和y堆叠成一个新的张量,在数字0处有一个额外的维度 . 之后 keras.backend.any 采用逻辑或沿着新维度, keras.backend.any 采用逻辑和 .

  • 4

    我的解决方案(也许不是最好的,因为我也没有找到其他人),是:

    A = K.cast(someBooleanTensor, K.floatx())
    B = K.cast(anotherBooleanTensor, K.floatx())
    
    A_and_B = A * B #this is also something I use a lot for gathering elements
    A_or_B = 1 -((1-A)*(1-B))
    

    但现在考虑一下......我从未测试过python运算符......也许它们有效?

相关问题