Keras后端的逻辑AND / OR

时间:2018-04-20 21:43:09

标签: tensorflow keras

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 个答案:

答案 0 :(得分:4)

pathx成为相同形状的布尔keras张量。

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

y

要按元素进行操作,请执行以下操作:

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

这里keras.backend.all(keras.backend.stack([x, y], axis=0), axis=0) 将x和y堆叠到一个新的张量中,该张量的附加维度为0。此后,keras.backend.stack([x, y], axis=0)采用逻辑或沿新维度,而keras.backend.any采用逻辑和。

答案 1 :(得分:2)

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

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运算符......也许它们有效?