最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

AI入門必讀|Pytorch神經(jīng)網(wǎng)絡(luò)設(shè)計的基本概念綜述

2021-07-27 11:26 作者:深度之眼官方賬號  | 我要投稿

眾所周知,Pytorch是Facebook的AI研究實驗室于2016年開發(fā)的深度學(xué)習(xí)框架。它以面向計算機視覺的應(yīng)用程序而廣為人知,特點是簡單,還有強大的GPU支持,能夠?qū)崿F(xiàn)深度學(xué)習(xí)算法。

本篇文章將會通過示例實現(xiàn)使pytorch更直觀更易懂,將簡單直觀地展示開始構(gòu)建神經(jīng)網(wǎng)絡(luò)之前需要了解的將要用到的知識點。


01?張量


張量是表示多維數(shù)組的Pytorch對象,它類似于NumPy的數(shù)組,為了更好地理解構(gòu)造張量的主要函數(shù),我們同時會用Numpy來舉例,以證明二者的邏輯是相同的。


Numpy和Pytorch使用許多類似的函數(shù)來創(chuàng)建矩陣:

  • randn 創(chuàng)建隨機矩陣

  • zeros 構(gòu)建填充零的矩陣

  • ones 返回矩陣

在構(gòu)建單位矩陣的函數(shù)有一個不同點,就是Pytorch使用該函數(shù)eye,而NumPy使用該函數(shù)identity。


02 矩陣乘法


在訓(xùn)練神經(jīng)網(wǎng)絡(luò)的模型時,有多種矩陣乘法可用,接下來將展示兩種乘法。


在NumPy中,函數(shù)dot和matmul用于兩個矩陣之間的乘積。如果不想使用這些函數(shù),可使用@運算符替代。


Pytorch具有與NumPy中的matmul相同的功能。另一個選擇可以是torch.mm,它們之間的區(qū)別是torch.mm不支持廣播。


在逐元素乘法的情況下,NumPy使用multiply,而Pytorch使用簡單運算符*。


03 從Pytorch到NumPy,反之亦然


numpy數(shù)組可以使用from_numpy函數(shù)轉(zhuǎn)換為張量,相反也可以通過函數(shù)numpy完成。


04 Autograd中的差異化


導(dǎo)數(shù)構(gòu)成神經(jīng)網(wǎng)絡(luò)的基本方面,事實上,梯度下降算法使用導(dǎo)數(shù)來學(xué)習(xí)模型。這個算法的目標是最小化損失函數(shù)J。然后參數(shù)的值會發(fā)生變化,直到我們沒有得到J的最優(yōu)值。這個方法的著名更新規(guī)則是:


w = w - learning rate * dJ(w)/dw

b = b - learning rate * dJ(b)/db


此規(guī)則說明學(xué)習(xí)更快或更慢取決于兩個特點,learning rate和derivative對所考慮的參數(shù)w或b的導(dǎo)數(shù)。這里集中討論導(dǎo)數(shù)的概念。


這是什么意思?


它表示函數(shù)的斜率,當導(dǎo)數(shù)的值很高時,函數(shù)變化很快,而當它接近0時,函數(shù)沒有變化,這可能是神經(jīng)網(wǎng)絡(luò)環(huán)境中學(xué)習(xí)的一個問題。在這個例子中,我比較了一條直線、一條拋物線和一條雙曲線。




與拋物線和雙曲線相比,直線具有較小的導(dǎo)數(shù),而拋物線和雙曲線具有較高的值??梢杂^察到,拋物線的值是直線值的4倍,而雙曲線的值是拋物線值的3倍,所以變化比拋物線快3倍。


05 單層神經(jīng)網(wǎng)絡(luò)


在神經(jīng)網(wǎng)絡(luò)中,數(shù)據(jù)集中的每個特征列都表示為一個輸入神經(jīng)元,而每個加權(quán)值表示為從特征列到輸出神經(jīng)元的箭頭。我們將特征乘以權(quán)重,然后對它們求和,然后添加一個偏差并將其傳遞給激活函數(shù)。這樣,我們就得到了網(wǎng)絡(luò)的輸出。

例如,如果我們有一個一行 10 列的輸入向量,我們將有 10 個神經(jīng)元。



在數(shù)學(xué)上,它看起來像:

z = w? x? + … + w?? x?? + b

y = a(z) = a(w? x? + … + w?? x?? + b)

在代碼中,我通過matmul函數(shù)創(chuàng)建了一個輸入向量,該向量用于從均值為 0 且方差為 1 的正態(tài)分布創(chuàng)建填充隨機數(shù)的矩陣。


加權(quán)矩陣將具有與輸入相同的大小,但具有不同的值。偏差由正態(tài)分布的單個值組成。我們可以使用matmul在輸入和權(quán)重之間進行矩陣乘法,然后我們可以應(yīng)用激活函數(shù)sigm(稱為 sigmoid)來映射 0 和 1 之間的任何值。




代碼返回錯誤。當您訓(xùn)練神經(jīng)網(wǎng)絡(luò)時出現(xiàn)此類錯誤是很常見的。這是因為輸入的列數(shù)不等于 w1 的行數(shù)。為了解決這個問題,我們需要改變權(quán)重的形狀。在 Pytorch 中有三種方法可以做到:

  • w1.reshape(10,1) 返回一個新的張量,其數(shù)據(jù)與 w1 相同,但形狀為 (10,1)

  • w1.view(10,1) 返回一個與 w1 具有相同數(shù)據(jù)和不同形狀 (10,1) 的新張量。

  • w1.resize_(10,1)返回具有不同形狀的相同張量 (10,1)


06 簡單神經(jīng)網(wǎng)絡(luò)


最簡單的神經(jīng)網(wǎng)絡(luò)模型,稱為全連接網(wǎng)絡(luò)。一層中的每個神經(jīng)元都與下一層中的每個神經(jīng)元相連。

下面考慮的架構(gòu)具有一個輸出層、兩個隱藏層和一個輸出層。和以前一樣,我們使用函數(shù) 獲得輸入、權(quán)重和偏差randn。我們不是只對一層進行計算,而是對每一層進行計算。


如何定義一個類,該類定義了 Network 并從nn.Module. 全連接層是通過 構(gòu)建的nn.Linear(in_features,ou_features)。第一個參數(shù)是輸入單元的數(shù)量,而第二個參數(shù)是輸出單元的數(shù)量。


文章中用到的代碼在github:

https://github.com/eugeniaring/Pytorch-tutorial/blob/main/pytorch-for-beginners.ipynb

參考文檔:

https://pub.towardsai.net/pytorch-tutorial-for-beginners-8331afc552c4#c495


如果發(fā)現(xiàn)教程里面有翻譯錯誤問題

可以私聊學(xué)姐指出哈~

有任何學(xué)習(xí)上的問題都

可以來微信公眾號練習(xí)學(xué)姐解決!


點贊轉(zhuǎn)發(fā),鼓勵一下學(xué)姐!



AI入門必讀|Pytorch神經(jīng)網(wǎng)絡(luò)設(shè)計的基本概念綜述的評論 (共 條)

分享到微博請遵守國家法律
永宁县| 五家渠市| 乐昌市| 安陆市| 桂平市| 舟曲县| 金川县| 洛阳市| 郎溪县| 景泰县| 东阳市| 墨竹工卡县| 鄂尔多斯市| 乌审旗| 确山县| 宝山区| 临澧县| 龙井市| 惠来县| 上虞市| 中方县| 敖汉旗| 西畴县| 汤阴县| 沂源县| 惠东县| 和平区| 梨树县| 阜新市| 德化县| 柘荣县| 东阿县| 康马县| 卢湾区| 阿拉善右旗| 石家庄市| 竹北市| 吉木乃县| 台中市| 冕宁县| 衡山县|