五月综合激情婷婷六月,日韩欧美国产一区不卡,他扒开我内裤强吻我下面视频 ,无套内射无矿码免费看黄,天天躁,日日躁,狠狠躁

新聞動態(tài)

pytorch教程之網絡的構建流程筆記

發(fā)布日期:2022-01-21 08:54 | 文章來源:源碼之家

參考網址

構建網絡

我們可以通過torch.nn包來構建網絡,現在你已經看過了autograd,nn在autograd的基礎上定義模型和求微分。一個nn.Module包括很多層,forward方法返回output。

一個典型的訓練過程包括這么幾步:
1.定義一個網絡結構包含一些可訓練的額參數
2.為數據集制定輸入iterata
3.通過網絡計算Output
4.計算loss
5.反向傳播計算梯度
6.更新權值

weight = weight - learning_rate * gradient

定義一個網絡

讓我們來定義一個網絡

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函數,會自動求導通過你定義的函數,你可以使用所有的Tensor操作在forward函數中。
我們使用net.parameters()函數返回可學習的參數

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

out

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

讓我們試試32*32的輸入節(jié)點,因為lenet網絡的輸入應該是32*32,為了在MNIST數據集上使用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]])

零化導數buffers所有的參數都會隨機求導

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

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

nSamples * nChannels * Height * Width

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

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.

目前,我們學習了:
1.定義一個神經網絡
2.處理輸入和使用后向傳播
我們還需要學習:
1.計算loss
2.更新權值

loss Function

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

舉個例子

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

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

更新權值

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

weight = weight - learning_rata * gradiernt

我們可以通過簡單的代碼實現上面的公式:

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包,使用起來也很簡單。

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必須清零
現在我們調用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])

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

以上就是pytorch教程之網絡的構建流程筆記的詳細內容,更多關于pytorch教程的資料請關注本站其它相關文章!

版權聲明:本站文章來源標注為YINGSOO的內容版權均為本站所有,歡迎引用、轉載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網站,禁止在非maisonbaluchon.cn所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內容來源于網友推薦、互聯網收集整理而來,僅供學習參考,不代表本站立場,如有內容涉嫌侵權,請聯系alex-e#qq.com處理。

相關文章

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務

7x24全年不間斷在線

專屬顧問服務

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務熱線

關注
微信

關注官方微信
頂部