2017-04-13 15 views
5

मैं tf.decode_raw क्या करता है इसके विपरीत प्रदर्शन करने की कोशिश कर रहा हूं।एक encode_raw tensorflow फ़ंक्शन कैसे बनाएं?

एक उदाहरण dtype = tf.float32 का टेंसर दिया जाएगा, मैं एक फ़ंक्शन encode_raw() रखना चाहता हूं जो एक फ्लोट टेंसर में लेता है और एक प्रकार का टेंसर प्रकार स्ट्रिंग देता है।

यह उपयोगी है क्योंकि तब मैं फ़ाइल लिखने के लिए tf.write_file का उपयोग कर सकता हूं।

क्या किसी को पता है कि मौजूदा कार्यों का उपयोग करके टेन्सफोर्लो में ऐसा फ़ंक्शन कैसे बनाया जाए?

उत्तर

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

यह काम करता है! धन्यवाद! –

1

अजगर 3 के साथ काम कर रहे लोगों के लिए:

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)])

की जगह।