2017-08-02 16 views
0

私はnp.unpackbitsでこれを行うことができます同じ方法でTFのビットを解凍する方法を探しています。したがって、次のように操作を元に戻してください。TFでのみ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に戻ります。私が念頭に置いていた


少数の思考(それらのいずれかを実装していない):それらの両方のアイデアを

  1. 使用tf.map_fn
  2. 使用tf.contrib.lookup

マップすることです各番号をベクトルに変換し、すべてのベクトルを連結し、再形成し、不要な要素を削除します。

どちらのアプローチも、もっと複雑に思えます。誰も効率的な方法(スピードの面で)で、テンソルフローでnumpyのunpackbitsを達成する方法はありますか?このような

答えて

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が原因tf.mod受け入れていないバイトにint32である、あなたは再びuint8にキャストすることもできます。

Tensorflow 1.3 will have bitwise operations

ので、この最後の行は

願わくは( uint8および結果)速くなり
unpacked = tf.reshape(tf.bitwise.bitwise_and(x, b), [-1]) 

と置き換えることができます。