python - 如何将整数位模式解压缩到 tf.Tensor 中?
问题描述
我有一个相对有效地存储在磁盘上的大数据集,其中一个热向量被打包到一堆整数的位中。数据格式是固定宽度的,所以我可以很好地阅读它tf.data.FixedLengthRecordDataset
,tf.decode_raw()
并且 tf.bitwise.*
我已经将输入数据转换为一堆表示输入向量的 64 位整数。但我很难将整数位模式扩展为张量。
具体来说(为简洁起见,使用字节而不是长整数),假设我得到了值0xba
(0b10111010
)。在这种情况下,我想将其扩展到 vector (1, 0, 1, 1, 1, 0, 1, 0)
。实现这一目标的最佳方法是什么?
解决方案
你可以这样做:
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]]
推荐阅读
- javascript - 如何为窗口对象等特定范围内的函数调用创建默认父对象?
- c++ - C++读取/sys/class/net/eth0/operstate遇到权限被拒绝
- python - 如何解决从列表中打印单词的 IndexError 问题
- r - 将深度嵌套列表转换为数据框
- javascript - ASP.Net (VB) - 使用先前下拉列表中的数据填充下拉列表。[未找到成员]
- javascript - JavaScript 在滚动时更改背景颜色
- spring - 如何使用 gradle 属性禁用 sonarqube 安全热点?
- node.js - 使用配置文件初始化节点 aws
- ios - backgroundMessageHandler IOS 不会在低功耗模式下触发 [rnFireBase]
- django - 防火墙限制 Django 服务器