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

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

基于Pytorch,訓(xùn)練一個(gè)神經(jīng)網(wǎng)絡(luò)擬合正弦函數(shù)

2023-08-11 11:00 作者:小黑黑講AI  | 我要投稿

今天我們要討論的主題是,使用神經(jīng)網(wǎng)絡(luò)擬合正弦函數(shù)。

在這篇文章中,我們要基于Pytorch深度學(xué)習(xí)框架,實(shí)現(xiàn)一個(gè)純粹的前饋神經(jīng)網(wǎng)絡(luò)模型,并訓(xùn)練這個(gè)神經(jīng)網(wǎng)絡(luò),使它擬合出正弦函數(shù)。

希望能通過這篇文章,幫助同學(xué)們充分了解神經(jīng)網(wǎng)絡(luò)模型,并學(xué)會(huì)使用Pytorch深度學(xué)習(xí)框架,訓(xùn)練神經(jīng)網(wǎng)絡(luò)。


神經(jīng)網(wǎng)絡(luò)擬合正弦函數(shù)


正弦函數(shù)的圖像如下,函數(shù)輸入x,輸出y。我們要訓(xùn)練一個(gè)3層神經(jīng)網(wǎng)絡(luò),該網(wǎng)絡(luò)具有正弦函數(shù)的功能。當(dāng)向它輸入相同的x時(shí),會(huì)輸出與正弦函數(shù)相同的結(jié)果y。

具體來說,神經(jīng)網(wǎng)絡(luò)的輸入層有1個(gè)神經(jīng)元,接收x信號(hào),隱藏層有10個(gè)神經(jīng)元,生成模擬正弦函數(shù)的特征,輸出層有1個(gè)神經(jīng)元,輸出正弦結(jié)果。

下面我會(huì)重點(diǎn)講解兩個(gè)部分,分別是基于nn.Module定義神經(jīng)網(wǎng)絡(luò)模型與使用Adam優(yōu)化器迭代神經(jīng)網(wǎng)絡(luò)模型。


Pytorch的nn.Module模塊

nn.Module是PyTorch中最重要的類之一,它是構(gòu)建神經(jīng)網(wǎng)絡(luò)等各類模型的基類,我們可以將nn.Module看作是模型的框架。

?我們在實(shí)現(xiàn)自己的模型時(shí),需要繼承nn.Module類,并重新實(shí)現(xiàn)和覆蓋其中的一些方法。其中包括兩個(gè)重要的函數(shù),分別是init和forward函數(shù)。

?init方法會(huì)在創(chuàng)建類的新實(shí)例時(shí),被自動(dòng)調(diào)用。我們會(huì)在init方法中定義模型的層和參數(shù),比如線性層,激活函數(shù),卷積層等等。例如,這里的樣例代碼,就定義了兩個(gè)conv卷積層。

forward方法定義了輸入數(shù)據(jù)如何通過模型,或者說模型如何計(jì)算輸入數(shù)據(jù)。也就是,神經(jīng)網(wǎng)絡(luò)模型在進(jìn)行前向傳播時(shí)的具體操作。

例如,在這里的樣例代碼中,輸入數(shù)據(jù)x首先進(jìn)入conv1卷積層,然后計(jì)算relu激活函數(shù),接著進(jìn)入conv2卷積層并激活。


基于nn.Module模塊,實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)


接下來,我們基于nn.Module模塊,實(shí)現(xiàn)一個(gè)3層神經(jīng)網(wǎng)絡(luò)模型。

定義神經(jīng)網(wǎng)絡(luò)類Network,它繼承nn.Module類。實(shí)現(xiàn)類的初始化函數(shù)init,函數(shù)傳入?yún)?shù)n_in, n_hidden, n_out,代表輸入層、隱藏層和輸出層中的神經(jīng)元數(shù)量。

在init函數(shù)中,調(diào)用super.init,即調(diào)用了父類的初始化函數(shù)。它會(huì)確保我們的子類能夠正確地繼承父類的所有屬性和方法。

然后定義兩個(gè)線性層layer1和layer2,layer1是輸入層與隱藏層之間的線性層,layer2是隱藏層與輸出層之間的線性層。

在forward函數(shù)中,實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的前向傳播。函數(shù)傳入輸入數(shù)據(jù)x,先計(jì)算layer1的結(jié)果,并進(jìn)行sigmoid激活,再計(jì)算layer2的結(jié)果,并返回。


神經(jīng)網(wǎng)絡(luò)的反向傳播訓(xùn)練


神經(jīng)網(wǎng)絡(luò)的訓(xùn)練是反向傳播的。在訓(xùn)練的過程中,會(huì)基于梯度下降算法,不斷的調(diào)整神經(jīng)元的權(quán)重w和偏置b,使得神經(jīng)網(wǎng)絡(luò)的預(yù)測結(jié)果盡可能接近真實(shí)值。

在訓(xùn)練前,要設(shè)置一個(gè)損失函數(shù),該函數(shù)可以衡量神經(jīng)網(wǎng)絡(luò)的預(yù)測值和真實(shí)值之間的誤差。在擬合正弦函數(shù)的這個(gè)例子中,損失函數(shù)會(huì)設(shè)置為均方誤差函數(shù)。


在迭代的過程中,會(huì)計(jì)算損失函數(shù)關(guān)于參數(shù)w和b的梯度,然后按照梯度的反方向調(diào)整權(quán)重w和偏置b,進(jìn)而使得損失函數(shù)的值不斷減小。

最終在求得損失函數(shù)取得最小值時(shí),權(quán)重w和偏置b的取值,這樣就完成了模型的迭代。

關(guān)于如何計(jì)算梯度與如何實(shí)現(xiàn)梯度下降算法,在這里我們就不去深究了。因?yàn)閜ytorch框架會(huì)幫助我們解決這些問題。

接下來,我們要詳細(xì)的討論神經(jīng)網(wǎng)絡(luò)模型的訓(xùn)練過程。其中包括訓(xùn)練數(shù)據(jù)的生成、模型的迭代和結(jié)果的可視化輸出。


訓(xùn)練數(shù)據(jù)的生成


首先是訓(xùn)練數(shù)據(jù)的生成。使用np.arrange生成一個(gè)從0到1,步長為0.01,含有100個(gè)數(shù)據(jù)點(diǎn)的數(shù)組,作為正弦函數(shù)的輸入數(shù)據(jù),保存到x中。

將0到1的x,乘以2π,從單位間隔轉(zhuǎn)換為弧度值,也就是將x映射到正弦函數(shù)的一個(gè)完整周期上,并計(jì)算正弦值,保存到y(tǒng)中。

接著將x和y通過reshape函數(shù)轉(zhuǎn)為100乘1的數(shù)組,也就是100個(gè)(x, y)坐標(biāo),代表100個(gè)訓(xùn)練數(shù)據(jù)。將(x, y)組成的數(shù)據(jù)點(diǎn),畫在畫板上。這時(shí)運(yùn)行程序,會(huì)在畫板上出現(xiàn)正弦函數(shù)。


神經(jīng)網(wǎng)絡(luò)模型的訓(xùn)練


在訓(xùn)練前,需要將數(shù)據(jù)x和y轉(zhuǎn)化為tensor張量。然后定義一個(gè)3層的神經(jīng)網(wǎng)絡(luò)model。

其中輸入層接收信號(hào)x,包括1個(gè)神經(jīng)元,隱藏層中有10個(gè)神經(jīng)元,進(jìn)行特征提取。輸出層中有1個(gè)神經(jīng)元,輸出正弦函數(shù)的值。

接著創(chuàng)建均方誤差損失函數(shù)MSELoss和Adam優(yōu)化器optimizer。完成這些必要的變量聲明后,進(jìn)入神經(jīng)網(wǎng)絡(luò)模型的循環(huán)迭代。


這里我們設(shè)置迭代的輪數(shù)是10000。在循環(huán)中,使用當(dāng)前的模型,預(yù)測訓(xùn)練數(shù)據(jù)x,結(jié)果保存在y_pred中。這里即為前向傳播。

然后計(jì)算預(yù)測值y_pred與真實(shí)值y之間的損失loss。調(diào)用loss.backward,通過自動(dòng)微分計(jì)算損失函數(shù)關(guān)于模型參數(shù)的梯度。

調(diào)用optimizer.step,更新模型參數(shù),使得損失函數(shù)減小。調(diào)用zero_grad,將梯度清零,以便于下一次迭代。這實(shí)際上就是反向傳播。

模型的每一輪迭代,都由前向傳播和反向傳播共同組成。在迭代過程中,每1000次迭代,打印一次當(dāng)前的損失,共打印10次。其中l(wèi)oss.item是損失的標(biāo)量值。


完成訓(xùn)練后,使用模型預(yù)測輸入x,得到預(yù)測結(jié)果h,將預(yù)測點(diǎn)(x, h)打印在屏幕。運(yùn)行程序,會(huì)看到橙色的預(yù)測結(jié)果與藍(lán)色的真實(shí)結(jié)果幾乎重合。這說明神經(jīng)網(wǎng)絡(luò)模型很好的擬合了正弦函數(shù)。


另外,如果我們把迭代次數(shù)改為6000次,會(huì)發(fā)現(xiàn)模型沒有完全擬合,得到的橙色預(yù)測結(jié)果與藍(lán)色真實(shí)值相差就很大。

那么到這里,使用神經(jīng)網(wǎng)絡(luò)擬合正弦函數(shù)就講完了,感謝大家的觀看,我們下節(jié)課再會(huì)。


基于Pytorch,訓(xùn)練一個(gè)神經(jīng)網(wǎng)絡(luò)擬合正弦函數(shù)的評(píng)論 (共 條)

分享到微博請遵守國家法律
高密市| 辽宁省| 邢台市| 宝鸡市| 富锦市| 辰溪县| 青川县| 革吉县| 共和县| 永济市| 永泰县| 吉安市| 临沂市| 利津县| 南城县| 瑞金市| 嘉祥县| 德安县| 格尔木市| 旬阳县| 从江县| 呈贡县| 贡觉县| 宜宾市| 东兰县| 邵武市| 盘山县| 南投县| 赤水市| 吉安县| 山东省| 资兴市| 修水县| 兰西县| 北辰区| 会理县| 南京市| 西乡县| 南康市| 汪清县| 阳朔县|