pytorch 線性回歸

2021-10-09 01:18:34 字數 1706 閱讀 2995

import torch

from torch.autograd import variable

import torch.nn.functional as f

import matplotlib.pyplot as plt

#print(torch.linspace(-1,1,100))

x=torch.unsqueeze(torch.linspace(-1,1,100),dim=1)#增加乙個維度

y=x.pow(2)+0.2*torch.rand(x.size())

x,y=variable(x),variable(y)

# print(x)

# print(y)

class net(torch.nn.module):

def __init__(self,n_feature,n_hidden,n_output):#

super(net,self).__init__() #繼承net到torch.nn.module

self.hidden = torch.nn.linear(n_feature,n_hidden)#輸入資料個數,輸出隱藏層節點神經元個數

self.predict =torch.nn.linear(n_hidden,1)#輸入隱藏層神神經元個數,輸出1個

def forward(self,x):#前向傳遞的過程,搭圖的過程。輸入資訊x

x=f.relu(self.hidden(x))#x過了隱藏層

x=self.predict(x)#**x,沒用激勵函式,防止激勵函式截斷資料

return x

net=net(1,10,1) #輸入1個 隱藏層10個神經元 輸出1個

print(net)#輸出層結構

plt.ion() #畫圖 實時列印 開啟互動模式

plt.show()

optimizer=torch.optim.sgd(net.parameters(),lr=0.5) #隨機梯度下降。傳入神經網路的引數

loss_func =torch.nn.mseloss() #均方差代價函式

for t in range(100):

prediction =net(x)

loss =loss_func(prediction,y) #loss是變數,具有梯度和資料兩個屬性

optimizer.zero_grad() #所有引數梯度降為零。

loss.backward() #計算梯度

optimizer.step()#以學習率0.5優化梯度

if t % 5 ==0:

plt.cla() #清除之前的繪圖

plt.scatter(x.data.numpy(),y.data.numpy())#散點圖

plt.plot(x.data.numpy(),prediction.data.numpy(),'r-',lw=5) #畫圖

print(loss.data)#輸出代價

#plt.text(0.5,0,'loss=%.4f' % loss.data[0],fontdict=)

plt.pause(0.1) #畫圖是影象暫停,否則直接畫出最終影象。

plt.ioff()#讓介面停留

plt.show()#開始畫圖

pytorch線性回歸

線性回歸假設輸出與各個輸入之間是線性關係 y wx b pytorch定義線性回歸模型 def linreg x,w,b return torch.mm x,w b線性回歸常用損失函式是平方損失 2優化函式 隨機梯度下降 小批量隨機梯度下降 mini batch stochastic gradien...

Pytorch之線性回歸

import torch from torch import nn import numpy as np import torch.utils.data as data from torch.nn import init 使得模型的可復現性 torch.manual seed 1 設定預設的資料格式...

pytorch 線性回歸(Regression)

使用pytorch python實現回歸。程式 import torch import torch.nn.functional as f from matplotlib import pyplot as plt 建立資料 x torch.unsqueeze torch.linspace 1 1,10...