我正在尝试使用TensorFlow here中可用的tf.xyz
模块来实现以下功能。基于NumPy的以下函数将3D矩阵作为输入,使用最后一列的值检查条件,并从满足条件的前两列返回值。
我很难为TensorFlow张量转换基于NumPy的模块,我想将其作为lambda层添加到我的模型中。有什么建议吗?
我正在尝试使用tf.greater()
和tf.slice()
,但没有得到与该函数的NumPy版本相同的输出。
# NumPy based function on 3D matrix:
def fun1(arr):
return arr[arr[:,2] > 0.95][:,:2]
input_matrix = np.array([[[1, 2, 0.99], [11, 22, 0.80], [111, 222, 0.96]]])
>> input_matrix
[[[ 1. 2. 0.99]
[ 11. 22. 0.8 ]
[111. 222. 0.96]]]
>> np.array([fun1(i) for i in input_matrix])
array([[[ 1., 2.],
[111., 222.]]])
答案 0 :(得分:1)
要在tensorflow中执行numpy的布尔索引的等效功能,可以使用boolean_mask
函数(documented here)。例如:
import tensorflow as tf
def f(x):
first_two_cols = x[:, :, :2]
mask = x[:, :, 2] > 0.95
return tf.boolean_mask(first_two_cols, mask)
input_tensor = tf.convert_to_tensor([[[1, 2, 0.99], [11, 22, 0.80], [111, 222, 0.96]]])
with tf.Session():
output = f(x).eval()
>> output
array([[ 1., 2.],
[111., 222.]], dtype=float32)