Как преобразовать функцию NumPy для тензора TensorFlow? - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь реализовать эту функцию с помощью tf.xyz модулей, доступных в TensorFlow здесь .Эта функция, основанная на NumPy, принимает в качестве входных данных трехмерную матрицу, проверяет условие со значениями последнего столбца и возвращает значения из первых двух столбцов, которые удовлетворяют условию.

Мне трудно конвертировать модули на основе NumPy для тензоров TensorFlow, которые я хочу добавить в качестве лямбда-слоя в мою модель.Любое предложение?

Я пытаюсь использовать 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 голосов
/ 19 сентября 2018

Чтобы выполнить эквивалент булевой индексации numpy в тензорном потоке, вы можете использовать функцию boolean_mask ( задокументировано здесь ).Например:

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)
...