2015-12-08 22 views
8

मैं tensorflow में छोड़ने वालों की कार्यक्षमता का उपयोग करने की कोशिश कर रहा हूँ:tensorflow में छोड़ने वालों का उपयोग कर त्रुटि

sess=tf.InteractiveSession() 
initial = tf.truncated_normal([1,4], stddev=0.1) 
x = tf.Variable(initial) 
keep_prob = tf.placeholder("float") 
dx = tf.nn.dropout(x, keep_prob) 
sess.run(tf.initialize_all_variables()) 
sess.run(dx, feed_dict={keep_prob: 0.5}) 
sess.close() 

इस उदाहरण बहुत कि यह कैसे the tutorial में किया जाता है के समान है; हालांकि, मैं निम्न त्रुटि के साथ अंत:

RuntimeError: min: Conversion function <function constant at 0x7efcc6e1ec80> for type <type 'object'> returned incompatible dtype: requested = float32_ref, actual = float32 

मैं dtype float32_ref है, जो समस्या के लिए पृष्ठभूमि हो रहा है को समझने के लिए कुछ परेशानी है। मैंने dtype=tf.float32 निर्दिष्ट करने का भी प्रयास किया है, लेकिन यह कुछ भी ठीक नहीं करता है।

मैं भी इस उदाहरण है, जो float32 साथ ठीक काम करता है की कोशिश की:

sess=tf.Session() 
x=tf.Variable(np.array([1.0,2.0,3.0,4.0])) 
sess.run(x.initializer) 
x=tf.cast(x,tf.float32) 
prob=tf.Variable(np.array([0.5])) 
sess.run(prob.initializer) 
prob=tf.cast(prob,tf.float32) 
dx=tf.nn.dropout(x,prob) 
sess.run(dx) 
sess.close() 

हालांकि, अगर मैं डाली float32 के बजाय float64 मैं एक ही त्रुटि मिलती है:

RuntimeError: min: Conversion function <function constant at 0x7efcc6e1ec80> for type <type 'object'> returned incompatible dtype: requested = float64_ref, actual = float64 

संपादित करें:

ऐसा लगता है कि इस समस्या को केवल वैरिएबल पर ड्रॉपआउट का उपयोग करते समय उत्पन्न होता है रों,, प्लेसहोल्डर के लिए और चर और प्लेसहोल्डर के उत्पादों के लिए उदाहरण काम करता है:

sess=tf.InteractiveSession() 
x = tf.placeholder(tf.float64) 

sess=tf.InteractiveSession() 
initial = tf.truncated_normal([1,5], stddev=0.1,dtype=tf.float64) 
y = tf.Variable(initial) 

keep_prob = tf.placeholder(tf.float64) 
dx = tf.nn.dropout(x*y, keep_prob) 
sess.run(tf.initialize_all_variables()) 
sess.run(dx, feed_dict={x : np.array([1.0, 2.0, 3.0, 4.0, 5.0]),keep_prob: 0.5}) 
sess.close() 

उत्तर

7

यह tf.nn.dropout के कार्यान्वयन कि हाल ही में एक प्रतिबद्ध में तय किया गया था में एक बग है, और TensorFlow की अगली फिल्म में शामिल किया जाएगा। अभी के लिए, इस मुद्दे से बचने के लिए, या तो build TensorFlow from source, या अपने प्रोग्राम को निम्नानुसार संशोधित करें:

#dx = tf.nn.dropout(x, keep_prob) 
dx = tf.nn.dropout(tf.identity(x), keep_prob) 
संबंधित मुद्दे