今天看代碼,對比了常見的公式表達與代碼的表達,發覺torch.nn.Linear的數學表達與我想象的有點不同,于是思索了一番。
眾多周知,torch.nn.Linear作為全連接層,將下一層的每個結點與上一層的每一節點相連,用來將前邊提取的特征綜合起來。具體如下:
則顯然可以得到:,其中
,
,
,
上面的公式進行轉置后,得到,
也就是將輸入和輸出向量都變成了行向量了。
在pytorch中,
實際上這里的x就是行向量,y也是行向量,A的行數與y(輸出)相關,列數與x(輸入)相關, b是一個行向量,與輸出維度有關。
這里可以看到,m作為一個全連接層,輸入為20維,輸出為30維,則可見A的規模為30x20(輸出規模x輸入規模),
input作為一個輸入矩陣,規模為128x20,這里可見一般在一個tensor中,feature都是行優先,
這樣的話,使用m作用到input上,規模為128x20x(20x30)---->128x30.? 即為示例中結果。
注意下圖A和b的維度。
以上的分析照應了torch.nn.functional.
linear的表達。
?
?