最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

PyTorch Tutorial 03 - Gradient Calcul...

2023-02-14 19:41 作者:Mr-南喬  | 我要投稿

教程Python代碼如下:


import torch


x = torch.randn(5)

print(x)


#如果想計算一些函數(shù)的梯度,必須指定參數(shù),要求grad=True

"""

在Tensor上的所有操作,Autograd都能為它們自動提供微分,避免手動計算導數(shù)的復雜過程。

autograd.Variable是 Autograd 中的核心類,它簡單封裝了Tensor,并支持幾乎所有Tensor 的操作。

Tensor在被封裝為Variable之后,可以調(diào)用它的.backward實現(xiàn)反向傳播,自動計算所有梯度。

"""

x = torch.randn(5,requires_grad=True)

print(x)


y = x + 2

print(y)


z = y * y * 2

print(z)

z = z.mean()

print(z)


print("\n" + "計算z相當于x的梯度")

"""

計算z相當于x的梯度

注意:grad在反向傳播過程中是累加的( accumulated ),這意味著每次運行反向傳播,梯度都會累加之前的梯度,所以反向傳播之前需把梯度清零。

"""

print(x.grad)

z.backward() #dz9

print(x.grad)


#如果沒有z = z.mean()

x = torch.randn(3,requires_grad=True)

y = x + 2

z = y * y * 2

v = torch.tensor([0.1,0.01,0.001],dtype=torch.float32)

z.backward(v) #這里沒有z = z.mean(),所以z不是一個標量,而是一個矢量,所以我們要給它一個矢量

print(x.grad)



print("\n" + "防止跟蹤梯度的三種選擇")

"""

防止跟蹤梯度的三種選擇:

1:x.requires_grad_(False)

2:x.detach() #創(chuàng)建一個不需要梯度的新張量

3:with torch.no_grad(): #包裝在 with 語句中

"""

x = torch.randn(3,requires_grad=True)

print(x)

x.requires_grad_(False)

print(x)


x = torch.randn(3,requires_grad=True)

print(x)

y = x.detach()

print(y)


x = torch.randn(3,requires_grad=True)

print(x)

with torch.no_grad():

??y = x + 2

??print(y)



print("\n" + "梯度累加")

"""注意:grad在反向傳播過程中是累加的( accumulated ),這意味著每次運行反向傳播,梯度都會累加之前的梯度,所以反向傳播之前需把梯度清零。"""

print("\n" + "一次迭代")

weights = torch.ones(4,requires_grad=True)


for epoch in range(1):

??model_output = (weights*3).sum()

??model_output.backward()

??print(weights.grad)


print("\n" + "二次迭代")

weights = torch.ones(4,requires_grad=True)


for epoch in range(2):

??model_output = (weights*3).sum()

??model_output.backward()

??print(weights.grad)


print("\n" + "三次迭代")

weights = torch.ones(4,requires_grad=True)


for epoch in range(3):

??model_output = (weights*3).sum()

??model_output.backward()

??print(weights.grad)


"""梯度累加在很多時候顯然是不對的,所以我們在下一次運算前要先清空梯度"""

print("\n" + "清空梯度的三次迭代")

weights = torch.ones(4,requires_grad=True)


for epoch in range(3):

??model_output = (weights*3).sum()

??model_output.backward()

??print(weights.grad)

??weights.grad.zero_()

PyTorch Tutorial 03 - Gradient Calcul...的評論 (共 條)

分享到微博請遵守國家法律
万安县| 平潭县| 蚌埠市| 靖西县| 平南县| 会东县| 通城县| 姚安县| 乳山市| 繁峙县| 綦江县| 洛浦县| 扬中市| 武陟县| 南江县| 台湾省| 泸溪县| 永顺县| 浙江省| 普宁市| 水富县| 理塘县| 黄梅县| 彭山县| 西林县| 富源县| 湄潭县| 南澳县| 临湘市| 西畴县| 托克逊县| 固安县| 杭锦后旗| 原阳县| 临沂市| 玛曲县| 涟源市| 潮州市| 开鲁县| 格尔木市| 吴旗县|