本文學習自莫煩教程
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...