2016-03-06 117 views
26

kodu aşağıdakilere sahip en I diyelim:TensorFlow grafiğinde koşul nasıl eklenir?

x = tf.placeholder("float32", shape=[None, ins_size**2*3], name = "x_input") 
condition = tf.placeholder("int32", shape=[1, 1], name = "condition") 
W = tf.Variable(tf.zeros([ins_size**2*3,label_option]), name = "weights") 
b = tf.Variable(tf.zeros([label_option]), name = "bias") 

if condition > 0: 
    y = tf.nn.softmax(tf.matmul(x, W) + b) 
else: 
    y = tf.nn.softmax(tf.matmul(x, W) - b) 

hesaplamada if deyimi işi (ben öyle düşünmüyorum) istiyorsunuz? Değilse, TensorFlow hesaplama grafiğine bir if ifadesini nasıl ekleyebilirim?

cevap

51

if ifadesinin burada çalışmadığından emin olun, çünkü durum grafik yapım süresinde değerlendirilmiştir, oysa tahminen koşulların çalışma zamanında yer tutucusuna verilen değere bağlı olmasını istersiniz. (condition > 0"truthy" in Python bir Tensor, olarak değerlendirildiğinden, Aslında, her zaman, birinci dal sürecektir.)

koşullu kontrol akışını desteklemek için, TensorFlow bir bağlı olarak bir, iki dallarını değerlendirir tf.cond() operatörü içerir boole durumu.

x = tf.placeholder(tf.float32, shape=[None, ins_size**2*3], name="x_input") 
condition = tf.placeholder(tf.int32, shape=[], name="condition") 
W = tf.Variable(tf.zeros([ins_size**2 * 3, label_option]), name="weights") 
b = tf.Variable(tf.zeros([label_option]), name="bias") 

y = tf.cond(condition > 0, lambda: tf.matmul(x, W) + b, lambda: tf.matmul(x, W) - b) 
+1

detaylı açıklama için size çok teşekkür ederim: condition basitlik için bir sayıl tf.int32 değer olacak şekilde nasıl kullanılacağını göstermek için, ben programınızı yeniden edeceğiz! –

+1

@mrry İki dal da varsayılan olarak yürütülür mü? Tf.cond (c, lambda x: train_op1, lambda x: train_op2) var ve her iki train_ops, c'nin değerinden bağımsız olarak her koşulda yürütülmektedir. Yanlış bir şey mi yapıyorum? –

+5

@PiotrDabkowski Bu, bazen "dokümanlardaki" (https://www.tensorflow.org/api_docs/python/tf/cond) adresindeki tf.cond() 'ın şaşırtıcı bir davranışıdır. Kısacası, koşuluyla çalıştırmak istediğiniz ops'ları oluşturmanız gerekir * iç * ilgili lambdalar. Lambdalar dışında yarattığınız ama her iki dalda da belirteceğiniz her şey her iki durumda da yürütülür. – mrry