91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Variable怎么在Pytorch中使用

發布時間:2021-01-06 16:01:34 來源:億速云 閱讀:176 作者:Leah 欄目:開發技術

Variable怎么在Pytorch中使用?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

1.簡介

torch.autograd.Variable是Autograd的核心類,它封裝了Tensor,并整合了反向傳播的相關實現

Variable和tensor的區別和聯系

Variable是籃子,而tensor是雞蛋,雞蛋應該放在籃子里才能方便拿走(定義variable時一個參數就是tensor)

Variable這個籃子里除了裝了tensor外還有requires_grad參數,表示是否需要對其求導,默認為False

Variable這個籃子呢,自身有一些屬性

比如grad,梯度variable.grad是d(y)/d(variable)保存的是變量y對variable變量的梯度值,如果requires_grad參數為False,所以variable.grad返回值為None,如果為True,返回值就為對variable的梯度值

比如grad_fn,對于用戶自己創建的變量(Variable())grad_fn是為none的,也就是不能調用backward函數,但對于由計算生成的變量,如果存在一個生成中間變量的requires_grad為true,那其的grad_fn不為none,反則為none

比如data,這個就很簡單,這個屬性就是裝的雞蛋(tensor)

Varibale包含三個屬性:

data:存儲了Tensor,是本體的數據 grad:保存了data的梯度,本事是個Variable而非Tensor,與data形狀一致 grad_fn:指向Function對象,用于反向傳播的梯度計算之用

代碼1

import numpy as np
import torch
from torch.autograd import Variable
 
x = Variable(torch.ones(2,2),requires_grad = False)
temp = Variable(torch.zeros(2,2),requires_grad = True)
 
y = x + temp + 2
y = y.mean() #求平均數
 
y.backward() #反向傳遞函數,用于求y對前面的變量(x)的梯度
print(x.grad) # d(y)/d(x)

輸出1

none

(因為requires_grad=False)

代碼2

import numpy as np
import torch
from torch.autograd import Variable
 
x = Variable(torch.ones(2,2),requires_grad = False)
temp = Variable(torch.zeros(2,2),requires_grad = True)
 
 
y = x + temp + 2
y = y.mean() #求平均數
 
y.backward() #反向傳遞函數,用于求y對前面的變量(x)的梯度
print(temp.grad) # d(y)/d(temp)

輸出2

tensor([[0.2500, 0.2500],
[0.2500, 0.2500]])

代碼3

import numpy as np
import torch
from torch.autograd import Variable
 
x = Variable(torch.ones(2,2),requires_grad = False)
temp = Variable(torch.zeros(2,2),requires_grad = True)
 
 
y = x + 2
y = y.mean() #求平均數
 
y.backward() #反向傳遞函數,用于求y對前面的變量(x)的梯度
print(x.grad) # d(y)/d(x)

輸出3

Traceback (most recent call last):
File "path", line 12, in <module>
y.backward()

(報錯了,因為生成變量y的中間變量只有x,而x的requires_grad是False,所以y的grad_fn是none)

代碼4

import numpy as np
import torch
from torch.autograd import Variable
 
x = Variable(torch.ones(2,2),requires_grad = False)
temp = Variable(torch.zeros(2,2),requires_grad = True)
 
 
y = x + 2
y = y.mean() #求平均數
 
#y.backward() #反向傳遞函數,用于求y對前面的變量(x)的梯度
print(y.grad_fn) # d(y)/d(x)

輸出4

none

2.grad屬性

在每次backward后,grad值是會累加的,所以利用BP算法,每次迭代是需要將grad清零的。

x.grad.data.zero_()

(in-place操作需要加上_,即zero_)

看完上述內容,你們掌握Variable怎么在Pytorch中使用的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广昌县| 安顺市| 沈丘县| 宾阳县| 巴中市| 桑植县| 文成县| 浮山县| 固原市| 永登县| 龙游县| 开远市| 伊金霍洛旗| 宁陵县| 禹州市| 玛沁县| 兰西县| 松潘县| 紫云| 广元市| 西乌珠穆沁旗| 麦盖提县| 孝感市| 正蓝旗| 沙雅县| 蓝田县| 喜德县| 宁武县| 涡阳县| 东丰县| 德昌县| 东山县| 湖州市| 平湖市| 合作市| 东光县| 襄城县| 从化市| 江都市| 沙洋县| 拉萨市|