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

pytorch實(shí)現(xiàn)梯度下降和反向傳播圖文詳細(xì)講解

 更新時(shí)間:2023年04月24日 10:18:10   作者:瘋狂的小強(qiáng)呀  
這篇文章主要介紹了pytorch實(shí)現(xiàn)梯度下降和反向傳播,反向傳播的目的是計(jì)算成本函數(shù)C對(duì)網(wǎng)絡(luò)中任意w或b的偏導(dǎo)數(shù)。一旦我們有了這些偏導(dǎo)數(shù),我們將通過一些常數(shù)α的乘積和該數(shù)量相對(duì)于成本函數(shù)的偏導(dǎo)數(shù)來更新網(wǎng)絡(luò)中的權(quán)重和偏差

反向傳播

這里說一下我的理解,反向傳播是相對(duì)于前向計(jì)算的,以公式J(a,b,c)=3(a+bc)為例,前向計(jì)算相當(dāng)于向右計(jì)算J(a,b,c)的值,反向傳播相當(dāng)于反過來通過y求變量a,b,c的導(dǎo)數(shù),如下圖

手動(dòng)完成線性回歸

import torch
import numpy as np
from matplotlib import pyplot as plt
"""
假設(shè)模型為y=w*x+b
我們給出的訓(xùn)練數(shù)據(jù)是通過y=3*x+1,得到的,其中w=3,b=1
通過訓(xùn)練y=w*x+b觀察訓(xùn)練結(jié)果是否接近于w=3,b=1
"""
# 設(shè)置學(xué)習(xí)率
learning_rate=0.01
#準(zhǔn)備數(shù)據(jù)
x=torch.rand(500,1) #隨機(jī)生成500個(gè)x作為訓(xùn)練數(shù)據(jù)
y_true=x*3+1 #根據(jù)模型得到x對(duì)應(yīng)的y的實(shí)際值
#初始化參數(shù)
w=torch.rand([1,1],requires_grad=True) #初始化w
b=torch.rand(1,requires_grad=True,dtype=torch.float32) #初始化b
#通過循環(huán),反向傳播,更新參數(shù)
for i in range(2000):
    # 通過模型計(jì)算y_predict
    y_predict=torch.matmul(x,w)+b #根據(jù)模型得到預(yù)測值
    #計(jì)算loss
    loss=(y_true-y_predict).pow(2).mean()
    #防止梯度累加,每次計(jì)算梯度前都將其置為0
    if w.grad is not None:
        w.grad.data.zero_()
    if b.grad is not None:
        b.grad.data.zero_()
    #通過反向傳播,記錄梯度
    loss.backward()
    #更新參數(shù)
    w.data=w.data-learning_rate*w.grad
    b.data=b.data-learning_rate*b.grad
    # 這里打印部分值看一看變化
    if i%50==0:
        print("w,b,loss:",w.item(),b.item(),loss.item())
#設(shè)置圖像的大小
plt.figure(figsize=(20,8))
#將真實(shí)值用散點(diǎn)表示出來
plt.scatter(x.numpy().reshape(-1),y_true.numpy().reshape(-1))
#將預(yù)測值用直線表示出來
y_predict=torch.matmul(x,w)+b
plt.plot(x.numpy().reshape(-1),y_predict.detach().numpy().reshape(-1),c="r")
#顯示圖像
plt.show()

pytorch API完成線性回歸

優(yōu)化器類

優(yōu)化器(optimizer),可以理解為torch為我們封裝的用來進(jìn)行更新參數(shù)的方法,比如常見的隨機(jī)梯度下降(stochastic gradient descent,SGD)

優(yōu)化器類都是由torch.optim提供的,例如

  • torch.optim.SGD(參數(shù),學(xué)習(xí)率)
  • torch.optim.Adam(參數(shù),學(xué)習(xí)率)

注意:

  • 參數(shù)可以使用model.parameters()來獲取,獲取模型中所有requires_grad=True的參數(shù)
  • 優(yōu)化類的使用方法

①實(shí)例化

②所有參數(shù)的梯度,將其置為0

③反向傳播計(jì)算梯度

④更新參數(shù)值

實(shí)現(xiàn)

import torch
from torch import nn
from torch import optim
from matplotlib import pyplot as plt
import numpy as np
# 1.定義數(shù)據(jù),給出x
x=torch.rand(50,1)
# 假定模型為y=w*x+b,根據(jù)模型給出真實(shí)值y=x*3+0.8
y=x*3+0.8
# print(x)
#2.定義模型
class Lr(torch.nn.Module):
    def __init__(self):
        super(Lr, self).__init__()
        self.linear = torch.nn.Linear(1, 1)
    def forward(self, x):
        out = self.linear(x)
        return out
# 3.實(shí)例化模型、loss、優(yōu)化器
model=Lr()
criterion=nn.MSELoss()
# print(list(model.parameters()))
optimizer=optim.SGD(model.parameters(),lr=1e-3)
# 4.訓(xùn)練模型
for i in range(30000):
    out=model(x) #獲取預(yù)測值
    loss=criterion(y,out) #計(jì)算損失
    optimizer.zero_grad() #梯度歸零
    loss.backward() #計(jì)算梯度
    optimizer.step() #更新梯度
    if (i+1)%100 ==0:
        print('Epoch[{}/{}],loss:{:.6f}'.format(i,30000,loss.data))
# 5.模型評(píng)估
model.eval() #設(shè)置模型為評(píng)估模式,即預(yù)測模式
predict=model(x)
predict=predict.data.numpy()
plt.scatter(x.data.numpy(),y.data.numpy(),c="r")
plt.plot(x.data.numpy(),predict)
plt.show()

到此這篇關(guān)于pytorch實(shí)現(xiàn)梯度下降和反向傳播圖文詳細(xì)講解的文章就介紹到這了,更多相關(guān)pytorch梯度下降和反向傳播內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Django對(duì)models里的objects的使用詳解

    Django對(duì)models里的objects的使用詳解

    今天小編就為大家分享一篇Django對(duì)models里的objects的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python實(shí)現(xiàn)邏輯回歸的方法示例

    python實(shí)現(xiàn)邏輯回歸的方法示例

    這篇文章主要介紹了python實(shí)現(xiàn)邏輯回歸的方法示例,這是機(jī)器學(xué)習(xí)課程的一個(gè)實(shí)驗(yàn),整理出來共享給大家,需要的朋友可以參考學(xué)習(xí),下來要一起看看吧。
    2017-05-05
  • python如何實(shí)現(xiàn)Dice系數(shù)

    python如何實(shí)現(xiàn)Dice系數(shù)

    這篇文章主要介紹了python如何實(shí)現(xiàn)Dice系數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • python psutil庫安裝教程

    python psutil庫安裝教程

    這篇文章給大家介紹了python psutil庫安裝教程,首先要確認(rèn)本機(jī)已安裝python環(huán)境,具體安裝過程大家參考下本文
    2018-03-03
  • springboot aop方式實(shí)現(xiàn)接口入?yún)⑿r?yàn)的示例代碼

    springboot aop方式實(shí)現(xiàn)接口入?yún)⑿r?yàn)的示例代碼

    在實(shí)際開發(fā)項(xiàng)目中,我們常常需要對(duì)接口入?yún)⑦M(jìn)行校驗(yàn),本文主要介紹了springboot aop方式實(shí)現(xiàn)接口入?yún)⑿r?yàn)的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • python輸出數(shù)學(xué)符號(hào)實(shí)例

    python輸出數(shù)學(xué)符號(hào)實(shí)例

    這篇文章主要介紹了python輸出數(shù)學(xué)符號(hào)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python調(diào)用C語言的實(shí)現(xiàn)

    Python調(diào)用C語言的實(shí)現(xiàn)

    這篇文章主要介紹了Python調(diào)用C語言的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python利用Selenium實(shí)現(xiàn)自動(dòng)觀看學(xué)習(xí)通視頻

    Python利用Selenium實(shí)現(xiàn)自動(dòng)觀看學(xué)習(xí)通視頻

    Selenium是一個(gè)用于Web應(yīng)用程序測試的工具。Selenium測試直接運(yùn)行在瀏覽器中,就像真正的用戶在操作一樣。本文主要介紹了利用Selenium實(shí)現(xiàn)自動(dòng)觀看學(xué)習(xí)通視頻,需要的同學(xué)可以參考一下
    2021-12-12
  • Tensorflow之MNIST CNN實(shí)現(xiàn)并保存、加載模型

    Tensorflow之MNIST CNN實(shí)現(xiàn)并保存、加載模型

    這篇文章主要為大家詳細(xì)介紹了Tensorflow之MNIST CNN實(shí)現(xiàn)并保存、加載模型,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • Python+tkinter編寫一個(gè)最近很火的強(qiáng)制表白神器

    Python+tkinter編寫一個(gè)最近很火的強(qiáng)制表白神器

    這篇文章主要為大家詳細(xì)介紹了Python如何通過tkinter編寫一個(gè)最近很火的強(qiáng)制表白神器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起嘗試一下
    2023-04-04

最新評(píng)論

东港市| 锦州市| 托里县| 田林县| 连山| 安庆市| 水城县| 任丘市| 平和县| 江都市| 高青县| 桂阳县| 缙云县| 渑池县| 黑山县| 嘉义县| 达州市| 阆中市| 克东县| 南投县| 澄江县| 涡阳县| 澜沧| 图木舒克市| 霞浦县| 石台县| 改则县| 大新县| 曲周县| 新化县| 定西市| 怀化市| 青河县| 正镶白旗| 宝鸡市| 曲阳县| 习水县| 新乐市| 珲春市| 锦屏县| 体育|