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

如何将整数位模式解压成tf.tensor?

  •  0
  • arnsholt  · 技术社区  · 7 年前

    我有一个较大的数据集相对有效地存储在磁盘上,其中一个热向量被压缩到一堆整数的位中。数据格式是固定宽度的,所以我可以用 tf.data.FixedLengthRecordDataset tf.decode_raw() tf.bitwise.* 我已经通过输入数据转换成一堆64位整数来表示输入向量。但是我很难把整数位模式扩展成张量。

    具体地说(为了简洁起见,使用字节而不是long),假设我得到了 0xba ( 0b10111010 )在这种情况下,我想把它扩展到向量 (1, 0, 1, 1, 1, 0, 1, 0) . 实现这一目标的最佳方法是什么?

    0 回复  |  直到 7 年前
        1
  •  1
  •   javidcf    7 年前

    你可以这样做:

    import tensorflow as tf
    
    def bits_to_one_hot(bits, depth, dtype=None):
        bits = tf.convert_to_tensor(bits)
        masks = tf.bitwise.left_shift(tf.ones([], dtype=bits.dtype),
                                      tf.range(depth, dtype=bits.dtype))
        masked = tf.bitwise.bitwise_and(tf.expand_dims(bits, -1), masks)
        dtype = dtype or bits.dtype
        return tf.cast(tf.not_equal(masked, 0), dtype)
    
    data = [0b10111010, 0b00101101]
    depth = 8
    input_bits = tf.placeholder(tf.int64, [None])
    one_hot = bits_to_one_hot(input_bits, depth)
    with tf.Session() as sess:
        print(sess.run(one_hot, feed_dict={input_bits: data}))
    

    输出:

    [[0 1 0 1 1 1 0 1]
     [1 0 1 1 0 1 0 0]]