2016-04-27 9 views
1

私はtf.placeholder()の形状[None, None, 10]を使ってテンソルに入力を渡します。今、私は入力の最初の次元を反復し、その次元の各スライスにある関数を適用したいと思います。しかし、私がPython forループを使用してこれを実行しようとすると、Tensorオブジェクトが "iterable"ではないというエラーが表示されます。テンソルのリストをテンソルフローのグラフの入力として渡すにはどうすればよいですか?

テンソルのリストとして入力を渡す方法はありますか[None, 10]、このリストをプレースホルダにどのように割り当てることができますか?または、Tensorのディメンションを繰り返し処理する別の方法がありますか?

+0

あなたは、Python 'for'ループを実行する場合といくつかのPython関数を各結果に適用すると、最初にnumpy配列(セッション実行を使用)に結果をマテリアライズする必要があります –

答えて

0

テンソルxの形を[None、None、10]の形で渡してから、tf.split(0, -1, x)を使用して反復処理できるテンソルのリストを取得する必要があります。

+0

しかし、これもテンソルの結果になりますか?だから私はそれをどのように繰り返しますか? – akshaybetala

+0

いいえ、tf.splitはテンソルではないリストを返します。 – Aaron

+1

残念ながら、 'tf.split()'はグラフ作成時にリストを返すので、 'num_split'引数はゼロより大きい整数でなければならないので、これは動作しないと思います。 – mrry

2

これは新しいtf.map_fn()tf.foldl()tf.foldr()又は(最も一般的)バージョン0.8にTensorFlowに加えtf.scan()高次演算子を使用して可能です。使用する特定の演算子は、実行する計算によって異なります。たとえば、あなたがテンソルの各列に同じ機能を実行し、バック単一テンソルに要素をパックしたい場合、あなたはtf.map_fn()を使用します。

p = tf.placeholder(tf.float32, shape=[None, None, 100]) 

def f(x): 
    # x will be a tensor of shape [None, 100]. 
    return tf.reduce_sum(x) 

# Compute the sum of each [None, 100]-sized row of `p`. 
# N.B. You can do this directly using tf.reduce_sum(), but this is intended as 
# a simple example. 
result = tf.map_fn(f, p) 
+0

これは少し役に立ちますが、それでも私の問題は解決しません。私がリストを反復したいのは、最初の行の出力が、次の行だけでなく、他の行に影響を与えるかもしれないからです。実行時にリストに変換できますか? – akshaybetala

+0

実行時にリストに変換することはできません。おそらく 'tf.foldl()'や 'tf.scan()'を使ってやっていることを達成することができます。これは、繰り返しの間にある状態を累積させるためです。 – mrry

関連する問題