日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

PyTorch框架:(3)使用PyTorch框架构构建神经网络分类任务

發(fā)布時(shí)間:2023/11/27 生活经验 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PyTorch框架:(3)使用PyTorch框架构构建神经网络分类任务 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

0、背景

1、分類任務(wù)介紹:

?2、網(wǎng)絡(luò)架構(gòu)

?3、手寫網(wǎng)絡(luò)

3.1、讀取數(shù)據(jù)集

3.2、查看數(shù)據(jù)集

3.3將x和y轉(zhuǎn)換成tensor的格式

3.4、定義model


0、背景

其實(shí)分類和回歸本質(zhì)上沒有太大區(qū)別,只是說最終得到的結(jié)果是不同的,以及使用的損失函數(shù)是不同的,中間的網(wǎng)絡(luò)架構(gòu)相對(duì)于來說是比較固定的。

1、分類任務(wù)介紹:

?分類任務(wù)中標(biāo)簽的設(shè)計(jì)稍微不同,比如上圖中的9他預(yù)測出來就是123456789中的哪一個(gè),不是這樣的,而是我們的標(biāo)簽他也是一個(gè)one_hot encoding的編碼,這個(gè)one_hot encoding的編碼我們要得到的最終他預(yù)測的一個(gè)結(jié)果不是一個(gè)值而是10個(gè)值(0到9這10個(gè)數(shù)),我們得到的是當(dāng)前這個(gè)輸入它屬于0到9各自的可能性(比如上圖0.12表示屬于1的概率是12%,屬于9的概率是87%);最終在分類任務(wù)當(dāng)中得到的一個(gè)結(jié)果是:比如說你做10分類,最終得到的結(jié)果是10個(gè)概率值,表示他分別屬于每一個(gè)類的概率值,那么100分類的話就會(huì)得到100個(gè)概率值,這個(gè)就是基于當(dāng)前輸入,得到我最終結(jié)果的一個(gè)過程。結(jié)果是這樣的概率值,所以標(biāo)簽我得是跟結(jié)果一致的條件才行,如果說在這里我們拿到的標(biāo)簽他不是一個(gè)50000x10的,需要再把它做一個(gè)one_hot encoding,對(duì)標(biāo)簽來說是一樣的,如果標(biāo)簽是9的話,那我one_hot encoding就是(0000000001),所以意思就是我們的結(jié)果是one_hot encoding編碼那么我們的標(biāo)簽也要相應(yīng)的轉(zhuǎn)化成one_hot encoding編碼的形式。

?2、網(wǎng)絡(luò)架構(gòu)

?3、手寫網(wǎng)絡(luò)

3.1、讀取數(shù)據(jù)集

?

會(huì)判斷你有沒有下載過Mnist數(shù)據(jù)集,如果沒下載過,他會(huì)自動(dòng)幫你下載。

?解壓文件。

3.2、查看數(shù)據(jù)集

?讀進(jìn)來一張圖像,50000是樣本數(shù),784=28x28x1=h x w x c(長寬高和顏色通道),Mnist數(shù)據(jù)集是黑白圖,他只有一個(gè)顏色通道,可以把784當(dāng)做特征數(shù)。

3.3將x和y轉(zhuǎn)換成tensor的格式

3.4、定義model

介紹functional的方法:

有時(shí)間使用nn.Module,有時(shí)間使用nn.functional的方法?Module里邊有的,functional里邊也有,如何選擇??

所以一般是模型中有帶學(xué)習(xí)參數(shù)的,比如說一些卷積層和一些全連接層,但凡帶參數(shù)的我們使用nn.Module;一些激活函數(shù)或者是一些損失函數(shù),但凡這些不帶參數(shù)的沒有w和b的我們就用nn.functional里邊的方法,這樣更直接一些。

?分類問題一般使用交叉熵?fù)p失函數(shù),所以這里直接調(diào)用functional里邊的cross_entropy(所以這里就是在functional當(dāng)中有很多不帶參數(shù)類似于激活函數(shù),損失函數(shù)這些都是直接拿functiuonal當(dāng)中的直接調(diào)用)。

指定batch_size=64,將x_batch和y_batch全部取出來,定義偏執(zhí)參數(shù)。然后就是如何得到一個(gè)損失值,直接把loss_func拿到手,里邊需要傳進(jìn)來的是當(dāng)前的一個(gè)預(yù)測值和標(biāo)簽值,定義的model函數(shù)就是預(yù)測值,yb就是標(biāo)簽值,預(yù)測和標(biāo)簽都有了就可以得到他實(shí)際的損失值,所以通過function當(dāng)中調(diào)用的一些函數(shù),我們是可以直接拿過來進(jìn)行計(jì)算的。

介紹Module的方法:?

這個(gè)方法用的比較多,在一些正規(guī)的項(xiàng)目或者是比較大型的項(xiàng)目中用的比較多,比如是這樣構(gòu)建自己的網(wǎng)絡(luò)的:

?

?先把nn導(dǎo)進(jìn)來,定義一個(gè)類構(gòu)建自己的網(wǎng)絡(luò),一定要去繼承不只是光定義一個(gè)類,繼承的就是你導(dǎo)進(jìn)來的nn,nn.module一定要去繼承,不做繼承后邊寫的東西都沒用,都白寫,因?yàn)楹芏嗪诵墓δ芏际窃谶@個(gè)里邊寫好了,我們直接繼承過來就行了,不光要去繼承,還得把他的構(gòu)造函數(shù)給拿出來,先定義一個(gè)方法def __init__(self),里邊繼承一下人家的構(gòu)造函數(shù),super.__init__(),接下來定義自己的模塊,隱層和輸出層,這里邊只是定義有哪些層,我們一會(huì)是要用到,。

用到的時(shí)候怎么用,就要下邊再寫一個(gè)方法,再定義一個(gè)forward方法,forward方法的意思就是在這里你不用去寫反向傳播了,反向傳播是pytorch框架人家自動(dòng)幫你去做的,只要你把前向傳播定義好,整個(gè)網(wǎng)絡(luò)圖就有了,有了網(wǎng)絡(luò)圖之后,人家會(huì)自動(dòng)的幫你計(jì)算反向傳播,所以這里不用麻煩的再寫一個(gè)反向傳播,只用寫一個(gè)前向傳播就可以了,def forward(self,x)前向傳播里邊有一個(gè)輸入,這些參數(shù)可以隨意寫,有哪些輸入,這里有了輸入,先通過哪個(gè)層就是我們之前定義的層,第一個(gè)是定義的hidden層,x輸入進(jìn)去傳進(jìn)到hidden層,調(diào)用F里邊的激活函數(shù);將第一個(gè)隱層結(jié)果傳入到第二個(gè)隱層,第三步再傳到我的輸出層得到最終的一個(gè)結(jié)果,再把結(jié)果return回去就可以了。

PS:實(shí)際在做神經(jīng)網(wǎng)絡(luò)或者模型的時(shí)候,最主流的方法就是我自己定義一個(gè)類,在這個(gè)類里邊繼承nn.Module模塊,寫好繼承構(gòu)造函數(shù),然后寫好有哪些層,這是初始化方法;初始完之后,寫一個(gè)前向傳播,前向傳播里邊寫一個(gè)輸入,基于輸入一步步的去走,看得到的結(jié)果,然后返回回去就完事了,這個(gè)就是前向傳播,反向傳播我們不用自己去寫,它會(huì)自動(dòng)的幫我們完成這樣一件事;

定義完網(wǎng)絡(luò)之后,我們可以查看這個(gè)網(wǎng)絡(luò)里邊都有什么東西,所以首先把這個(gè)類給他實(shí)例化出來,net表示我們剛才構(gòu)造好的這個(gè)網(wǎng)絡(luò),打印net看一下。

? net是定義好的網(wǎng)絡(luò),寫一個(gè)循環(huán)展示一下網(wǎng)絡(luò)當(dāng)前的名字以及參數(shù),把所有的參數(shù)全部進(jìn)行一個(gè)打印:(所以可以看出我們定義好net網(wǎng)絡(luò)之后,人家已經(jīng)自動(dòng)的幫我們初始化了w和b)

?

?

?

?---------------------上述就是如何去構(gòu)建一個(gè)網(wǎng)絡(luò)--------?

總結(jié)

以上是生活随笔為你收集整理的PyTorch框架:(3)使用PyTorch框架构构建神经网络分类任务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。