首页 > 解决方案 > 如何将整数位模式解压缩到 tf.Tensor 中?

问题描述

我有一个相对有效地存储在磁盘上的大数据集,其中一个热向量被打包到一堆整数的位中。数据格式是固定宽度的,所以我可以很好地阅读它tf.data.FixedLengthRecordDatasettf.decode_raw()并且 tf.bitwise.*我已经将输入数据转换为一堆表示输入向量的 64 位整数。但我很难将整数位模式扩展为张量。

具体来说(为简洁起见,使用字节而不是长整数),假设我得到了值0xba0b10111010)。在这种情况下,我想将其扩展到 vector (1, 0, 1, 1, 1, 0, 1, 0)。实现这一目标的最佳方法是什么?

标签: pythontensorflowtensorflow-datasets

解决方案


你可以这样做:

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]]

推荐阅读