为什么torch.nn.Linear的表达形式为y=xA^T+b而不是常见的y=Ax+b?
今天看代碼,對比了常見的公式表達與代碼的表達,發(fā)覺torch.nn.Linear的數(shù)學(xué)表達與我想象的有點不同,于是思索了一番。
眾多周知,torch.nn.Linear作為全連接層,將下一層的每個結(jié)點與上一層的每一節(jié)點相連,用來將前邊提取的特征綜合起來。具體如下:
則顯然可以得到:,其中
, ,,
上面的公式進行轉(zhuǎn)置后,得到,
也就是將輸入和輸出向量都變成了行向量了。
在pytorch中,
實際上這里的x就是行向量,y也是行向量,A的行數(shù)與y(輸出)相關(guān),列數(shù)與x(輸入)相關(guān), b是一個行向量,與輸出維度有關(guān)。
這里可以看到,m作為一個全連接層,輸入為20維,輸出為30維,則可見A的規(guī)模為30x20(輸出規(guī)模x輸入規(guī)模),
input作為一個輸入矩陣,規(guī)模為128x20,這里可見一般在一個tensor中,feature都是行優(yōu)先,
這樣的話,使用m作用到input上,規(guī)模為128x20x(20x30)---->128x30.? 即為示例中結(jié)果。
注意下圖A和b的維度。
以上的分析照應(yīng)了torch.nn.functional.linear的表達。
?
?
總結(jié)
以上是生活随笔為你收集整理的为什么torch.nn.Linear的表达形式为y=xA^T+b而不是常见的y=Ax+b?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gmssl java api_关于GmS
- 下一篇: java中线程池的几种实现方式