我有一个很大的数据集,相对高效地存储在磁盘上,一个热向量打包到一堆int的位中。数据格式是固定宽度的,因此我可以用tf.data.FixedLengthRecordDataset
来读取它,并且使用tf.decode_raw()
和tf.bitwise.*
可以将输入数据转换成一堆64位整数,分别表示输入向量。但是我为将整数位模式扩展为张量而感到困惑。
具体地说(为了简洁起见,使用字节而不是long),假设我得到了值0xba
(0b10111010
)。在那种情况下,我想将其扩展为向量(1, 0, 1, 1, 1, 0, 1, 0)
。实现此目标的最佳方法是什么?
答案 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}))