欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

pytorch教程之網(wǎng)絡(luò)的構(gòu)建流程筆記

 更新時(shí)間:2021年09月07日 11:04:17   作者:xz1308579340  
這篇文章主要介紹了pytorch教程中網(wǎng)絡(luò)的構(gòu)建流程,文中附含了詳細(xì)的示例代碼流程,有需要的朋友可以借鑒參考下,希望可以有所幫助

參考網(wǎng)址

構(gòu)建網(wǎng)絡(luò)

我們可以通過(guò)torch.nn包來(lái)構(gòu)建網(wǎng)絡(luò),現(xiàn)在你已經(jīng)看過(guò)了autograd,nn在autograd的基礎(chǔ)上定義模型和求微分。一個(gè)nn.Module包括很多層,forward方法返回output。

一個(gè)典型的訓(xùn)練過(guò)程包括這么幾步:
1.定義一個(gè)網(wǎng)絡(luò)結(jié)構(gòu)包含一些可訓(xùn)練的額參數(shù)
2.為數(shù)據(jù)集制定輸入iterata
3.通過(guò)網(wǎng)絡(luò)計(jì)算Output
4.計(jì)算loss
5.反向傳播計(jì)算梯度
6.更新權(quán)值

weight = weight - learning_rate * gradient

定義一個(gè)網(wǎng)絡(luò)

讓我們來(lái)定義一個(gè)網(wǎng)絡(luò)

import torch
import torch as nn
import torch.nn.functional as F
class Net(nn.Module):
    def __init__(self):
        super(Net,self).__init__(
        #1 input image channel ,6output image channel ,5*5convolytion kernel
        self.conv1 = nn.Conv2d(1,6,5)
        self.conv2 = nn.Conv2d(6,16,5)
        # an affine operation:y = Wx+b
        self.fc1 = nn.Linear(16*5*5,120)
        self.fc2 = nn.Linear(120,84)
        self.fc3 = nn.Linear(84,10)
    def forward(self,x):
        #max pooling
        x.F.max_pool2d(F.relu(self.conv1(x)),(2,2))
        #2   =    (2,2)
        x.F.max_pool2d(F.relu(self.con2(x)),2)
        x = x.view(-1,self.num_flat_features(x))
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return  x
    def num_flat_features(self,x):
        size = x.size()[1:]
        num_feature = 1
        for s in size:
            num_features *=s
        return num_features

net = Net()
print(net)      

out

Net(
  (conv1): Conv2d(1, 6, kernel_size=(5, 5), stride=(1, 1))
  (conv2): Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1))
  (fc1): Linear(in_features=400, out_features=120, bias=True)
  (fc2): Linear(in_features=120, out_features=84, bias=True)
  (fc3): Linear(in_features=84, out_features=10, bias=True)
)

我們只需定義forward和backward函數(shù),會(huì)自動(dòng)求導(dǎo)通過(guò)你定義的函數(shù),你可以使用所有的Tensor操作在forward函數(shù)中。
我們使用net.parameters()函數(shù)返回可學(xué)習(xí)的參數(shù)

params = list(net.parameters())
print(len(params))
print(params[0].size())  # conv1's .weight

out

10
torch.Size([6, 1, 5, 5])

讓我們?cè)囋?2*32的輸入節(jié)點(diǎn),因?yàn)閘enet網(wǎng)絡(luò)的輸入應(yīng)該是32*32,為了在MNIST數(shù)據(jù)集上使用lenet我們需要將圖片reshpe成32*32

input = torch.randn(1,1,32,32)
oyt = net(input)
print(out)

out

tensor([[-0.1346,  0.0581, -0.0396, -0.1136, -0.1128,  0.0180, -0.1226,
         -0.0419, -0.1150,  0.0278]])

零化導(dǎo)數(shù)buffers所有的參數(shù)都會(huì)隨機(jī)求導(dǎo)

net.zero_grad()
out.backward(torch.randn(1,10))

torch.nn只支持mini-batch,而不是單個(gè)的樣本
例如,nn.Conv2d輸入是一個(gè)4維tensors

nSamples * nChannels * Height * Width

如果你只有單個(gè)的樣本,使用input.unsqueeze(0)增加一個(gè)假的batch維度
在后處理之前,讓我們看看都學(xué)過(guò)什么類(lèi)

Recap:

torch.Tensor - A multi-dimensional array with support for autograd operations like backward(). Also holds the gradient w.r.t. the tensor.
nn.Module - Neural network module. Convenient way of encapsulating parameters, with helpers for moving them to GPU, exporting, loading, etc.
nn.Parameter - A kind of Tensor, that is automatically registered as a parameter when assigned as an attribute to a Module.
autograd.Function - Implements forward and backward definitions of an autograd operation. Every Tensor operation, creates at least a single Function node, that connects to functions that created a Tensor and encodes its history.

目前,我們學(xué)習(xí)了:
1.定義一個(gè)神經(jīng)網(wǎng)絡(luò)
2.處理輸入和使用后向傳播
我們還需要學(xué)習(xí):
1.計(jì)算loss
2.更新權(quán)值

loss Function

Loss function接受(output traget)對(duì)作為輸入,計(jì)算一個(gè)反映到目標(biāo)距離的值。
在nn這個(gè)包里面有很多l(xiāng)oss function ,最簡(jiǎn)單的是nn.MSELoss,就是那輸入與輸出的均方誤差。

舉個(gè)例子

output = net(input)
target = torch.arrange(1,11)
target = target.view(1m-1)
criterion = nn.MSELoss()
loss = criterion(output,target)
print(loss)

Out:

tensor(39.1076)

Backprop

為了反向傳播我們需要做的僅僅是進(jìn)行l(wèi)oss.backward(),我們需要清除現(xiàn)有的梯度

更新權(quán)值

最簡(jiǎn)單常用的更新權(quán)值的方法就是SGD(Stochastic Gradient Descent )

weight = weight - learning_rata * gradiernt

我們可以通過(guò)簡(jiǎn)單的代碼實(shí)現(xiàn)上面的公式:

learning_rata = 0.01
for f in net.parameters():
    f.data.sib_(f.grad.data *  learining_rata)

但是我們也可以使用不同的更新規(guī)則,像是 SGD, Nesterov-SGD, Adam, RMSProp, etc.
為了使用這些,我們需要torch.optim包,使用起來(lái)也很簡(jiǎn)單。

import torch.optim as optim 
#creat you optimizer
optimizer = optim.SGD(net.parameters(),lr = 0.01)
#in your training loop:
optimizer.zero_grad()
output = net(input)
loss = criterion(output,target)
loss.backward()
optimizer.step()

注意gradient必須清零
現(xiàn)在我們調(diào)用loss.backward(),并且看看con1的bias的前后差別

ner.zero_grad()
print('conv1.bias.grad before backward')
loss.backward()
print('conv1.bias.grad after backward')
piint(net.conv1.bias.grad)

out

conv1.bias.grad before backward
tensor([ 0.,  0.,  0.,  0.,  0.,  0.])
conv1.bias.grad after backward
tensor([ 0.1178, -0.0404, -0.0810,  0.0363, -0.0631,  0.1423])

現(xiàn)在,我們看到了如何使用loss function
重要
torch包含很多的loss function和其他包,其余的文檔可以看這里
http://pytorch.org/docs/nn

以上就是pytorch教程之網(wǎng)絡(luò)的構(gòu)建流程筆記的詳細(xì)內(nèi)容,更多關(guān)于pytorch教程的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python 安裝教程之Pycharm安裝及配置字體主題,換行,自動(dòng)更新

    python 安裝教程之Pycharm安裝及配置字體主題,換行,自動(dòng)更新

    這篇文章主要介紹了python 安裝教程之Pycharm安裝及配置字體主題,換行,自動(dòng)更新,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Python實(shí)現(xiàn)消消樂(lè)小游戲

    Python實(shí)現(xiàn)消消樂(lè)小游戲

    本文主要介紹了Python實(shí)現(xiàn)消消樂(lè)小游戲,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • python和ruby,我選誰(shuí)?

    python和ruby,我選誰(shuí)?

    本文給大家對(duì)比了下python和Ruby的異同以及各自的優(yōu)缺點(diǎn)等,向大家展示了python與Ruby的資源以及學(xué)習(xí)曲線,非常適合在此兩種語(yǔ)言中猶豫不決的小伙伴,希望大家能夠喜歡
    2017-09-09
  • Python求最小公倍數(shù)4種方法總結(jié)

    Python求最小公倍數(shù)4種方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于Python求最小公倍數(shù)4種方法的相關(guān)資料,最小公倍數(shù)不可以像最大公約數(shù)那樣直接利用輾轉(zhuǎn)相除法求出,但可以借助輾轉(zhuǎn)相除法求得的最大公約數(shù)來(lái)求最小公倍數(shù),需要的朋友可以參考下
    2023-10-10
  • 解決python路徑錯(cuò)誤,運(yùn)行.py文件,找不到路徑的問(wèn)題

    解決python路徑錯(cuò)誤,運(yùn)行.py文件,找不到路徑的問(wèn)題

    這篇文章主要介紹了解決python路徑錯(cuò)誤,運(yùn)行.py文件,找不到路徑的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • Pytorch中的variable, tensor與numpy相互轉(zhuǎn)化的方法

    Pytorch中的variable, tensor與numpy相互轉(zhuǎn)化的方法

    這篇文章主要介紹了Pytorch中的variable, tensor與numpy相互轉(zhuǎn)化的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Python+selenium實(shí)現(xiàn)瀏覽器基本操作詳解

    Python+selenium實(shí)現(xiàn)瀏覽器基本操作詳解

    這篇文章主要為大家詳細(xì)介紹了如何通過(guò)python腳本實(shí)現(xiàn)瀏覽器的一些基本操作,如:瀏覽器的前進(jìn)后退、頁(yè)面刷新等,感興趣的可以學(xué)習(xí)一下
    2022-06-06
  • 分享Python開(kāi)發(fā)中要注意的十個(gè)小貼士

    分享Python開(kāi)發(fā)中要注意的十個(gè)小貼士

    不管是python開(kāi)發(fā)還是其他什么語(yǔ)言的開(kāi)發(fā),如果在開(kāi)發(fā)中我們能掌握一些有用的貼士和技巧,那么肯定會(huì)大大提高我們的開(kāi)發(fā)效率,今天小編和大家分享的就是python開(kāi)發(fā)中,一些初學(xué)這門(mén)語(yǔ)言常常會(huì)犯的錯(cuò)誤,一起來(lái)看看吧。
    2016-08-08
  • 一文詳解NumPy分割與搜索數(shù)組

    一文詳解NumPy分割與搜索數(shù)組

    NumPy 提供了 np.array_split() 函數(shù)來(lái)分割數(shù)組,將一個(gè)數(shù)組拆分成多個(gè)較小的子數(shù)組和提供了多種方法來(lái)搜索數(shù)組中的元素,并返回匹配項(xiàng)的索引,本文將給大家詳細(xì)介紹NumPy分割與搜索數(shù)組,需要的朋友可以參考下
    2024-05-05
  • 在langchain中對(duì)大模型的輸出進(jìn)行格式化實(shí)現(xiàn)

    在langchain中對(duì)大模型的輸出進(jìn)行格式化實(shí)現(xiàn)

    這篇文章主要為大家介紹了在langchain中對(duì)大模型的輸出進(jìn)行格式化實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11

最新評(píng)論