2017-01-17 7 views
0

Tensorflowでは、各再帰的ステップが入力として最後のステップの出力を取る、一連の操作を再帰的に適用する最も簡単な方法は何ですか?ここでの重要な特徴は、再帰ステップの数が評価時に指定されており、例によって異なる可能性があることです。可変サイズのテンソルでのランタイム動的再帰の深さ

例えば、入力テンソルX5、およびいくつかの機能Fのために、私は

F(F(F(F(F(X)))))

を計算したいと思います。しかし、同じモデルはまた、X3を計算することができるはずです。

F(F(F(X)))

残念ながら、whileループは動作しません厳密な形状不変量を強制する。つまり、テンソルXのすべての次元をコンパイル時に知る必要があるが、実行時までサンプルサイズ(Xの第1次元)を知ることはできない。

ありがとうございました!

答えて

2

whileループ、つまりtf.while_loop構成を使用して、TensorFlowで簡単に実現できます。 tf.while_loopにはshape_invariantsというパラメータがあり、ループ変数ごとに(場合によっては部分的に)シェイプを指定できます。その形状は、ループ変数がループ中に取ることができる形状よりもあまり具体的でなければなりません。ここに、Fがテンソルに値を追加している完全な例があります。

import tensorflow as tf 
sess = tf.InteractiveSession() 

i = tf.constant(0, dtype=tf.int32) 
x = tf.constant(0, shape=[0], dtype=tf.int32) 

i, x = tf.while_loop(lambda i, _: i < 10, 
        lambda i, x: (i + 1, tf.concat_v2([x, tf.expand_dims(i, 0)], 0)), 
        [i, x], 
        shape_variants=[i.get_shape(), tf.TensorShape([None])]) 

print(x.eval()) 

[0 1 2 3 4 5 6 7 8 9] 
+0

ありがとうございます!明らかに私はドキュメントをよく読まなかった。 – mkmatlock

関連する問題