我有一個神經網絡,在這個網絡中我構建了自己的圖層,並給出了形狀爲A = [10, 5]
的結果。兩層之間的整形張量
我想將結果提供給另一個輸入形狀爲B = [10, 9, 5]
的圖層。
輸入B
是基於先前的結果A
,例如,選擇從A
9個不同行10次,使得一個新的張量與形狀[10, 9, 5]
。
有沒有辦法做到這一點?
我有一個神經網絡,在這個網絡中我構建了自己的圖層,並給出了形狀爲A = [10, 5]
的結果。兩層之間的整形張量
我想將結果提供給另一個輸入形狀爲B = [10, 9, 5]
的圖層。
輸入B
是基於先前的結果A
,例如,選擇從A
9個不同行10次,使得一個新的張量與形狀[10, 9, 5]
。
有沒有辦法做到這一點?
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])
轉換張量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[:])
非常感謝!你認爲有兩個會議(一個在這裏,另一個在訓練)會是一個問題嗎?另外我猜這應該不會影響反向傳播過程,因爲這裏沒有使用權重,對吧? –
即使使用權重(tf.variable),它們也不會受到影響,因爲您在此處處於前饋過程中,並且不會更改權重。 – prometeu
謝謝!但實際上我需要選擇9次不同的行十次。例如,我選擇除第一行以外的所有行,然後選擇除第二行之外的所有行,等等,然後再等十次,以形成具有形狀[10,9,5]的新矩陣。有沒有辦法自動做到這一點,而不是一個一個做,最後使用concate? –