代码之家  ›  专栏  ›  技术社区  ›  KOB

创建张量,其中给定索引的所有元素均为1,其余元素均为0

  •  2
  • KOB  · 技术社区  · 7 年前

    我有一个占位符 lengths = tf.placeholder(tf.int32, [10]) . 分配给此占位符的10个值中的每一个都是<=我现在想创建一个二维张量,叫做 masks ,其形状为[10,25],其中长度为25的10个向量中的每一个都具有第一个 n 元素设置为 1 ,其余设置为 0 -与 n 是中的对应值 lengths

    例如:

    lengths = [4, 6, 7, ...]
    
    -> masks = [[1, 1, 1, 1, 0, 0, 0, 0, ..., 0],
                [1, 1, 1, 1, 1, 1, 0, 0, ..., 0],
                [1, 1, 1, 1, 1, 1, 1, 0, ..., 0],
                ...
               ]
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Engineero    7 年前

    您可以将长度重塑为(10,1)张量,然后将其与其他序列/索引进行比较 0,1,2,3,...,25 ,由于广播将导致 如果指数小于长度,则为 ; 然后可以将布尔结果转换为 1 0 :

    lengths = tf.constant([4, 6, 7])
    n_features = 25
    ​
    import tensorflow as tf
    ​
    masks = tf.cast(tf.range(n_features) < tf.reshape(lengths, (-1, 1)), tf.int8)
    
    with tf.Session() as sess:
        print(sess.run(masks))
    
    #[[1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
    # [1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
    # [1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]