如何为TensorFlow张量转换基于numpy的函数?

时间:2018-09-18 21:55:57

标签: python numpy tensorflow keras tensor

我正在尝试使用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.]]])

1 个答案:

答案 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)