2017-01-31 24 views
1

私はconcatを使用して、最初に[150,0]の形状を持つテンソルt1にテンソルt2 [150,1]を追加しています。私は形状[150,1](軸= 1に連結)を持つテンソルを作成し、新しいテンソルでt1を上書きしたいと思います。私は取得していますエラーがあるTensorFlowは、concat-resultテンソルから異なるテンソルのテンソルに割り当てます。

t1.assign(tf.concat(1, [t1, t2])) 

:ここに私のコードがある奇妙な

ValueError: Dimension 1 in both shapes must be equal, but are 0 and 1 

私が軸= 0を設定すると、私は同じエラーを取得しています。何が起こっているのか分かりません。これは非常に簡単なことです。私はそれが0のディメンション1を持つt1と関係があると考えています。前もって感謝します。

[EDIT]

問題は、 "割り当てる" とIがT1を設定していたように(形状(150、0))、連結結果にあり、アウトオン(形状(150、1))、これTFが私に悲鳴を上げています(正当にもそうです)。これはどうですか?

より多くの文脈を提供するために、t1は、seq2seq RNNの展開から生成されたlogit t2を格納するために使用しているテンソルです。出力シーケンスの長さは不明です。したがって、t1のサイズは、展開するたびに次元1で大きくなります。

+0

あなたは正しい軌道に乗っているようですね。問題を示す小さい自己完結型の例を挙げることはできますか? –

+0

@PeterHawkinsそれが判明したように、 "concat"ではなく "assign"での問題です。テンソルを(150,1)(連立テンソル)からテンソル(150、0)(t1)に割り当てることはできません。これを回避する方法はありますか? また、これが奇妙なのかどうかはわかりませんが、あなたがスタンフォードの博士候補者であることがわかりました。私はスタンフォード大学の新入生です! –

答えて

0

使用reshape

t1 = tf.placeholder(tf.float32,[150,1]) 
t2 = tf.placeholder(tf.float32,[150])  
tf.concat(1,[t1,tf.reshape(t2,[150,1])]) 

出力:

<tf.Tensor 'concat_2:0' shape=(150, 2) dtype=float32> 
+0

私はもう少し文脈を提供しましょう。 t1はロジットを格納するために使用しているテンソル、t2は入力ベクトルのロジットです。私はt1に多くのt2テンソルを追加していますので、それが大きくなる必要があるので、すべての繰り返しを繰り返すことはできません。また、最初の繰り返しの出力形状を(150,1)にします。 –

+0

小さな例を教えてください。 –

0

問題がtf.assign上の形状のアップデートと関連しています。 validate_shapeFalseに設定することができます。これにより、tf.assignのエラーは削除されますが、形状が更新されないために不正な動作が発生します。

それはTensorFlowのバグだとそれがここにRの実装を待っているとの関連のGitHubの問題があります:https://github.com/tensorflow/tensorflow/issues/5492

関連する問題