2016-08-01 5 views
5

मैं निम्नलिखित है सरल प्लेसहोल्डर:Tensorflow में tf.cond के अंदर फ़र्मर्स को फ़ंक्शन करने के लिए कैसे पास करें?

x = tf.placeholder(tf.float32, shape=[1]) 
y = tf.placeholder(tf.float32, shape=[1]) 
z = tf.placeholder(tf.float32, shape=[1]) 

दो कार्य f1 और f2 के रूप में परिभाषित कर रहे हैं:

pred = tf.placeholder(tf.bool, shape=[1]) 
result = tf.cond(pred, f1(x,y), f2(y,z)) 

:

def fn1(a, b): 
    return tf.mul(a, b) 
def fn2(a, b): 
    return tf.add(a, b) 

अब मैं महीनो स्थिति के आधार पर परिणाम की गणना करना चाहते हैं लेकिन यह मुझे fn1 and fn2 must be callable कहने में त्रुटि देता है।

मैं fn1 और fn2 कैसे लिख सकता हूं ताकि वे रनटाइम पर पैरामीटर प्राप्त कर सकें? मैं निम्नलिखित कॉल करना चाहते हैं:

sess.run(result, feed_dict={x:1,y:2,z:3,pred:True}) 

उत्तर

1

सबसे आसान कॉल में अपने कार्यों को परिभाषित करने के लिए किया जाएगा:

result = tf.cond(pred, lambda: tf.mul(a, b), lambda: tf.add(a, b)) 
9

आप लैम्ब्डा का उपयोग कर कार्यों के लिए मानकों को पारित कर सकते हैं और कोड के रूप में है धौंकनी।

x = tf.placeholder(tf.float32) 
y = tf.placeholder(tf.float32) 
z = tf.placeholder(tf.float32) 

def fn1(a, b): 
    return tf.mul(a, b) 

def fn2(a, b): 
    return tf.add(a, b) 

pred = tf.placeholder(tf.bool) 
result = tf.cond(pred, lambda: fn1(x, y), lambda: fn2(y, z)) 

तो फिर तुम यह निम्न के रूप में कॉल कर सकते हैं:

with tf.Session() as sess: 
    print sess.run(result, feed_dict={x: 1, y: 2, z: 3, pred: True}) 
    # The result is 2.0 
संबंधित मुद्दे