下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第pytorch中.numpy()、.item()、.cpu()、.detach()以及.data的使用方法目錄.numpy().item().cpu().detach()和.data(重點(diǎn))補(bǔ)充:關(guān)于.data和.cpu().data的各種操作總結(jié)
.numpy()
Tensor.numpy()將Tensor轉(zhuǎn)化為ndarray,這里的Tensor可以是標(biāo)量或者向量(與item()不同)轉(zhuǎn)換前后的dtype不會(huì)改變
a=torch.tensor([[1.,2.]])
a_numpy=a.numpy()#[[1.,2.]]
.item()
將一個(gè)Tensor變量轉(zhuǎn)換為python標(biāo)量(intfloat等)常用于用于深度學(xué)習(xí)訓(xùn)練時(shí),將loss值轉(zhuǎn)換為標(biāo)量并加,以及進(jìn)行分類(lèi)任務(wù),計(jì)算準(zhǔn)確值值時(shí)需要
optimizer.zero_grad()
outputs=model(data)
loss=F.cross_entropy(outputs,label)
#計(jì)算這一個(gè)batch的準(zhǔn)確率
acc=(outputs.argmax(dim=1)==label).sum().cpu().item()/len(labels)#這里也用到了.item()
loss.backward()
optimizer.step()
train_loss+=loss.item()#這里用到了.item()
train_acc+=acc
.cpu()
將數(shù)據(jù)的處理設(shè)備從其他設(shè)備(如.cuda()拿到cpu上),不會(huì)改變變量類(lèi)型,轉(zhuǎn)換后仍然是Tensor變量。
.detach()和.data(重點(diǎn))
.detach()就是返回一個(gè)新的tensor,并且這個(gè)tensor是從當(dāng)前的計(jì)算圖中分離出來(lái)的。但是返回的tensor和原來(lái)的tensor是共享內(nèi)存空間的。
舉個(gè)例子來(lái)說(shuō)明一下detach有什么用。如果A網(wǎng)絡(luò)的輸出被喂給B網(wǎng)絡(luò)作為輸入,如果我們希望在梯度反傳的時(shí)候只更新B中參數(shù)的值,而不更新A中的參數(shù)值,這時(shí)候就可以使用detach()
a=A(input)
a=a.deatch()#或者a.detach_()進(jìn)行in_place操作
out=B(a)
loss=criterion(out,labels)
loss.backward()
Tensor.data和Tensor.detach()一樣,都會(huì)返回一個(gè)新的Tensor,這個(gè)Tensor和原來(lái)的Tensor共享內(nèi)存空間,一個(gè)改變,另一個(gè)也會(huì)隨著改變,且都會(huì)設(shè)置新的Tensor的requires_grad屬性為False。這兩個(gè)方法只取出原來(lái)Tensor的tensor數(shù)據(jù),丟棄了grad、grad_fn等額外的信息。
tensor.data是不安全的,因?yàn)閤.data不能被autograd追蹤求微分
這是為什么呢?我們對(duì).data進(jìn)行進(jìn)一步探究
importtorch
a=torch.tensor([4.,5.,6.],requires_grad=True)
print("a",a)
out=a.sigmoid()
print("out",out)
print(out.requires_grad)#在進(jìn)行.data前仍為true
result=out.data#共享變量,同時(shí)將requires_grad設(shè)置為false
result.zero_()#改變c的值,原來(lái)的out也會(huì)改變
print("result",result)
print("out",out)
out.sum().backward()#對(duì)原來(lái)的out求導(dǎo),
print(a.grad)#不會(huì)報(bào)錯(cuò),但是結(jié)果卻并不正確
'''運(yùn)行結(jié)果為:
atensor([4.,5.,6.],requires_grad=True)
outtensor([0.9820,0.9933,0.9975],grad_fn=SigmoidBackward0)
resulttensor([0.,0.,0.])
outtensor([0.,0.,0.],grad_fn=SigmoidBackward0)
tensor([0.,0.,0.])
由于更改分離之后的變量值result,導(dǎo)致原來(lái)的張量out的值也跟著改變了,但是這種改變對(duì)于autograd是沒(méi)有察覺(jué)的,它依然按照求導(dǎo)規(guī)則來(lái)求導(dǎo),導(dǎo)致得出完全錯(cuò)誤的導(dǎo)數(shù)值卻渾然不知。
那么我們繼續(xù)看看.detach()
可以看到將.data改為.detach()后程序立馬報(bào)錯(cuò),阻止了非法的修改,安全性很高
我們需要記住的就是:
.data是一個(gè)屬性,二.detach()是一個(gè)方法;.data是不安全的,.detach()是安全的。
補(bǔ)充:關(guān)于.data和.cpu().data的各種操作
先上圖
仔細(xì)分析:
1.首先a是一個(gè)放在GPU上的Variable,a.data是把Variable里的tensor取出來(lái),
可以看出與a的差別是:缺少了第一行(Variablecontaining)
2.a.cpu()和a.data.cpu()是分別把a(bǔ)和a.data放在cpu上,其他的沒(méi)區(qū)別,另外:a.data.cpu()和a.cpu().data一樣
3.
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 項(xiàng)目融資試題庫(kù)及答案
- 安全生產(chǎn)法知識(shí)競(jìng)賽試題附答案
- 急診知識(shí)培訓(xùn)試題及答案
- 保安員考試模擬題庫(kù)及答案詳解(真題)
- 山西安全員考試模擬及答案
- 高頻個(gè)人優(yōu)勢(shì)面試題及答案
- 徐州地鐵考試試題及答案
- 消防設(shè)施操作員考試真題及參考答案
- 高頻稅務(wù)會(huì)計(jì)面試題及答案
- 六月份關(guān)節(jié)外科業(yè)務(wù)學(xué)習(xí)考試題附答案
- 老年病康復(fù)訓(xùn)練治療講課件
- 2024中考會(huì)考模擬地理(福建)(含答案或解析)
- CJ/T 164-2014節(jié)水型生活用水器具
- 購(gòu)銷(xiāo)合同范本(塘渣)8篇
- 貨車(chē)充電協(xié)議書(shū)范本
- 屋面光伏設(shè)計(jì)合同協(xié)議
- 生鮮業(yè)務(wù)采購(gòu)合同協(xié)議
- 夫妻門(mén)衛(wèi)合同協(xié)議
- 公司雙選工作方案
- GB/T 4340.2-2025金屬材料維氏硬度試驗(yàn)第2部分:硬度計(jì)的檢驗(yàn)與校準(zhǔn)
- 銷(xiāo)售合同評(píng)審管理制度
評(píng)論
0/150
提交評(píng)論