2016-12-20 12 views
4
import tensorflow as tf 

array = tf.Variable(tf.random_normal([10])) 
i = tf.constant(0) 
l = [] 

def cond(i,l): 
    return i < 10 

def body(i,l): 
    temp = tf.gather(array,i) 
    l.append(temp) 
    return i+1,l 

index,list_vals = tf.while_loop(cond, body, [i,l]) 

上記のコードと同様の方法でテンソル配列を処理します。 whileループの本体では、要素ごとに配列を処理して、ある機能を適用したいと思っています。デモンストレーションのために、私は小さなコードスニペットを与えました。ただし、次のようなエラーメッセージが表示されます。ループ実行中のテンソルフロー

ValueError: Number of inputs and outputs of body must match loop_vars: 1, 2 

これを解決するための助けに感謝します。

おかげドキュメント引用

答えて

6

loop_varsが(おそらくネストされた)タプル、namedtupleまたはリストであるが、両方condbody

に渡されテンソルの 正規のpython配列をテンソルとして渡すことはできません。あなたは何ができるか、である:通常tf.while_loopはループは変更されませんしながら、内部のテンソルの形状を想定しているため

i = tf.constant(0) 
l = tf.Variable([]) 

def body(i, l):            
    temp = tf.gather(array,i) 
    l = tf.concat([l, [temp]], 0) 
    return i+1, l 

index, list_vals = tf.while_loop(cond, body, [i, l], 
           shape_invariants=[i.get_shape(), 
                tf.TensorShape([None])]) 

形状不変量が存在します。

sess = tf.Session() 
sess.run(tf.global_variables_initializer()) 
sess.run(list_vals) 
Out: array([-0.38367489, -1.76104736, 0.26266089, -2.74720812, 1.48196387, 
      -0.23357525, -1.07429159, -1.79547787, -0.74316853, 0.15982138], 
      dtype=float32) 
関連する問題