




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
張量的概念及使用(上)張量的概念及使用01張量的概念
tensor即“張量”,是一種數(shù)據(jù)結(jié)構(gòu),實際上跟numpy數(shù)組、向量、矩陣的格式基本一樣。但是是專門針對GPU來設(shè)計的,可以運行在GPU上來加快計算效率。
可以簡單理解為:一個可以運行在gpu上的多維數(shù)據(jù)。Tensor的使用01Torch.device()設(shè)備類型我們學(xué)習(xí)到了張量的基本使用,那么在神經(jīng)網(wǎng)絡(luò)中,張量有哪些常見的使用呢?Torch.device()表現(xiàn)了torch.Tensor被分配的設(shè)備類型的類,其中分為‘cpu’和‘cuda’兩種類型??梢酝ㄟ^torch.cuda.current_device()返回當前設(shè)備標號,也可以通過tensor.device()來獲取其屬性。具體操作如下所示:>>>importtorch#導(dǎo)包>>>torch.device('cuda')#使用當前的cuda設(shè)備device(type='cuda')>>>torch.device('cpu')#設(shè)置當前設(shè)備為CPUdevice(type='cpu')Tensor的使用01
可以利用字符或字符+序號的方式來分配設(shè)備,如果設(shè)備序號沒有顯示則表示此tensor被分配到當前設(shè)備。#通過字符串和設(shè)備號設(shè)置>>>torch.device('cuda',0)#設(shè)置當前設(shè)備為0號cudadevice(type='cuda',index=0)>>>torch.device('cpu',0)
#設(shè)置當前設(shè)備為0號cpudevice(type='cpu',index=0)Tensor的使用01通過代碼自動分配>>>device=torch.device(“cuda”iftorch.cuda.is_available()else“cpu”)#通用
張量的設(shè)備分配>>>data=torch.Tensor([1])#聲明一個Tensor>>>data.to(device)tensor([1.])#Tensor置于cpu設(shè)備上>>>data.to(device)
tensor([1.],device='cuda:0')#Tensor置于cuda設(shè)備上Tensor的使用01創(chuàng)建一維、二維、三維張量a=torch.Tensor([1,2,3])b=torch.Tensor([[1,2,3],[4,5,6]])c=torch.Tensor([[[1,2,3],[4,5,6],[7,8,9]]])print('一維張量:',a)print('二維張量:',b)print('三維張量:',c)代碼:結(jié)果:torch.Tensor(list):根據(jù)列表創(chuàng)建多維張量,維度一致Tensor的使用01創(chuàng)建全零/全1張量input=torch.zeros(2)#一維全0張量print(input)print(torch.zeros(2,3))#2行3列的全0張量print(torch.ones(2,3))#2行3列的全1張量print(torch.zeros_like(input))#打印與input相同大小的全0張量print(torch.ones_like(input))#打印與input相同大小的全1張量代碼:結(jié)果:torch.zeros(*sizes,out=None,..)/torch.ones(*sizes,out=None,..):返回大小為sizes的對應(yīng)全零/全1張量torch.zeros_like(input,..)/torch.ones_like(input,..):返回與input相同尺寸的對應(yīng)全零/全1張量Tensor的使用01創(chuàng)建全x張量print(torch.full((3,4),3.14))#3行4列全3.14張量print(torch.full_like(input,2.3))#打印與input相同大小的全2.3矩陣量代碼:結(jié)果:torch.full(size,fill_value,…)返回大小為size,各元素值都為fill_value的張量Tensor的使用01等差數(shù)列張量print(torch.arange(2,8))#默認單位步長是1的等差數(shù)列張量print(torch.linspace(2,10,steps=5))#步長為2的等差數(shù)列代碼:結(jié)果:torch.arange(start=0,end,step=1,…)函數(shù),返回結(jié)果為[start,end),步長為step的張量等比數(shù)列張量torch.linspace(start,end,steps=100)返回從[start,end],間隔中的插值數(shù)目為steps的tensor。torch.logspace(start,end,steps=100,base=10)返回steps個從base^start到base^end的等比數(shù)列。print(torch.logspace(1,3,steps=3,base=10))#以10為公倍數(shù)的等比代碼:結(jié)果:Tensor的使用01隨機張量input=torch.eye(3)#3維單位對角張量print(torch.rand(2,2))#2行2列的[0,1]均勻分布隨機數(shù)print(torch.rand_like(input))#3行3列的[0,1]均勻分布隨機數(shù)print(torch.randint(1,10,(2,2)))#2行2列的[1,10]均勻分布隨機數(shù)print(torch.randn(2,2))#2行2列的標準正態(tài)分布隨機數(shù)代碼:結(jié)果:torch.rand(*size,out=None,dtype=None,…)返回[0,1]之間均勻分布的隨機數(shù)值,形狀大小由size決定torch.rand_like(input)隨機數(shù)滿足[0,1]均勻分布,形狀大小由input決定torch.randint(low=0,high,size,…)返回均勻分布的[low,high]之間的整數(shù)隨機值。torch.randn(*sizes,out=None,…)返回大小為sizes,均值為0,方差為1的標準正態(tài)分布的隨機數(shù)值。張量的概念及使用(下)Tensor的使用01張量維度擴大Tensor.expand(*sizes):返回tensor的一個新視圖,單個維度擴大為更大的尺寸,也可以擴大為更高維。擴大tensor不需要分配新內(nèi)存,只是僅僅新建一個tensor的視圖。x=torch.tensor([[1],[2],[3]])print(x.size())print(x.expand(3,4))#維度擴大為3行4列print(x.expand(-1,2))#-1表示自動計算數(shù)值print(x)代碼:結(jié)果:Tensor的使用01張量維度重復(fù)Tensor.repeat(*sizes)沿著指定的維度重復(fù)tensor,不同于expand(),本函數(shù)復(fù)制的是tensor中的數(shù)據(jù)。x=torch.tensor([1,2,3])#定義一個1*3tensorprint(x.repeat(4,2))#復(fù)制x中的元素值使變成4*6的tensor(1*4,2*3)print(x)print(x.repeat(4,2,1).size())#復(fù)制x中的元素變成3個維度:[4,2,3]代碼:結(jié)果:Tensor的使用01維度擴展前面學(xué)到過torch.squeeze()函數(shù)進行壓縮,去除tensor維度。torch.unsqueeze(input,dim,out=None)函數(shù)主要是進行擴展,第二個參數(shù)為0時,數(shù)據(jù)是行方向擴,為1時是列方向擴。x=torch.tensor([1,2,3,4])print(torch.unsqueeze(x,0))#向行方向擴展print(x.unsqueeze(1))#向列方向擴展代碼:結(jié)果:Tensor的使用01改變維度方式一:torch.reshape(input,shape)返回與輸入相同的數(shù)據(jù),但具有指定形狀的tensor。方式二:Tensor.reshape(shape)返回與輸入相同的數(shù)據(jù),但具有指定形狀的tensor。a=torch.arange(6)#生成tensorb=torch.reshape(a,(3,2))#重新組合形狀為3*2c=a.reshape(2,-1)#重新組合形狀為2*3print(b)print(c)代碼:結(jié)果:Tensor的使用01維度交換
torch.transpose(input,dim0,dim1)將張量按指定的2個維度交換位置,實現(xiàn)類似矩陣轉(zhuǎn)置的操作。x=torch.randint(1,10,(2,3))#生成2行3列[1,10]之間的隨機整數(shù)print(x)print(torch.transpose(x,0,1))#將0維與1維調(diào)換位置代碼:結(jié)果:Tensor的使用01轉(zhuǎn)換成數(shù)值item()在提取損失值的時候,常常會用到loss.item(),其返回值是一個Python數(shù)值(pythonnumber)。item()將tensor格式轉(zhuǎn)化為python的數(shù)據(jù)類型格式。注意item()只適用于tensor只包含一個元素的時候。因為大多數(shù)情況下我們的損失值就只有一個元素,所以就經(jīng)常會用到loss.item()。如果想把含多個元素的tensor轉(zhuǎn)換成Pythonlist的話,要使用tensor.tolist()。Tensor的使用01x=torch.randn(1)#隨機生成1個1*1的正態(tài)分布tensorprint(x)y=x.item()#使用item()獲取數(shù)值print(y,type(y))#打印類型x=torch.randn([2,2])#隨機生成1個2*2的正態(tài)分布tensory=x.tolist()#使用tolist獲取轉(zhuǎn)換為listprint(y)代碼:結(jié)果:張量求導(dǎo)機制Tensor張量求導(dǎo)機制02在PyTorch中,autograd是所有神經(jīng)網(wǎng)絡(luò)的核心內(nèi)容,為Tensor所有操作提供自動求導(dǎo)方法。autograd.Variable是autograd中最核心的類。它包裝了一個Tensor,并且?guī)缀踔С炙性谄渖隙x的操作。Variable是一種可以不斷變化的量,符合反向傳播,參數(shù)更新的屬性,可以稱作變量。完成運算之后,在后續(xù)可以調(diào)用.backward()來自動計算出所有的梯度。注意:新版本中,torch.autograd.Variable和torch.Tensor將同屬一類。是否需要求梯度梯度值求梯度對應(yīng)的函數(shù)類型Tensor張量求導(dǎo)機制02importtorch#導(dǎo)包torchfromtorch.autogradimportVariable#導(dǎo)包Variablex=Variable(torch.Tensor([5]),requires_grad=True)#創(chuàng)建變量x,并設(shè)置需要求導(dǎo)y=2*x+2#線性運算print(y,'\n','y的類型是',y.type())#打印y的內(nèi)容和類型print(y.grad_fn)
#打印y的函數(shù)類型y.backward()
#反向傳播print(x.grad)#求解x的梯度代碼:結(jié)果:Tensor張量求導(dǎo)機制02Autograd自動求導(dǎo)計算圖
Autograd機制有一個計算圖,可以將每個變量的計算流程以圖結(jié)構(gòu)表示出來,以下面計算過程為例,損失計算圖可以表示為下圖。
因為每個變量到損失需要經(jīng)過那些運算都非常清楚,所以Autograd才能實現(xiàn)自主反向求導(dǎo)的過程。inputw2w1w3
mean
l1l2l3lossTensor張量求導(dǎo)機制02tensor.requires_grad()當我們創(chuàng)建一個張量的時候,如果沒有特殊指定的話,那么這個張量是默認是不需要求導(dǎo)的。我們可以通過tensor.requires_grad()來檢查一個張量是否需要求導(dǎo)。在張量間的計算過程中,如果在所有輸入中,有一個輸入需要求導(dǎo),那么輸出一定會需要求導(dǎo);相反,只有當所有輸入都不需要求導(dǎo)的時候,輸出才不需要求導(dǎo)。a=Variable(torch.rand(3,3))#創(chuàng)建變量a,不設(shè)置求導(dǎo)b=Variable(torch.rand(3,3))#創(chuàng)建變量b,不設(shè)置求導(dǎo)c=Variable(torch.rand(3,3),requires_grad=True)#創(chuàng)建變量c,設(shè)置求導(dǎo)x=a+bprint(x.requires_grad)#查看x是否需要求導(dǎo)y=a+cprint(y.requires_grad)#查看y是否需要求導(dǎo)代碼:結(jié)果:Tensor張量求導(dǎo)機制02在訓(xùn)練一個網(wǎng)絡(luò)的時候,那么損失怎么還能自動求導(dǎo)呢?其實原因就是上邊那條規(guī)則,雖然輸入的訓(xùn)練數(shù)據(jù)是默認不求導(dǎo)的,但是,我們的model中的所有參數(shù),它默認是求導(dǎo)的,這么一來,其中只要有一個需要求導(dǎo),那么輸出的網(wǎng)絡(luò)結(jié)果必定也會需要求導(dǎo)的。注意:不要把網(wǎng)絡(luò)的輸入和GroundTruth(標注正確的數(shù)據(jù))的requires_grad設(shè)置為True。雖然這樣設(shè)置不會影響反向傳播,但是需要額外計算網(wǎng)絡(luò)的輸入和GroundTruth的導(dǎo)數(shù),增大了計算量和內(nèi)存占用。Tensor張量求導(dǎo)機制02input=torch.randn(8,3,50,100)#創(chuàng)建一個tensorprint(input.requires_grad)#查看是否需要求導(dǎo)net=torch.nn.Sequential(#定義兩個卷積操作,并通過函數(shù)sequential連接
torch.nn.Conv2d(3,16,3,1),torch.nn.Conv2d(16,32,3,1))output=net(input)#計算得到網(wǎng)絡(luò)結(jié)構(gòu)print(output.requires_grad)#輸出結(jié)果是否需要求導(dǎo)代碼:結(jié)果:Tensor張量求導(dǎo)機制02在訓(xùn)練的過程中凍結(jié)部分網(wǎng)絡(luò),讓這些層的參數(shù)不可求梯度,觀察輸出的求導(dǎo)狀態(tài)。這在遷移學(xué)習(xí)中很有用處。input=torch.randn(8,3,50,100)#創(chuàng)建一個tensorprint(input.requ
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 上饒衛(wèi)生健康職業(yè)學(xué)院《蒙古語標準音訓(xùn)練》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年外貿(mào)英語與實務(wù)考試試卷及答案
- 山東體育學(xué)院《大數(shù)據(jù)平臺技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年藝術(shù)設(shè)計與傳媒專業(yè)考試試題及答案
- 江蘇省東臺市第二聯(lián)盟2024-2025學(xué)年初三下學(xué)期階段測試生物試題試卷含解析
- 寧德市福鼎市2025年三年級數(shù)學(xué)第二學(xué)期期末學(xué)業(yè)質(zhì)量監(jiān)測模擬試題含解析
- 2025年心理學(xué)專業(yè)碩士研究生入學(xué)試題及答案
- 晉城職業(yè)技術(shù)學(xué)院《語言學(xué)基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 四川省成都市高新南區(qū)2025年第一次教學(xué)質(zhì)量檢測試題(合肥一模)數(shù)學(xué)試題含解析
- 四川省南部縣2024-2025學(xué)年初三下學(xué)期暑假聯(lián)考語文試題含解析
- 銀級考試題目p43測試題
- 有限空間作業(yè)及應(yīng)急物資清單
- 思想道德與法治教案第一章:領(lǐng)悟人生真諦把握人生方向
- 61850報文解析-深瑞版-131016
- 0-6歲兒童隨訪表
- 江西新定額2017土建定額說明及解釋
- 國家電網(wǎng)有限公司十八項電網(wǎng)重大反事故措施(修訂版)-2018版(word文檔良心出品)
- 語文四年級下冊《失落的一角》繪本閱讀 課件(共61張PPT)
- 附件一∶ 教育部專家實地評估案頭必備材料
- 余甘果的栽培與加工工藝
- 中考英語雙向細目表
評論
0/150
提交評論