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

基于nn.Module類實(shí)現(xiàn)線性回歸模型

人工智能 深度學(xué)習(xí)
大多數(shù)情況下創(chuàng)建一個(gè)繼承自 Pytorch 中的 nn.Module 的類,這樣可以使用 Pytorch 提供的許多高級(jí) API,而無(wú)需自己實(shí)現(xiàn)。

[[411355]]

上次介紹了順序模型,但是在大多數(shù)情況下,我們基本都是以類的形式實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)。

大多數(shù)情況下創(chuàng)建一個(gè)繼承自 Pytorch 中的 nn.Module 的類,這樣可以使用 Pytorch 提供的許多高級(jí) API,而無(wú)需自己實(shí)現(xiàn)。

下面展示了一個(gè)可以從nn.Module創(chuàng)建的最簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)類的示例?;? nn.Module的類的最低要求是覆蓋__init__()方法和forward()方法。

在這個(gè)類中,定義了一個(gè)簡(jiǎn)單的線性網(wǎng)絡(luò),具有兩個(gè)輸入和一個(gè)輸出,并使用 Sigmoid()函數(shù)作為網(wǎng)絡(luò)的激活函數(shù)。

  1. import torch 
  2. from torch import nn 
  3.  
  4. class LinearRegression(nn.Module): 
  5.     def __init__(self): 
  6.         #繼承父類構(gòu)造函數(shù) 
  7.         super(LinearRegression, self).__init__()  
  8.         #輸入和輸出的維度都是1 
  9.         self.linear = nn.Linear(1, 1)  
  10.     def forward(self, x): 
  11.         out = self.linear(x) 
  12.         return out 

現(xiàn)在讓我們測(cè)試一下模型。

  1. # 創(chuàng)建LinearRegression()的實(shí)例 
  2. model = LinearRegression() 
  3. print(model)  
  4. # 輸出如下 
  5. LinearRegression( 
  6.   (linear): Linear(in_features=1, out_features=1, bias=True

現(xiàn)在讓定義一個(gè)損失函數(shù)和優(yōu)化函數(shù)。

  1. model = LinearRegression()#實(shí)例化對(duì)象 
  2. num_epochs = 1000#迭代次數(shù) 
  3. learning_rate = 1e-2#學(xué)習(xí)率0.01 
  4. Loss = torch.nn.MSELoss()#損失函數(shù) 
  5. optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)#優(yōu)化函數(shù) 

我們創(chuàng)建一個(gè)由方程產(chǎn)生的數(shù)據(jù)集,并通過(guò)函數(shù)制造噪音

  1. import torch  
  2. from matplotlib import pyplot as plt 
  3. from torch.autograd import Variable 
  4. from torch import nn 
  5. # 創(chuàng)建數(shù)據(jù)集  unsqueeze 相當(dāng)于 
  6. x = Variable(torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1)) 
  7. y = Variable(x * 2 + 0.2 + torch.rand(x.size())) 
  8. plt.scatter(x.data.numpy(),y.data.numpy()) 
  9. plt.show() 

關(guān)于torch.unsqueeze函數(shù)解讀。

  1. >>> x = torch.tensor([1, 2, 3, 4]) 
  2. >>> torch.unsqueeze(x, 0) 
  3. tensor([[ 1,  2,  3,  4]]) 
  4. >>> torch.unsqueeze(x, 1) 
  5. tensor([[ 1], 
  6.         [ 2], 
  7.         [ 3], 
  8.         [ 4]]) 

遍歷每次epoch,計(jì)算出loss,反向傳播計(jì)算梯度,不斷的更新梯度,使用梯度下降進(jìn)行優(yōu)化。

  1. for epoch in range(num_epochs): 
  2.     # 預(yù)測(cè) 
  3.     y_pred= model(x) 
  4.     # 計(jì)算loss 
  5.     loss = Loss(y_pred, y) 
  6.     #清空上一步參數(shù)值 
  7.     optimizer.zero_grad() 
  8.     #反向傳播 
  9.     loss.backward() 
  10.     #更新參數(shù) 
  11.     optimizer.step() 
  12.     if epoch % 200 == 0: 
  13.         print("[{}/{}] loss:{:.4f}".format(epoch+1, num_epochs, loss)) 
  14.  
  15. plt.scatter(x.data.numpy(), y.data.numpy()) 
  16. plt.plot(x.data.numpy(), y_pred.data.numpy(), 'r-',lw=5) 
  17. plt.text(0.5, 0,'Loss=%.4f' % loss.data.item(), fontdict={'size': 20, 'color':  'red'}) 
  18. plt.show() 
  19. ####結(jié)果如下#### 
  20. [1/1000] loss:4.2052 
  21. [201/1000] loss:0.2690 
  22. [401/1000] loss:0.0925 
  23. [601/1000] loss:0.0810 
  24. [801/1000] loss:0.0802 

  1. [w, b] = model.parameters() 
  2. print(w,b) 
  3. # Parameter containing: 
  4. tensor([[2.0036]], requires_grad=True) Parameter containing: 
  5. tensor([0.7006], requires_grad=True

這里的b=0.7,等于0.2 + torch.rand(x.size()),經(jīng)過(guò)大量的訓(xùn)練torch.rand()一般約等于0.5。

 

責(zé)任編輯:姜華 來(lái)源: Python之王
相關(guān)推薦

2017-05-17 08:24:08

TensorFlow機(jī)器學(xué)習(xí)線性回歸

2025-04-27 04:02:00

機(jī)器學(xué)習(xí)模型網(wǎng)絡(luò)

2023-11-10 15:47:06

線性回歸內(nèi)核技巧

2018-04-26 08:40:33

線性回歸算法機(jī)器學(xué)習(xí)

2020-07-01 08:48:01

Python機(jī)器學(xué)習(xí)工具

2024-02-01 08:09:31

GPT容器模塊

2014-08-22 10:06:46

機(jī)器學(xué)習(xí)

2024-07-10 11:09:35

2021-04-13 08:12:33

拉鏈?zhǔn)?/a>Map探測(cè)式

2021-07-07 06:04:33

人工智能Pytorch神經(jīng)網(wǎng)絡(luò)

2018-01-10 17:06:36

Python線性回歸數(shù)據(jù)

2021-11-08 22:59:04

機(jī)器學(xué)習(xí)

2021-09-08 07:44:26

人工智能keras神經(jīng)網(wǎng)絡(luò)

2020-12-19 10:54:25

機(jī)器學(xué)習(xí)線性回歸算法

2020-12-20 20:31:56

Python機(jī)器學(xué)習(xí)多元線性回歸

2020-08-25 18:10:22

Python代碼線性回歸

2024-01-02 15:55:27

深度學(xué)習(xí)模型pytorch

2021-11-03 06:57:42

數(shù)據(jù)線性邏輯

2017-10-24 14:32:48

2020-11-10 08:37:05

Python線性回歸機(jī)器學(xué)習(xí)
點(diǎn)贊
收藏

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