2017-01-31 170 views
1

我使用concat將形狀[150,1]的張量t2追加到最初形狀爲[150,0]的張量t1上。我想創建一個形狀爲[150,1]的張量(在軸上連接= 1),並用新張量覆蓋t1。這裏是我的代碼:TensorFlow將連續張量分配給不同形狀的張量

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

我得到的錯誤是:

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

奇怪的是,我得到了同樣的錯誤,當我設置軸= 0。不知道發生了什麼;這應該是一件非常容易的事情。我懷疑它與t1的維度1爲0有什麼關係。有什麼建議嗎?提前致謝。

[編輯]

事實證明,這個問題是用 「分配」,因爲我設定值T1(形狀(150,0))到CONCAT結果(形狀(150,1)),其正在讓我的TF尖叫(理所當然)。任何方式在這個?

爲了提供更多的上下文,t1是一個張量,我用它來存儲從展開seq2seq RNN產生的logit t2,其中輸出序列具有未知長度。所以t1的大小將隨着每次展開而在維度1中增加。

+0

這聽起來像你在正確的軌道上。你能給出一個小的,自包含的例子來說明問題嗎? –

+0

@PeterHawkins事實證明,問題與「分配」,而不是「concat」;我不能給一個張量(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是我用來存儲logits的張量,t2是輸入向量的logit。我在t1上添加了很多t2張量,所以我無法在每次迭代中重塑t1,因爲它應該繼續變大。另外,我希望第一次迭代時的輸出形狀爲(150,1)。 –

+0

幫助我一個小例子。 –