最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PyTorch線性回歸和邏輯回歸實(shí)戰(zhàn)示例

 更新時(shí)間:2018年05月22日 08:32:14   作者:yuquanle  
這篇文章主要介紹了PyTorch線性回歸和邏輯回歸實(shí)戰(zhàn)示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

線性回歸實(shí)戰(zhàn)

使用PyTorch定義線性回歸模型一般分以下幾步:

1.設(shè)計(jì)網(wǎng)絡(luò)架構(gòu)
2.構(gòu)建損失函數(shù)(loss)和優(yōu)化器(optimizer)
3.訓(xùn)練(包括前饋(forward)、反向傳播(backward)、更新模型參數(shù)(update))

#author:yuquanle
#data:2018.2.5
#Study of LinearRegression use PyTorch

import torch
from torch.autograd import Variable

# train data
x_data = Variable(torch.Tensor([[1.0], [2.0], [3.0]]))
y_data = Variable(torch.Tensor([[2.0], [4.0], [6.0]]))

class Model(torch.nn.Module):
  def __init__(self):
    super(Model, self).__init__()
    self.linear = torch.nn.Linear(1, 1) # One in and one out

  def forward(self, x):
    y_pred = self.linear(x)
    return y_pred

# our model
model = Model()

criterion = torch.nn.MSELoss(size_average=False) # Defined loss function
optimizer = torch.optim.SGD(model.parameters(), lr=0.01) # Defined optimizer

# Training: forward, loss, backward, step
# Training loop
for epoch in range(50):
  # Forward pass
  y_pred = model(x_data)

  # Compute loss
  loss = criterion(y_pred, y_data)
  print(epoch, loss.data[0])

  # Zero gradients
  optimizer.zero_grad()
  # perform backward pass
  loss.backward()
  # update weights
  optimizer.step()

# After training
hour_var = Variable(torch.Tensor([[4.0]]))
print("predict (after training)", 4, model.forward(hour_var).data[0][0])

迭代十次打印結(jié)果:

0 123.87958526611328
1 55.19491195678711
2 24.61777114868164
3 11.005026817321777
4 4.944361686706543
5 2.2456750869750977
6 1.0436556339263916
7 0.5079189538955688
8 0.2688019871711731
9 0.16174012422561646
predict (after training) 4 7.487752914428711

loss還在繼續(xù)下降,此時(shí)輸入4得到的結(jié)果還不是預(yù)測(cè)的很準(zhǔn)

當(dāng)?shù)螖?shù)設(shè)置為50時(shí):

0 35.38422393798828
5 0.6207122802734375
10 0.012768605723977089
15 0.0020055510103702545
20 0.0016929294215515256
25 0.0015717096393927932
30 0.0014619173016399145
35 0.0013598509831354022
40 0.0012649153359234333
45 0.00117658288218081
50 0.001094428705982864
predict (after training) 4 8.038028717041016

此時(shí),函數(shù)已經(jīng)擬合比較好了

再運(yùn)行一次:

0 159.48605346679688
5 2.827991485595703
10 0.08624256402254105
15 0.03573693335056305
20 0.032463930547237396
25 0.030183646827936172
30 0.02807590737938881
35 0.026115568354725838
40 0.02429218217730522
45 0.022596003487706184
50 0.0210183784365654
predict (after training) 4 7.833342552185059

發(fā)現(xiàn)同為迭代50次,但是當(dāng)輸入為4時(shí),結(jié)果不同,感覺(jué)應(yīng)該是使用pytorch定義線性回歸模型時(shí):
torch.nn.Linear(1, 1),只需要知道輸入和輸出維度,里面的參數(shù)矩陣是隨機(jī)初始化的(具體是不是隨機(jī)的還是按照一定約束條件初始化的我不確定),所有每次計(jì)算loss會(huì)下降到不同的位置(模型的參數(shù)更新從而也不同),導(dǎo)致結(jié)果不一樣。

邏輯回歸實(shí)戰(zhàn)

線性回歸是解決回歸問(wèn)題的,邏輯回歸和線性回歸很像,但是它是解決分類(lèi)問(wèn)題的(一般二分類(lèi)問(wèn)題:0 or 1)。也可以多分類(lèi)問(wèn)題(用softmax可以實(shí)現(xiàn))。

使用pytorch實(shí)現(xiàn)邏輯回歸的基本過(guò)程和線性回歸差不多,但是有以下幾個(gè)區(qū)別:

下面為sigmoid函數(shù):

 

在邏輯回歸中,我們預(yù)測(cè)如果 當(dāng)輸出大于0.5時(shí),y=1;否則y=0。

損失函數(shù)一般采用交叉熵loss:

# date:2018.2.6
# LogisticRegression

import torch
from torch.autograd import Variable

x_data = Variable(torch.Tensor([[0.6], [1.0], [3.5], [4.0]]))
y_data = Variable(torch.Tensor([[0.], [0.], [1.], [1.]]))

class Model(torch.nn.Module):
  def __init__(self):
    super(Model, self).__init__()
    self.linear = torch.nn.Linear(1, 1) # One in one out
    self.sigmoid = torch.nn.Sigmoid()

  def forward(self, x):
    y_pred = self.sigmoid(self.linear(x))
    return y_pred

# Our model
model = Model()

# Construct loss function and optimizer
criterion = torch.nn.BCELoss(size_average=True)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

# Training loop
for epoch in range(500):
  # Forward pass
  y_pred = model(x_data)

  # Compute loss
  loss = criterion(y_pred, y_data)
  if epoch % 20 == 0:
    print(epoch, loss.data[0])

  # Zero gradients
  optimizer.zero_grad()
  # Backward pass
  loss.backward()
  # update weights
  optimizer.step()

# After training
hour_var = Variable(torch.Tensor([[0.5]]))
print("predict (after training)", 0.5, model.forward(hour_var).data[0][0])
hour_var = Variable(torch.Tensor([[7.0]]))
print("predict (after training)", 7.0, model.forward(hour_var).data[0][0])

輸入結(jié)果:

0 0.9983477592468262
20 0.850886881351471
40 0.7772406339645386
60 0.7362991571426392
80 0.7096697092056274
100 0.6896909475326538
120 0.6730546355247498
140 0.658246636390686
160 0.644534170627594
180 0.6315458416938782
200 0.6190851330757141
220 0.607043981552124
240 0.5953611731529236
260 0.5840001106262207
280 0.5729377269744873
300 0.5621585845947266
320 0.5516515970230103
340 0.5414079427719116
360 0.5314203500747681
380 0.5216821432113647
400 0.512187123298645
420 0.5029295086860657
440 0.49390339851379395
460 0.4851033389568329
480 0.47652381658554077
predict (after training) 0.5 0.49599987268447876
predict (after training) 7.0 0.9687209129333496

Process finished with exit code 0

訓(xùn)練完模型之后,輸入新的數(shù)據(jù)0.5,此時(shí)輸出小于0.5,則為0類(lèi)別,輸入7輸出大于0.5,則為1類(lèi)別。使用softmax做多分類(lèi)時(shí),那個(gè)維度的數(shù)值大,則為那個(gè)數(shù)值所對(duì)應(yīng)位置的類(lèi)別。

更深更寬的網(wǎng)絡(luò)

前面的例子都是淺層輸入為一維的網(wǎng)絡(luò),如果需要更深更寬的網(wǎng)絡(luò),使用pytorch也可以很好的實(shí)現(xiàn),以邏輯回歸為例:
當(dāng)輸入x的維度很大時(shí),需要更寬的網(wǎng)絡(luò):

更深的網(wǎng)絡(luò):

采用下面數(shù)據(jù)集(下載地址:https://github.com/hunkim/PyTorchZeroToAll/tree/master/data)

 

輸入維度為八。

#author:yuquanle
#date:2018.2.7
#Deep and Wide


import torch
from torch.autograd import Variable
import numpy as np

xy = np.loadtxt('./data/diabetes.csv', delimiter=',', dtype=np.float32)
x_data = Variable(torch.from_numpy(xy[:, 0:-1]))
y_data = Variable(torch.from_numpy(xy[:, [-1]]))

#print(x_data.data.shape)
#print(y_data.data.shape)

class Model(torch.nn.Module):
  def __init__(self):
    super(Model, self).__init__()
    self.l1 = torch.nn.Linear(8, 6)
    self.l2 = torch.nn.Linear(6, 4)
    self.l3 = torch.nn.Linear(4, 1)
    self.sigmoid = torch.nn.Sigmoid()

  def forward(self, x):
    x = self.sigmoid(self.l1(x))
    x = self.sigmoid(self.l2(x))
    y_pred = self.sigmoid(self.l3(x))
    return y_pred

# our model
model = Model()

cirterion = torch.nn.BCELoss(size_average=True)
optimizer = torch.optim.SGD(model.parameters(), lr=0.001)

hour_var = Variable(torch.Tensor([[-0.294118,0.487437,0.180328,-0.292929,0,0.00149028,-0.53117,-0.0333333]]))
print("(Before training)", model.forward(hour_var).data[0][0])

# Training loop
for epoch in range(1000):
  y_pred = model(x_data)
  # y_pred,y_data不能寫(xiě)反(因?yàn)閾p失函數(shù)為交叉熵loss)
  loss = cirterion(y_pred, y_data)
  optimizer.zero_grad()
  loss.backward()
  optimizer.step()
  if epoch % 50 == 0:
    print(epoch, loss.data[0])


# After training
hour_var = Variable(torch.Tensor([[-0.294118,0.487437,0.180328,-0.292929,0,0.00149028,-0.53117,-0.0333333]]))
print("predict (after training)", model.forward(hour_var).data[0][0])

結(jié)果:

(Before training) 0.5091859698295593
0 0.6876295208930969
50 0.6857835650444031
100 0.6840178370475769
150 0.6823290586471558
200 0.6807141900062561
250 0.6791688203811646
300 0.6776910424232483
350 0.6762782335281372
400 0.6749269366264343
450 0.6736343502998352
500 0.6723981499671936
550 0.6712161302566528
600 0.6700847744941711
650 0.6690039038658142
700 0.667969822883606
750 0.666980504989624
800 0.6660353541374207
850 0.6651310324668884
900 0.664265513420105
950 0.6634389758110046
predict (after training) 0.5618339776992798
Process finished with exit code 0

參考:

1.https://github.com/hunkim/PyTorchZeroToAll

2.http://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python常見(jiàn)異常類(lèi)型處理

    Python常見(jiàn)異常類(lèi)型處理

    這篇文章主要個(gè)大家分享的是Python常見(jiàn)異常類(lèi)型處理,編寫(xiě)程序的過(guò)程,難免會(huì)遇到一些錯(cuò)誤,程序邏輯又或者運(yùn)行與系統(tǒng)發(fā)生各種沖突等等,下面我們就來(lái)看看那些我們?cè)诰幊讨谐S龅降漠惓6际窃趺刺幚淼陌?,需要的小伙伴可以參考一?/div> 2021-12-12
  • Python獲取本機(jī)所有網(wǎng)卡ip,掩碼和廣播地址實(shí)例代碼

    Python獲取本機(jī)所有網(wǎng)卡ip,掩碼和廣播地址實(shí)例代碼

    這篇文章主要介紹了Python獲取本機(jī)所有網(wǎng)卡ip,掩碼和廣播地址實(shí)例代碼,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • 深入學(xué)習(xí)Python可變與不可變對(duì)象操作實(shí)例

    深入學(xué)習(xí)Python可變與不可變對(duì)象操作實(shí)例

    Python中的數(shù)據(jù)類(lèi)型可以分為可變對(duì)象和不可變對(duì)象,了解它們之間的區(qū)別對(duì)于編寫(xiě)高效的Python代碼至關(guān)重要,本文將詳細(xì)介紹可變對(duì)象和不可變對(duì)象的概念,以及如何正確地使用它們來(lái)提高代碼的性能和可讀性
    2023-12-12
  • Tensorflow2.4使用Tuner選擇模型最佳超參詳解

    Tensorflow2.4使用Tuner選擇模型最佳超參詳解

    這篇文章主要介紹了Tensorflow2.4使用Tuner選擇模型最佳超參詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • python的scipy實(shí)現(xiàn)插值的示例代碼

    python的scipy實(shí)現(xiàn)插值的示例代碼

    這篇文章主要介紹了python的scipy實(shí)現(xiàn)插值的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • flask開(kāi)啟多線程的具體方法

    flask開(kāi)啟多線程的具體方法

    在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于flask開(kāi)啟多線程的具體方法,對(duì)此有需求的可以學(xué)習(xí)參考下。
    2020-08-08
  • 一步步教你用Python畫(huà)五彩氣球

    一步步教你用Python畫(huà)五彩氣球

    這篇文章主要給大家介紹了關(guān)于如何用Python畫(huà)五彩氣球的相關(guān)資料,主要是用turtle庫(kù)自帶的畫(huà)筆turtle.Turtle()來(lái)繪制氣球,文中給出了詳細(xì)的實(shí)例代碼,需要的朋友可以參考下
    2023-06-06
  • python數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)類(lèi)型

    python數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)類(lèi)型

    這篇文章主要介紹了python數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)類(lèi)型,在?Python?以及其他所有面向?qū)ο缶幊陶Z(yǔ)言中,類(lèi)都是對(duì)數(shù)據(jù)的構(gòu)成(狀態(tài))以及數(shù)據(jù)?能做什么(行為)的描述,下面我們就來(lái)你看看python數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)類(lèi)型商務(wù)詳細(xì)介紹,需要的小伙伴可以參考一下
    2021-12-12
  • Python?boxplot?用法詳解

    Python?boxplot?用法詳解

    這篇文章主要介紹了Python?boxplot?用法詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • 使用PySide多線程處理圖形界面卡頓問(wèn)題詳解

    使用PySide多線程處理圖形界面卡頓問(wèn)題詳解

    這篇文章主要介紹了使用PySide多線程處理圖形界面卡頓問(wèn)題,在制作圖形界面時(shí),只用一個(gè)線程很容易導(dǎo)致卡頓無(wú)響應(yīng),一旦主線程被阻塞,那么整個(gè)圖形界面都會(huì)無(wú)法繼續(xù)使用,為了解決這個(gè)問(wèn)題,就得使用多線程,需要的朋友可以參考下
    2025-04-04

最新評(píng)論

崇义县| 翁牛特旗| 深州市| 闵行区| 通化县| 天峨县| 龙井市| 武威市| 江津市| 东宁县| 襄樊市| 巴楚县| 敦煌市| 灵璧县| 陕西省| 江阴市| 察隅县| 甘泉县| 石柱| 丹棱县| 广饶县| 牡丹江市| 鲁山县| 连南| 惠东县| 滁州市| 柘城县| 黎平县| 兴海县| 克山县| 焦作市| 孝昌县| 康马县| 大城县| 郸城县| 牙克石市| 保山市| 子长县| 得荣县| 梨树县| 响水县|