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()
函数的变通方法,但它非常不优雅。
答案 0 :(得分:4)
让path
和x
成为相同形状的布尔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运算符......也许它们有效?