2017-04-13 1 views
5

tf.decode_raw가하는 것과 반대의 작업을 수행하려고합니다.encode_raw tensorflow 함수를 만드는 방법은 무엇입니까?

예를 들어 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) 

이 모두 0의 배열을 인쇄합니다. 파이썬 3 작업들을 위해

+0

작동합니다! 감사! –

1

:

CHR()는 이전 답변에서 얻어진 코드 바이트 출력을 변경 파이썬 (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)])

교체.

관련 문제