代码之家  ›  专栏  ›  技术社区  ›  Salvador Dali

仅在TF中解包位

  •  4
  • Salvador Dali  · 技术社区  · 7 年前

    np.unpackbits

    import numpy as np
    import tensorflow as tf
    original = np.random.choice(a=[1, 0], size=(100))
    data     = np.packbits(original.astype(np.bool), axis=None)
    
    X = tf.constant(data)
    

    假设我只能访问X,如何在TF中将其转换为原始。当然,我可以使用numpy,但这将把数据从TF移到python,然后再移回TF。


    我脑海中的一些想法(没有实现其中任何一个):

    1. 使用 tf.map_fn
    2. 使用 tf.contrib.lookup

    这两种方法的思想都是将每个数字映射到一个向量,合并所有向量,重塑形状,删除不需要的元素。

    1 回复  |  直到 7 年前
        1
  •  4
  •   Stefan Falk    5 年前

    也许是这样的:

    import tensorflow as tf
    
    x = tf.constant((1, 2, 7, 0, 255), dtype=tf.uint8)
    
    b = tf.constant((128, 64, 32, 16, 8, 4, 2, 1), dtype=tf.uint8)
    unpacked = tf.reshape(tf.mod(tf.to_int32(x[:,None] // b), 2), [-1])
    

    unpacked 在中 int32 由于 tf.mod uint8 再一次

    Tensorflow 1.3 will have bitwise operations ,因此最后一行可以替换为

    unpacked = tf.reshape(tf.bitwise.bitwise_and(x, b), [-1])
    

    希望这会更快(结果是 ).