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() 函数的变通方法,但它很痛苦 .
tf.logical_and()
tf.logical_or()
tf.logical_and(x,y)==TRUE
x==TRUE and y==TRUE
keras.backend.any()
.all()
K.switch()
设 x 和 y 是相同形状的布尔keras张量 .
x
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)
这里 keras.backend.stack([x, y], axis=0) 将x和y堆叠成一个新的张量,在数字0处有一个额外的维度 . 之后 keras.backend.any 采用逻辑或沿着新维度, keras.backend.any 采用逻辑和 .
keras.backend.stack([x, y], axis=0)
keras.backend.any
我的解决方案(也许不是最好的,因为我也没有找到其他人),是:
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运算符......也许它们有效?
2 回答
设
x
和y
是相同形状的布尔keras张量 .要采取元素或,请执行以下操作:
要采用元素,请执行以下操作:
这里
keras.backend.stack([x, y], axis=0)
将x和y堆叠成一个新的张量,在数字0处有一个额外的维度 . 之后keras.backend.any
采用逻辑或沿着新维度,keras.backend.any
采用逻辑和 .我的解决方案(也许不是最好的,因为我也没有找到其他人),是:
但现在考虑一下......我从未测试过python运算符......也许它们有效?