1. 程式人生 > 實用技巧 >TensorFlow2.0學習筆記---broadcasting

TensorFlow2.0學習筆記---broadcasting

之前遇到過一個問題,[email protected] +b 時, [email protected] = [b,10] b.shape = [10] ,兩個shape不一樣的矩陣在數學上是不能相加的,但是為什麼在TensorFlow這裡可以相加呢,?broadcasting就是解決這個問題的。

從這個圖中可以看出來,broadcasting的操作是將兩個shape不同的矩陣進行資料平移複製,從而使他們可以相加。

shape中,靠右的維度是小維度,靠左的維度是大維度。從上面兩個例子可以看出來,broadcasting首先將資料右對齊,也就是小維度先對齊,然後在缺失的維度上先補1個size,再講size為1的維度轉化成可以相加運算的size。

broadcasting並沒有進行資料在儲存上的複製,也就是說,複製的資料是不佔用記憶體的。

上面這個例子是不可以進行broadcasting來相加的,因為未對齊的維度不是size=1

下面是可以broadcasting的

最後我們來回顧一下,[email protected] +b 時, [email protected] = [b,10] b.shape = [10] ,兩個shape不一樣的矩陣在數學上是不能相加的,但是為什麼在TensorFlow這裡可以相加呢?

即:

[b,10] + [10]

[b,10] + [1,10]

[b,10] + [b,10]

因為[10]代表偏置,即有十個輸出節點,每一個節點都要加一個輸出偏置。

b代表batch,即b個圖片,b個圖片的在經過網路後變成了【b,10】的shape,而每一個圖片經過網路後的結果都要加上這個偏置,所以就有了broadcasting。

從這個程式碼看出來,當兩個shape不同相加時,函式內部是自動支援broadcasting的。