有一个像这样的数组:
input = np.array([[0.04, -0.8, -1.2, 1.3, 0.85, 0.09, -0.08, 0.2]])
我想将 -0.1 和 0.1 之间的所有值(最后一个维度)更改为 0,并将其余值更改为 1
filtred = [[0, 1, 1, 1, 1, 0, 0, 1]]
使用
lamnda
层不是我喜欢的选择(我更愿意找到一个具有本机层的解决方案,可以轻松转换为 TfLite,而无需激活 SELECT_TF_OPS
或 TFLITE_BUILTINS
选项),但我还是尝试了:
layer = tf.keras.layers.Lambda(lambda x: 0 if x <0.1 and x>-0.1 else 1)
layer(input)
我得到:
ValueError: Exception encountered when calling Lambda.call().
The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Arguments received by Lambda.call():
• inputs=tf.Tensor(shape=(6,), dtype=float32)
• mask=None
• training=None
这就是工作
def func(x):
abs = tf.keras.backend.abs(x)
greater = tf.keras.backend.greater(abs, 0.1)
return tf.keras.backend.cast(greater, dtype=tf.keras.backend.floatx()) #will return boolean values
layer = tf.keras.layers.Lambda(func)
input = np.array([[0.04, -0.8, -1.2, 1.3, 0.85, 0.09, -0.08, 0.2]])
layer(input)