自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

PyTorch的4分鐘教程,手把手教你完成線性回歸

人工智能 深度學(xué)習(xí)
本文旨在介紹PyTorch基礎(chǔ)部分,幫助新手在4分鐘內(nèi)實(shí)現(xiàn)python PyTorch代碼的初步編寫。

[[271978]]

大數(shù)據(jù)文摘出品

編譯:洪穎菲、寧靜

PyTorch深度學(xué)習(xí)框架庫之一,是來自Facebook的開源深度學(xué)習(xí)平臺,提供研究原型到生產(chǎn)部署的無縫銜接。

本文旨在介紹PyTorch基礎(chǔ)部分,幫助新手在4分鐘內(nèi)實(shí)現(xiàn)python PyTorch代碼的初步編寫。

下文出現(xiàn)的所有功能函數(shù),均可以在中文文檔中查看具體參數(shù)和實(shí)現(xiàn)細(xì)節(jié),先附上pytorch中文文檔鏈接:

https://pytorch-cn.readthedocs.io/zh/latest/package_references/torch/

coding前的準(zhǔn)備

需要在電腦上安裝Python包,導(dǎo)入一些科學(xué)計(jì)算包,如:numpy等,最最重要的,別忘記導(dǎo)入PyTorch,下文的運(yùn)行結(jié)果均是在jupyter notebook上得到的,感興趣的讀者可以自行下載Anaconda,里面自帶有jupyter notebook。(注:Anaconda支持python多個(gè)版本的虛擬編譯環(huán)境,jupyter notebook是一個(gè)web形式的編譯界面,將代碼分割成一個(gè)個(gè)的cell,可以實(shí)時(shí)看到運(yùn)行結(jié)果,使用起來非常方便!)

軟件的配置和安裝部分,網(wǎng)上有很多教程,這里不再贅述,紙上得來終覺淺,絕知此事要躬行。讓我們直接進(jìn)入Pytorch的世界,開始coding吧!

Tensors

Tensor張量類型,是神經(jīng)網(wǎng)絡(luò)框架中重要的基礎(chǔ)數(shù)據(jù)類型,可以簡單理解為一個(gè)包含單個(gè)數(shù)據(jù)類型元素的多維矩陣,tensor之間的通過運(yùn)算進(jìn)行連接,從而形成計(jì)算圖。

下面的代碼實(shí)例中創(chuàng)建了一個(gè)2*3的二維張量x,指定數(shù)據(jù)類型為浮點(diǎn)型(Float):

  1. import torch 
  2. #Tensors 
  3. x=torch.FloatTensor([[1,2,3],[4,5,6]]) 
  4. print(x.size(),"\n",x) 

運(yùn)行結(jié)果:

PyTorch包含許多關(guān)于tensors的數(shù)學(xué)運(yùn)算。除此之外,它還提供了許多實(shí)用程序,如高效序列化Tensor和其他任意數(shù)據(jù)類型,以及其他有用的實(shí)用程序。

下面是Tensor的加法/減法的一個(gè)例子,其中torch.ones(*sizes, out=None) → Tensor返回一個(gè)全為1 的張量,形狀由可變參數(shù)sizes定義。在實(shí)例中,和變量x相加的是創(chuàng)建的兩個(gè)相應(yīng)位置值為1的2*3的張量,相當(dāng)于x每一維度的值+2,代碼和運(yùn)行結(jié)果如下所示:

  1. #Add tensors 
  2. x.add_(torch.ones([2,3])+torch.ones([2,3])) 

運(yùn)行結(jié)果:

同樣的,PyTorch也支持減法操作,實(shí)例如下,在上面的運(yùn)行結(jié)果基礎(chǔ)上每一維度再減去2,x恢復(fù)到最初的值。

  1. #Subtract Tensor 
  2. x.sub_(torch.ones([2,3])*2) 

運(yùn)行結(jié)果:

其他PyTorch運(yùn)算讀者可以查閱上文給出的中文鏈接。

PyTorch and NumPy

用戶可以輕松地在PyTorch和NumPy之間來回轉(zhuǎn)換。

下面是將np.matrix轉(zhuǎn)換為PyTorch并將維度更改為單個(gè)列的簡單示例:

  1. #Numpy to torch tensors 
  2. import numpy as np 
  3. y=np.matrix([[2,2],[2,2],[2,2]]) 
  4. z=np.matrix([[2,2],[2,2],[2,2]],dtype="int16"
  5. x.short() @ torch.from_numpy(z) 

運(yùn)行結(jié)果:

其中@為張量乘法的重載運(yùn)算符,x為2*3的張量,值為[[1,2,3],[4,5,6]],與轉(zhuǎn)換成tensor的z相乘,z的大小是3*2,結(jié)果為2*2的張量。(與矩陣乘法類似,不明白運(yùn)行結(jié)果的讀者,可以看下矩陣的乘法運(yùn)算)

除此外,PyTorch也支持張量結(jié)構(gòu)的重構(gòu)reshape,下面是將張量x重構(gòu)成1*6的一維張量的實(shí)例,與numpy中的reshape功能類似。

  1. #Reshape tensors(similar to np.reshape) 
  2. x.view(1,6) 

運(yùn)行結(jié)果:

GitHub repo概述了PyTorch到numpy的轉(zhuǎn)換,鏈接如下:

https://github.com/wkentaro/pytorch-for-numpy-users

CPU and GPUs

PyTorch允許變量使用 torch.cuda.device上下文管理器動(dòng)態(tài)更改設(shè)備。以下是示例代碼:

  1. #move variables and copies across computer devices 
  2. x=torch.FloatTensor([[1,2,3],[4,5,6]]) 
  3. y=np.matrix([[2,2,2],[2,2,2]],dtype="float32"
  4.  
  5.  
  6. if(torch.cuda.is_available()): 
  7.     xx=x.cuda(); 
  8.     y=torch.from_numpy(y).cuda() 
  9.     z=x+y 
  10. print(z) 
  11.  
  12. print(x.cpu()) 

運(yùn)行結(jié)果:

PyTorch Variables

變量只是一個(gè)包裹著Tensor的薄層,它支持幾乎所有由Tensor定義的API,變量被巧妙地定義為自動(dòng)編譯包的一部分。它提供了實(shí)現(xiàn)任意標(biāo)量值函數(shù)自動(dòng)區(qū)分的類和函數(shù)。

以下是PyTorch變量用法的簡單示例,將v1和v2相乘的結(jié)果賦值給v3,其中里面的參數(shù)requires_grad的屬性默認(rèn)為False,若一個(gè)節(jié)點(diǎn)requires_grad被設(shè)置為True,那么所有依賴它的節(jié)點(diǎn)的requires_grad都為True,主要用于梯度的計(jì)算。

  1. #Variable(part of autograd package) 
  2. #Variable (graph nodes) are thin wrappers around tensors and have dependency knowle 
  3. #Variable enable backpropagation of gradients and automatic differentiations 
  4. #Variable are set a 'volatile' flad during infrencing 
  5.  
  6.  
  7. from torch.autograd import Variable 
  8. v1 = Variable(torch.tensor([1.,2.,3.]), requires_grad=False
  9. v2 = Variable(torch.tensor([4.,5.,6.]), requires_grad=True
  10. v3 = v1*v2 
  11.  
  12.  
  13. v3.data.numpy() 

運(yùn)行結(jié)果:

  1. #Variables remember what created them 
  2. v3.grad_fn 

運(yùn)行結(jié)果:

Back Propagation

反向傳播算法用于計(jì)算相對于輸入權(quán)重和偏差的損失梯度,以在下一次優(yōu)化迭代中更新權(quán)重并最終減少損失,PyTorch在分層定義對于變量的反向方法以執(zhí)行反向傳播方面非常智能。

以下是一個(gè)簡單的反向傳播計(jì)算方法,以sin(x)為例計(jì)算差分:

  1. #Backpropagation with example of sin(x) 
  2. x=Variable(torch.Tensor(np.array([0.,1.,1.5,2.])*np.pi),requires_grad=True
  3. y=torch.sin(x) 
  4. x.grad 
  5. y.backward(torch.Tensor([1.,1.,1.,1])) 
  6.  
  7.  
  8. #Check gradient is indeed cox(x) 
  9. if( (x.grad.data.int().numpy()==torch.cos(x).data.int().numpy()).all() ): 
  10.     print ("d(sin(x)/dx=cos(x))") 

運(yùn)行結(jié)果:

對于pytorch中的變量和梯度計(jì)算可參考下面這篇文章:

https://zhuanlan.zhihu.com/p/29904755

SLR: Simple Linear Regression

現(xiàn)在我們了解了基礎(chǔ)知識,可以開始運(yùn)用PyTorch 解決簡單的機(jī)器學(xué)習(xí)問題——簡單線性回歸。我們將通過4個(gè)簡單步驟完成:

第一步:

在步驟1中,我們創(chuàng)建一個(gè)由方程y = wx + b產(chǎn)生的人工數(shù)據(jù)集,并注入隨機(jī)誤差。請參閱以下示例:

  1. #Simple Liner Regression 
  2. # Fit a line to the data. Y =w.x+b 
  3. #Deterministic behavior 
  4. np.random.seed(0) 
  5. torch.manual_seed(0) 
  6. #Step 1:Dataset 
  7. w=2;b=3 
  8. x=np.linspace(0,10,100) 
  9. y=w*x+b+np.random.randn(100)*2 
  10. xx=x.reshape(-1,1) 
  11. yy=y.reshape(-1,1) 

第二步:

在第2步中,我們使用forward函數(shù)定義一個(gè)簡單的類LinearRegressionModel,使用torch.nn.Linear定義構(gòu)造函數(shù)以對輸入數(shù)據(jù)進(jìn)行線性轉(zhuǎn)換:

  1. #Step 2:Model 
  2. class LinearRegressionModel(torch.nn.Module): 
  3.      
  4.     def __init__(self,in_dimn,out_dimn): 
  5.         super(LinearRegressionModel,self).__init__() 
  6.         self.model=torch.nn.Linear(in_dimn,out_dimn) 
  7.          
  8.     def forward(self,x): 
  9.         y_pred=self.model(x); 
  10.         return y_pred; 
  11.      
  12. model=LinearRegressionModel(in_dimn=1out_dimn=1

torch.nn.Linear參考網(wǎng)站:

https://pytorch.org/docs/stable/_modules/torch/nn/modules/linear.html

第三步:

下一步:使用 MSELoss 作為代價(jià)函數(shù),SGD作為優(yōu)化器來訓(xùn)練模型。

  1. #Step 3: Training 
  2. cost=torch.nn.MSELoss() 
  3. optimizer=torch.optim.SGD(model.parameters(),lr=0.01,momentum=0.9) 
  4. inputs=Variable(torch.from_numpy(x.astype("float32"))) 
  5. outputs=Variable(torch.from_numpy(y.astype("float32"))) 
  6.  
  7.  
  8. for epoch in range(100): 
  9. #3.1 forward pass: 
  10.     y_pred=model(inputs) 
  11.      
  12. #3.2 compute loss 
  13.     loss=cost(y_pred,outputs) 
  14.      
  15. #3.3 backward pass 
  16.     optimizer.zero_grad(); 
  17.     loss.backward() 
  18.     optimizer.step() 
  19.     if((epoch+1)%10==0): 
  20.         print("epoch{},loss{}".format(epoch+1,loss.data)) 

運(yùn)行結(jié)果:

  • MSELoss參考網(wǎng)站:https://pytorch.org/docs/stable/_modules/torch/nn/modules/loss.html
  • SGD參考網(wǎng)站:https://pytorch.org/docs/stable/_modules/torch/optim/sgd.html

第四步:

現(xiàn)在訓(xùn)練已經(jīng)完成,讓我們直觀地檢查我們的模型:

  1. #Step 4:Display model and confirm 
  2. import matplotlib.pyplot as plt 
  3. plt.figure(figsize=(4,4)) 
  4. plt.title("Model and Dataset") 
  5. plt.xlabel("X");plt.ylabel("Y") 
  6. plt.grid() 
  7. plt.plot(x,y,"ro",label="DataSet",marker="x",markersize=4
  8. plt.plot(x,model.model.weight.item()*x+model.model.bias.item(),label="Regression Model"
  9. plt.legend();plt.show() 

運(yùn)行結(jié)果:

現(xiàn)在你已經(jīng)完成了PyTorch的第一個(gè)線性回歸例子的編程了,對于后續(xù)希望百尺竿頭,更進(jìn)一步的讀者來說,可以參考PyTorch的官方文檔鏈接,完成大部分的編碼應(yīng)用。

相關(guān)鏈接:

https://medium.com/towards-artificial-intelligence/pytorch-in-2-minutes-9e18875990fd

【本文是51CTO專欄機(jī)構(gòu)大數(shù)據(jù)文摘的原創(chuàng)譯文,微信公眾號“大數(shù)據(jù)文摘( id: BigDataDigest)”】

     大數(shù)據(jù)文摘二維碼

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2020-12-07 09:01:58

冪等系統(tǒng)f(f(x)) =f(

2020-02-21 19:54:09

HTTPS 配置手把手教

2014-08-08 13:22:54

測試手機(jī)站點(diǎn)移動(dòng)設(shè)備

2023-06-05 13:07:38

2012-03-02 13:10:08

筆記本常見問題

2021-07-14 09:00:00

JavaFX開發(fā)應(yīng)用

2011-01-10 14:41:26

2011-05-03 15:59:00

黑盒打印機(jī)

2019-07-06 10:18:07

人工智能

2018-05-16 13:50:30

Python網(wǎng)絡(luò)爬蟲Scrapy

2009-12-15 16:44:07

水星路由器設(shè)置教程

2023-07-04 07:37:20

AzureOpenAI操作手冊

2021-09-26 16:08:23

CC++clang_forma

2022-12-07 08:42:35

2022-01-08 20:04:20

攔截系統(tǒng)調(diào)用

2023-04-26 12:46:43

DockerSpringKubernetes

2022-07-27 08:16:22

搜索引擎Lucene

2022-03-14 14:47:21

HarmonyOS操作系統(tǒng)鴻蒙

2011-02-22 13:46:27

微軟SQL.NET

2021-12-28 08:38:26

Linux 中斷喚醒系統(tǒng)Linux 系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號