2017-08-30 25 views
0

我有一個神經網絡,在這個網絡中我構建了自己的圖層,並給出了形狀爲A = [10, 5]的結果。兩層之間的整形張量

我想將結果提供給另一個輸入形狀爲B = [10, 9, 5]的圖層。

輸入B是基於先前的結果A,例如,選擇從A 9個不同行10次,使得一個新的張量與形狀[10, 9, 5]

有沒有辦法做到這一點?

回答

0

for循環就可以了:

a = tf.constant([[1, 2, 7], [3, 4, 8], [5, 6, 9]]) 

tensor_list = [] 
pick_times = 3 
for i in range(pick_times): 
    pick_rows = [j for j in range(pick_times) if i != j] 
    tensor_list.append(tf.gather(a, pick_rows)) 

concated_tensor = tf.concat(tensor_list, 0) 
result = tf.reshape(concated_tensor, [3, 2, 3]) 
+0

謝謝!但實際上我需要選擇9次不同的行十次。例如,我選擇除第一行以外的所有行,然後選擇除第二行之外的所有行,等等,然後再等十次,以形成具有形狀[10,9,5]的新矩陣。有沒有辦法自動做到這一點,而不是一個一個做,最後使用concate? –

0

轉換張量A(該層的輸出)轉換爲numpy的陣列:

a=sess.run(A.eval()) 

對於我將使用示例的目的:

a=np.random.uniform(0,5,[10]) 

然後:

#choose wich element will be left out 
out = np.random.randint(5, size=[10]) 

#array of different output layers without one random element 
b=[] 
for i in range(10): 
    b.append(np.delete(a,out[i])) 

#Stack them all together 
B = tf.stack(b[:]) 
+0

非常感謝!你認爲有兩個會議(一個在這裏,另一個在訓練)會是一個問題嗎?另外我猜這應該不會影響反向傳播過程,因爲這裏沒有使用權重,對吧? –

+0

即使使用權重(tf.variable),它們也不會受到影響,因爲您在此處處於前饋過程中,並且不會更改權重。 – prometeu