如何将整数位模式解包到tf.Tensor中?

时间:2019-02-14 09:50:59

标签: python tensorflow tensorflow-datasets

我有一个很大的数据集,相对高效地存储在磁盘上,一个热向量打包到一堆int的位中。数据格式是固定宽度的,因此我可以用tf.data.FixedLengthRecordDataset来读取它,并且使用tf.decode_raw()tf.bitwise.*可以将输入数据转换成一堆64位整数,分别表示输入向量。但是我为将整数位模式扩展为张量而感到困惑。

具体地说(为了简洁起见,使用字节而不是long),假设我得到了值0xba0b10111010)。在那种情况下,我想将其扩展为向量(1, 0, 1, 1, 1, 0, 1, 0)。实现此目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以这样做:

angular.json

输出:

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}))