我想以如下方式变换此数据集:每个张量具有给定大小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
我知道如何将模应用于张量,但是我没有找到剩下的变换方法 谢谢
答案 0 :(得分:1)
这与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]]