2017-04-13 9 views
5

私はtf.decode_rawとは逆の動作をしようとしています。encode_rawテンソルフロー関数の作成方法は?

テンソルをdtype = tf.float32とすると、浮動小数点テンソルを取り込み、型文字列のテンソルを返す関数encode_raw()を使用したいと考えています。

これは、tf.write_fileを使用してファイルを書き込むことができるので便利です。

既存の関数を使用してTensorflowでそのような関数を作成する方法を知っている人はいますか?

答えて

2

数字をtf.as_stringのテキストとして記述することをお勧めします。あなたが本当にバイナリ文字列としてそれらを書きたい場合は、しかし、それが可能であることが判明:私のために

import tensorflow as tf 

with tf.Graph().as_default(): 
    character_lookup = tf.constant([chr(i) for i in range(256)]) 
    starting_dtype = tf.float32 
    starting_tensor = tf.random_normal(shape=[10, 10], stddev=1e5, 
            dtype=starting_dtype) 
    as_string = tf.reduce_join(
     tf.gather(character_lookup, 
       tf.cast(tf.bitcast(starting_tensor, tf.uint8), tf.int32))) 
    back_to_tensor = tf.reshape(tf.decode_raw(as_string, starting_dtype), 
           [10, 10]) # Shape information is lost 
    with tf.Session() as session: 
    before, after = session.run([starting_tensor, back_to_tensor]) 
    print(before - after) 

これは、すべてゼロの配列を出力します。 Pythonの3で働く人々のため

+0

それが機能します!ありがとう! –

1

CHR()は、前の回答のコードを用いて得られたバイトの出力を変化させるのPython 3で異なる挙動を有します。

character_lookup = tf.constant([i.tobytes() for i in np.arange(256, dtype=np.uint8)])

修正この問題に、このコード行

character_lookup = tf.constant([chr(i) for i in range(256)])

を交換します。

関連する問題