我正在寻找一种方法来解压TF中的位,就像我使用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。
我想到的几点想法(没有实现任何一个):
对于他们两个人来说,想法是将每个数字映射到一个向量,连接所有向量,重新整形,删除不需要的元素。
这两种方法似乎都应该更加复杂。有没有人有一种有效的方式(在速度方面)如何在tensorflow中实现numpy的unpackbits?
答案 0 :(得分:1)
也许是这样的:
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])
希望更快(以及uint8
中的结果)。