PyTorch深度學習實踐(四) 反向傳播

2022-09-09 05:18:10 字數 2173 閱讀 5802

b站 pytorch深度學習實踐-反向傳播

(1)tensor包含data 和 grad

w.data

w.grad.data:數值計算,不構建計算圖。

w.grad.item():取出數值。

w.grad.data.zero():清零

(2)w是tensor型別,data和grad也是tensor型別,注意取值時不可直接取成張量

(3)反向傳播**:

1#

2import

torch34

#y=2x

5 x_data=[1.0,2.0,3.0,4.0]

6 y_data=[2.0,4.0,6.0,8.0]

78 w=torch.tensor([1.0]) #

tensor型別

9 w.requires_grad=true #

需要計算梯度,則設為true

1011

defforward(x):

12return w*x #

以為w是tensor型別,x自動轉化為tensor,返回為tensor型別

1314

def loss(x,y): #

構建計算圖

15 y_pred=forward(x)

16return (y_pred-y)**2

1718

for epoch in range(100):

19for x,y in

zip(x_data,y_data):

20 l=loss(x,y) #

l也是tensor型別

21 l.backward() #

反向傳播計算梯度

22print("

\t",x,y,w.grad.item()) #

取得是grad的值

23 w.data=w.data-0.01*w.grad.data #

取grad的值

24 w.grad.data.zero_() #

釋放之前計算的梯度

25print("

epoch:

",epoch,"

loss:

",l.item())

(4)y=w1*x+w2*x+b

1 #2

import

torch

34 x_data=[1.0,2.0,3.0]

5 y_data=[2.0,4.0,6.0]67

#y8 w1=torch.tensor([1.0])

9 w1.requires_grad=true

10 w2=torch.tensor([1.0])

11 w2.requires_grad=true

12 b=torch.tensor([1.0])

13 b.requires_grad=true

1415

defforward(x):

16return w1*x+w2*x+b

1718

defloss(x,y):

19 y_pred=forward(x)

20return (y_pred-y)**2

2122

for epoch in range(100):

23for x,y in

zip(x_data,y_data):

24 l=loss(x,y)

25l.backward()

26print("\t"

,x,y,w1.grad.item(),w2.grad.item(),b.grad.item())

27 w1.data-=0.01*w1.grad.data

28w1.grad.data.zero_()

29 w2.data-=0.01*w2.grad.data

30w2.grad.data.zero_()

31 b.data-=0.01*b.grad.data

32b.grad.data.zero_()

33print('

epoch:

', epoch, l.item())

PyTorch深度學習實踐 Overview

pytorch是乙個基於torch的python開源機器學習庫,用於自然語言處理等應用程式。它主要由facebookd的人工智慧小組開發,不僅能夠 實現強大的gpu加速,同時還支援動態神經網路。pytorch是乙個動態的框架,而tensorflow是靜態框架 2.x版本也為動態框架優先 靜態框架就是...

Pytorch深度學習實踐 線性模型

在看劉二大人的pytorch教程,寫個筆記記錄一下,如果有什麼問題歡迎一起 呀 傳送門 劉二大人的pytorch深度學習實踐 線性模型 首先是線性模型的定義 給定由d個屬性描述對的示例x x x x 其中 是第i個屬性上的取值,線性模型試圖學得乙個通過屬性的線性組合來進行 的函式,即 轉換成向量形式...

PyTorch深度學習實踐 反向傳播

pytorch深度學習實踐 完結合集 嗶哩嗶哩 bilibili 目錄在之前課程中介紹的線性模型就是乙個最簡單的神經網路的結構,其內部引數的更新過程如下 對於簡單的模型來說可以直接使用表示式的方式來更新權重,但是如果網路結構比較複雜 如下圖 直接使用解析式的方式來更新顯然有些複雜且不太可能實現。反向...