PyTorch學習二 簡單的回歸演算法實現

2021-09-29 08:16:55 字數 2656 閱讀 5105

本文學習自莫煩教程

import torch

import torch.nn.functional as f

import matplotlib.pyplot as plt

import torch.nn as nn

torch.manual_seed(1)

#固定每次生成的隨機數都保持不變

# 生成資料集

x = torch.unsqueeze(torch.linspace(-1

,1,100

), dim=1)

# x.shape=(100,1)

# torch.unsqueeze:在張量的指定位置增加1個維度,此處是在dim=1維處增加1個維度

# torch.squeeze:在張量的指定位置減少1個維度

y = x.

pow(2)

+0.2

*torch.rand(x.size())

#y.shape=(100,1)

# pow(2)方法是對x進行平方運算

# torch.rand(x.size()):根據x張量的尺寸構造新張量,與x尺寸一致,新張量服從均勻分布

# 擴充套件:torch.randn(x.size(x.size()):生成張量服從標準正態分佈

# y = torch.normal(mean, std):生成張量服從離散正態分佈

class

net(nn.module)

:"""定義網路"""

def__init__

(self, n_feature, n_hidden, n_output)

:super

(net, self)

.__init__(

)# 繼承nn.module類

self.hidden = nn.linear(n_feature, n_hidden)

#定義隱藏層

self.predict = nn.linear(n_hidden, n_output)

#定義輸出層

defforward

(self, x)

:"""前向傳播"""

x = f.relu(self.hidden(x)

)# relu函式啟用隱藏層

x = self.predict(x)

# 計算輸出層

return x

net = net(n_feature=

1, n_hidden=

10, n_output=1)

# 網路初始化

# 由於是回歸任務,這裡相當於定義batch_size=1,每次輸入的特徵是1,也即x的乙個樣本點,輸出的是1個**的數值

optimizer = torch.optim.sgd(net.parameters(

), lr=

0.2)

# 定義優化方法是sgd

loss_func = nn.mseloss(

)# 定義損失函式是mse

plt.ion(

)#開啟互動模式

# matplotlib預設顯示模式是阻塞模式,即遇到plt.show()程式會停止,而互動模式下,程式會繼續進行,可以顯示多張

# 訓練模型

num_epochs =

10000

# 迭代輪數

for i in

range

(num_epochs)

: prediction = net(x)

# **值

loss = loss_func(prediction, y)

# 計算真實值與**值的誤差

optimizer.zero_grad(

)#每個batch結束後清零梯度,因為每個batch都是乙個新過程,如果不清零梯度,梯度會在batch上累加,對後面的batch造成影響

loss.backward(

)# 誤差反向傳播

optimizer.step(

)# 更新引數w和b

if i%

2000==0

: plt.cla(

)# clear axis即清除當前圖形中的當前活動軸。其他軸不受影響。

#plt.clf clear figure清除所有軸,但是視窗開啟,這樣它可以被重複使用。

#plt.close() close a figure window

plt.scatter(x.data.numpy(

), y.data.numpy())

plt.plot(x.data.numpy(

), prediction.data.numpy(),

'r-'

, lw=5)

plt.text(

0.5,0,

'loss=%.4f'

% loss.data.numpy(

), fontdict=

)# plt.text()引數意義:0.5和0是座標,loss=%.4f是小數點後保留4位,尺寸15,顏色紅色

plt.show(

) plt.pause(

0.1)

# 查閱資料,應該是讓圖顯示的更加動態...

plt.ioff(

)# 關閉互動模式,如果不關閉,圖會顯示完成後便消失

pytorch實現最簡單的線性回歸

import torch import time from torch.autograd import variable import torch.nn.functional as f x torch.unsqueeze torch.linspace 2,2,10 dim 1 y x.pow 2 0...

利用Pytorch實現簡單的線性回歸演算法

最近聽了張江老師的深度學習課程,用pytorch實現神經網路 之前做titanic生存率 的時候稍微了解過tensorflow,聽說tensorflow能做的pyorch都可以做,而且更方便快捷,自己嘗試了一下 的邏輯確實比較簡單。pytorch涉及的基本資料型別是tensor 張量 和autogr...

pytorch 搭建簡單神經網路(回歸)

準備資料 x data torch.unsqueeze torch.linspace 1 1,100 dim 1 y data x data.pow 2 通過matplotlib視覺化生成的資料 plt.scatter x data.numpy y data.numpy plt.show class...