Проверка элементов в массивах между столбцами с расширением Tensorflow / Tensorflow Extended - PullRequest
0 голосов
/ 01 декабря 2019

У меня есть набор данных, для которого я пытаюсь разработать несколько функций, включающих проверку наличия элементов в столбце или массиве в другом массиве. Я пытаюсь сделать это в Tensorflow Extended, чтобы эта операция была частью графика в обслуживании, но я все еще плохо знаком с TF и ​​TFX и не смог успокоиться. В качестве примера представим, что у нас есть следующий набор данных:

>>> data = {"p_id": [100, 200, 300], 
...:        "topic": [('python', 'numpy'), ('pandas',), ('cpp',)], 
...:        "preferred_ids": [(200, 300, 400), (200, 300, 400), ()], 
...:        "trending_topics": [('pandas', 'tensorflow', 'python'), ('pandas', 'tensorflow', 'python'), ('c', 'cpp')] 
...:  }                                                                                                                                                                                                                                                   

>>> df = pd.DataFrame(data)                                                                                                                                                                                                                              

>>> df
   p_id            topic    preferred_ids               trending_topics
0   100  (python, numpy)  (200, 300, 400)  (pandas, tensorflow, python)
1   200        (pandas,)  (200, 300, 400)     (flask, tensorflow, nump)
2   300         (cpp, c)               ()                      (c, cpp)

Я пытаюсь определить функции in_preferred_ids и matches_trending так, чтобы в результате преобразований были созданы столбцы объектов, которые выглядят так:

   p_id            topic    preferred_ids               trending_topics  in_preferred_ids  matches_trending
0   100  (python, numpy)  (200, 300, 400)  (pandas, tensorflow, python)                 0                 1
1   200        (pandas,)  (200, 300, 400)     (flask, tensorflow, nump)                 1                 0
2   300         (cpp, c)               ()                      (c, cpp)                 0                 2

Я пытался использовать reduce_any, чтобы добраться до in_preferred_ids, но я получаю следующую ошибку

TypeError: Expected int32, got <tensorflow.python.framework.sparse_tensor.SparseTensor object at 0x7f22d8731b70> of type 'SparseTensor' instead.

Я подозреваю, что это потому, что p_id - это столбец сэлемент, и reduce_any, вероятно, требует, чтобы оба столбца были массивами, но я не уверен, как это исправить. Моя полная попытка ниже. Любая помощь с благодарностью

def element_is_in(x, y):
    return tf.reduce_any(tf.convert_to_tensor(x.values) == tf.convert_to_tensor(y.values))

def preprocessing_fn(inputs):
    outputs = {
        "in_preferred_ids": (
            tf.where(
                element_is_in(inputs["p_id"], inputs["preferred_ids"]),
                tf.cast(tf.zeros(inputs["p_id"]), tf.int64),
                tf.cast(tf.ones(inputs["p_id"]), tf.int64),
            )
        )
    }

    return outputs
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...