国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

PyTorch如何搭建一個簡單的網絡

瀏覽:2日期:2022-07-13 10:55:53

1 任務

首先說下我們要搭建的網絡要完成的學習任務: 讓我們的神經網絡學會邏輯異或運算,異或運算也就是俗稱的“相同取0,不同取1” 。再把我們的需求說的簡單一點,也就是我們需要搭建這樣一個神經網絡,讓我們在輸入(1,1)時輸出0,輸入(1,0)時輸出1(相同取0,不同取1),以此類推。

2 實現思路

因為我們的需求需要有兩個輸入,一個輸出,所以我們需要在輸入層設置兩個輸入節點,輸出層設置一個輸出節點。因為問題比較簡單,所以隱含層我們只需要設置10個節點就可以達到不錯的效果了,隱含層的激活函數我們采用ReLU函數,輸出層我們用Sigmoid函數,讓輸出保持在0到1的一個范圍,如果輸出大于0.5,即可讓輸出結果為1,小于0.5,讓輸出結果為0.

3 實現過程

我們使用的簡單的快速搭建法。

3.1 引入必要庫

import torchimport torch.nn as nnimport numpy as np

用pytorch當然要引入torch包,然后為了寫代碼方便將torch包里的nn用nn來代替,nn這個包就是neural network的縮寫,專門用來搭神經網絡的一個包。引入numpy是為了創建矩陣作為輸入。

3.2 創建訓練集

# 構建輸入集x = np.mat(’0 0;’ ’0 1;’ ’1 0;’ ’1 1’)x = torch.tensor(x).float()y = np.mat(’1;’ ’0;’ ’0;’ ’1’)y = torch.tensor(y).float()

我個人比較喜歡用np.mat這種方式構建矩陣,感覺寫法比較簡單,當然你也可以用其他的方法。但是構建完矩陣一定要有這一步 torch.tensor(x).float() ,必須要把你所創建的輸入轉換成tensor變量。

什么是tensor呢?你可以簡單地理解他就是pytorch中用的一種變量,你想用pytorch這個框架就必須先把你的變量轉換成tensor變量。而我們這個神經網絡會要求你的輸入和輸出必須是float浮點型的,指的是tensor變量中的浮點型,而你用np.mat創建的輸入是int型的,轉換成tensor也會自動地轉換成tensor的int型,所以要在后面加個.float()轉換成浮點型。

這樣我們就構建完成了輸入和輸出(分別是x矩陣和y矩陣),x是四行二列的一個矩陣,他的每一行是一個輸入,一次輸入兩個值,這里我們把所有的輸入情況都列了出來。輸出y是一個四行一列的矩陣,每一行都是一個輸出,對應x矩陣每一行的輸入。

3.3 搭建網絡

myNet = nn.Sequential( nn.Linear(2,10), nn.ReLU(), nn.Linear(10,1), nn.Sigmoid() )print(myNet)

輸出結果:

PyTorch如何搭建一個簡單的網絡

我們使用nn包中的Sequential搭建網絡,這個函數就是那個可以讓我們像搭積木一樣搭神經網絡的一個東西。

nn.Linear(2,10)的意思搭建輸入層,里面的2代表輸入節點個數,10代表輸出節點個數。Linear也就是英文的線性,意思也就是這層不包括任何其它的激活函數,你輸入了啥他就給你輸出了啥。nn.ReLU()這個就代表把一個激活函數層,把你剛才的輸入扔到了ReLU函數中去。 接著又來了一個Linear,最后再扔到Sigmoid函數中去。 2,10,1就分別代表了三個層的個數,簡單明了。

3.4 設置優化器

optimzer = torch.optim.SGD(myNet.parameters(),lr=0.05)loss_func = nn.MSELoss()

對這一步的理解就是,你需要有一個優化的方法來訓練你的網絡,所以這步設置了我們所要采用的優化方法。

torch.optim.SGD的意思就是采用SGD(隨機梯度下降)方法訓練,你只需要把你網絡的參數和學習率傳進去就可以了,分別是 myNet.paramets 和 lr 。 loss_func 這句設置了代價函數,因為我們的這個問題比較簡單,所以采用了MSE,也就是均方誤差代價函數。

3.5 訓練網絡

for epoch in range(5000): out = myNet(x) loss = loss_func(out,y) optimzer.zero_grad() loss.backward() optimzer.step()

我這里設置了一個5000次的循環(可能不需要這么多次),讓這個訓練的動作迭代5000次。每一次的輸出直接用myNet(x),把輸入扔進你的網絡就得到了輸出out(就是這么簡單粗暴!),然后用代價函數和你的標準輸出y求誤差。 清除梯度的那一步是為了每一次重新迭代時清除上一次所求出的梯度,你就把這一步記住就行,初學不用理解太深。 loss.backward() 當然就是讓誤差反向傳播,接著 optimzer.step() 也就是讓我們剛剛設置的優化器開始工作。

3.6 測試

print(myNet(x).data)

運行結果:

PyTorch如何搭建一個簡單的網絡

可以看到這個結果已經非常接近我們期待的結果了,當然你也可以換個數據測試,結果也會是相似的。這里簡單解釋下為什么我們的代碼末尾加上了一個.data,因為我們的tensor變量其實是包含兩個部分的,一部分是tensor數據,另一部分是tensor的自動求導參數,我們加上.data意思是輸出取tensor中的數據,如果不加的話會輸出下面這樣:

PyTorch如何搭建一個簡單的網絡

以上就是PyTorch如何搭建一個簡單的網絡的詳細內容,更多關于PyTorch搭建網絡的資料請關注好吧啦網其它相關文章!

標簽: PyTorch
相關文章:
主站蜘蛛池模板: 成人国产精品免费软件 | 欧美高清免费一级在线 | 久草精品视频 | 成 人免费视频l免费观看 | 国产亚洲精品一区二区在线观看 | 暖暖视频日韩欧美在线观看 | 清纯唯美综合网 | 在线成人a毛片免费播放 | a级日韩乱理伦片在线观看 a级特黄毛片免费观看 | 日韩中文字幕精品一区在线 | 成人黄色一级视频 | 国产高清精品在线 | 欧美国产一区二区 | α片毛片 | 三级韩国一区久久二区综合 | 亚洲小视频在线播放 | 色黄啪啪18周岁以下禁止观看 | 国产成人精品久久综合 | 欧美成人午夜视频免看 | 久久久美女视频 | 免费视频精品一区二区三区 | 国产一区二区三区在线看 | 欧美国产91 | 男人天堂久久 | 精品国产系列 | 日韩天天干 | 欧美色成人 | 免费在线观看亚洲 | 日韩欧美一区二区三区免费看 | 深夜爽爽福利gif在线观看 | 一级做a毛片免费视频 | 国产欧美日韩高清专区手机版 | 欧美另类自拍 | 日本免费一二区视频 | 国产成人a福利在线观看 | xxx本日| 另类视频在线观看 | 91热久久免费频精品动漫99 | 日本在线理论片 | 中文字幕一区二区三区久久网站 | 亚洲一区二区影院 |