2016-11-13 130 views
0

總體來說,我寫使用Tensorflow一個RNN模型。我繼承RNNCell並自定義我自己的單元格。最後,我使用dynamic_rnn來構建整個RNN。細節是我想將張量從shape [n,m]轉換爲[n,m,1]。我使用兩種方法來實現這一點:爲什麼在Tensorflow中使用reshape和expand_dims會得到不同的結果?

tf.reshape(matrix, [n, m, 1]) # the first method 
tf.expand_dims(matrix, -1) # the second method 

我期望是,使用這兩種方法,我會得到完全相同的訓練和預測結果(所有的隨機種子是固定的)。但結果是不同的。我很困惑。

回答

0

tf.reshape只是重新排列元素,但tf.expand_dims增加了一個層面,你的張量。它們的功能是不同的。

但是,你所期望的是,由於隨機初始化,每次你訓練的結果應該是略有不同。

+0

謝謝!我用session.run得到兩個'重塑的結果(矩陣,[N,M,1])'和'expand_dims(矩陣,-1)',它們是完全一樣的。 「他們的職能是不同的」是什麼意思?我設置了固定的隨機種子,因此每次運行代碼時都沒有隨機性。 – jzb

+0

因此,您始終使用相同的輸入獲得相同的結果? –

+0

是的,如果我堅持用方法1(或方法2),我總是得到相同的結果,因爲隨機種子是固定的。但是如果我將代碼從方法1切換到方法2(反之亦然),我會得到不同的結果。 – jzb