【问题标题】:Tensorflow: tensor binarizationTensorflow:张量二值化
【发布时间】:2018-11-21 14:37:30
【问题描述】:

我想以这样一种方式转换这个数据集,即每个张量都有一个给定的大小n,并且当且仅当有一个i 时,这个新张量的索引i 处的特征设置为 1在原始特征中(模 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

我知道如何将模应用于张量,但我不知道如何进行其余的转换 谢谢

【问题讨论】:

    标签: python tensorflow


    【解决方案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]]
    

    【讨论】:

    • 谢谢,你能解释一下轴=-2吗?我明白你在做什么,但我不明白你是怎么想出-2的。
    • @taktak004 对,所以在您执行tf.one_hot 之后,最后会添加一个新维度。但是,您希望减少输入张量的最后一个维度(例如,您的示例中的“列”0, 3, 412, 2, 4。此维度不会是 t_1h 中的最后一个维度(因为这是新的one-hot 维度),但是pre-to-last 维度,可以参考-2。希望能更清楚一点?
    • @taktak004 是的,确切的想法是它可以与向量或矩阵或其他任何东西一起使用(实际上,我认为它对于标量会失败)。您还可以为减少的轴和/或新轴的位置添加显式参数,但这似乎过于复杂。
    • 附加问题,如何更改它以处理稀疏张量?
    • 我创建了一个新问题,因为我认为方法实际上会完全不同:stackoverflow.com/questions/53450218/…
    猜你喜欢
    • 1970-01-01
    • 2018-07-25
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多