Тензор потока: тензорная бинаризация - PullRequest
0 голосов
/ 21 ноября 2018

Я хочу преобразовать этот набор данных таким образом, чтобы каждый тензор имел заданный размер n, и чтобы особенность с индексом i этого нового тензора была установлена ​​в 1, если и только если существует iв оригинальной функции (по модулю n).

Я надеюсь, что следующий пример прояснит ситуацию

Предположим, у меня есть такой набор данных:

t = tf.constant([
  [0, 3, 4],
  [12, 2 ,4]])
ds = tf.data.Dataset.from_tensors(t)

Я хочуполучить (если n = 9)

t = tf.constant([
  [1, 0, 0, 1, 1, 0, 0, 0, 0], # index set to 1 are 0, 3 and 4
  [0, 0, 1, 1, 1, 0, 0, 0, 0]]) # index set to 1 are 2, 4, and 12%9 = 3

Я знаю, как применить модуль к тензору, но я не могу найти, как сделать остальное преобразование благодаря

1 Ответ

0 голосов
/ 21 ноября 2018

Это похоже на tf.one_hot, только для нескольких значений одновременно.Вот способ сделать это:

import tensorflow as tf

def binarization(t, n):
    # One-hot encoding of each value
    t_1h = tf.one_hot(t % n, n, dtype=tf.bool, on_value=True, off_value=False)
    # Reduce across last dimension of the original tensor
    return tf.cast(tf.reduce_any(t_1h, axis=-2), t.dtype)

# Test
with tf.Graph().as_default(), tf.Session() as sess:
    t = tf.constant([
        [ 0,  3,  4],
        [12,  2,  4]
    ])
    t_m1h = binarization(t, 9)
    print(sess.run(t_m1h))

Вывод:

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