pytorch中unsqueeze用法小結(jié)
在指定的位置插入一個(gè)維度,有兩個(gè)參數(shù),input是輸入的tensor,dim是要插到的維度
需要注意的是dim的范圍是[-input.dim()-1, input.dim()+1),是一個(gè)左閉右開(kāi)的區(qū)間,當(dāng)dim為負(fù)值時(shí),會(huì)自動(dòng)轉(zhuǎn)換為dim = dim+input.dim()+1,類似于使用負(fù)數(shù)對(duì)python列表進(jìn)行切片。
import torch
a = torch.randn(2,5)
print(a)
print("")
b = a.unsqueeze(0)
print(b.shape)
print("")
c = a.unsqueeze(a.dim())
print(c.shape)
輸出:
tensor([[-0.4734, 0.4115, -0.9415, -1.1280, -0.1065],
[ 0.1613, 1.2594, 1.1261, 1.3881, 0.1112]])
torch.Size([1, 2, 5])
torch.Size([2, 5, 1])以上是二維數(shù)據(jù)情況:
首先生成了一個(gè)二維矩陣,其大小為[2,5]
然后,在0維度上插入一個(gè)維度,可以看到現(xiàn)在新矩陣a的形狀變?yōu)閇1,2,5],第0維度的大小默認(rèn)是1
最后,在最后一個(gè)維度上插入一個(gè)維度,形狀變?yōu)閇2, 5, 1]
a=torch.rand(2,3,2)
print("")
print("torch.unsqueeze(a,3) size: {}".format(torch.unsqueeze(a,3).size()))
print("")
print("torch.unsqueeze(a,2) size: {}".format(torch.unsqueeze(a,2).size()))
print("")
print("torch.unsqueeze(a,1) size: {}".format(torch.unsqueeze(a,1).size()))
print("")
print("torch.unsqueeze(a,0) size: {}".format(torch.unsqueeze(a,0).size()))
print("")
print("torch.unsqueeze(a,-1) size: {}".format(torch.unsqueeze(a,-1).size()))
print("")
print("torch.unsqueeze(a,-2) size: {}".format(torch.unsqueeze(a,-2).size()))
print("")
print("torch.unsqueeze(a,-3) size: {}".format(torch.unsqueeze(a,-3).size()))
print("")
print("torch.unsqueeze(a,-4) size: {}".format(torch.unsqueeze(a,-4).size()))
輸出:
torch.unsqueeze(a,3) size: torch.Size([2, 3, 2, 1])
torch.unsqueeze(a,2) size: torch.Size([2, 3, 1, 2])
torch.unsqueeze(a,1) size: torch.Size([2, 1, 3, 2])
torch.unsqueeze(a,0) size: torch.Size([1, 2, 3, 2])
torch.unsqueeze(a,-1) size: torch.Size([2, 3, 2, 1])
torch.unsqueeze(a,-2) size: torch.Size([2, 3, 1, 2])
torch.unsqueeze(a,-3) size: torch.Size([2, 1, 3, 2])
torch.unsqueeze(a,-4) size: torch.Size([1, 2, 3, 2])對(duì)于三維數(shù)據(jù)input.dim() = 3,因此dim的范圍是[-4, 4)
torch.squeeze() 和 torch.unsqueeze()區(qū)別
第一塊:
squeeze(),主要是對(duì)數(shù)據(jù)的維度進(jìn)行壓縮,去掉元素?cái)?shù)為1的那個(gè)維度,使用方式:a.squeeze(N) or torch.squeeze(a,N) ,去掉a的第N維度,以此來(lái)實(shí)現(xiàn)數(shù)據(jù)a的維度壓縮;
unsqueeze()與squeeze()函數(shù)功能相反,其功能是對(duì)數(shù)據(jù)維度進(jìn)行擴(kuò)充,使用方式:a.unsqueeze(N) or torch.unsqueeze(a,N),在數(shù)據(jù)a的第N維度上增加一個(gè)維數(shù)為1的維度,以此實(shí)現(xiàn)對(duì)數(shù)據(jù)的擴(kuò)充,方便后續(xù)模型訓(xùn)練喂入模型的數(shù)據(jù)的維度和模型接收數(shù)據(jù)的維度是匹配的。
第二塊:
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") model.to(device) # 選擇第0個(gè)cuda
model.to(device)
以上兩行代碼放在讀取數(shù)據(jù)之前。
mytensor = my_tensor.to(device) #將所有最開(kāi)始讀取數(shù)據(jù)時(shí)的tensor變量copy一份到device所指定的GPU上,之后運(yùn)算都在指定的GPU上進(jìn)行。這些tensor多是最開(kāi)始讀取數(shù)據(jù)時(shí)的變量,后面其衍生出的新變量也會(huì)在已指定的GPU上運(yùn)行計(jì)算。
第三塊:
Tensor & Numpy 都是矩陣,區(qū)別在與Tensor可以在GPU上運(yùn)行,Numpy只能在CPU上運(yùn)行。(天吶,我現(xiàn)在才知道?。㏕ensor與Numpy互相轉(zhuǎn)化很方便,類型也比較兼容,Tensor可以直接通過(guò)print顯示數(shù)據(jù)類型,而Numpy不可以。
第四塊:
x.aadd(y) 實(shí)現(xiàn)x與y Tensor的相加,不改變x,返回一個(gè)新的Tensor
x.add_(y) 實(shí)現(xiàn)x與y Tensor的相加,會(huì)修改x的維數(shù)
到此這篇關(guān)于pytorch中unsqueeze用法小結(jié)的文章就介紹到這了,更多相關(guān)pytorch unsqueeze內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pyttsx3實(shí)現(xiàn)中文文字轉(zhuǎn)語(yǔ)音的方法
今天小編就為大家分享一篇pyttsx3實(shí)現(xiàn)中文文字轉(zhuǎn)語(yǔ)音的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
Python報(bào)錯(cuò)TypeError: object of type ‘gener
在Python開(kāi)發(fā)的復(fù)雜世界中,報(bào)錯(cuò)信息就像神秘的謎題,困擾著開(kāi)發(fā)者和環(huán)境配置者,其中,TypeError: object of type ‘generator’ has no len()這個(gè)報(bào)錯(cuò),常常在不經(jīng)意間打亂我們的開(kāi)發(fā)節(jié)奏,本文讓我們一起深入探究這個(gè)報(bào)錯(cuò)問(wèn)題,為Python開(kāi)發(fā)之路掃除障礙2024-10-10
使用Django清空數(shù)據(jù)庫(kù)并重新生成
這篇文章主要介紹了使用Django清空數(shù)據(jù)庫(kù)并重新生成,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04
Python調(diào)用OpenAI?Agents?SDK打造一個(gè)多智能體系統(tǒng)
還在手搓Agent通信邏輯嗎,OpenAI官方SDK讓你用純Python代碼構(gòu)建生產(chǎn)級(jí)多智能體系統(tǒng),本文從零到一,基于Python調(diào)用OpenAI?Agents?SDK打造你的第一個(gè)多智能體系統(tǒng),需要的朋友可以參考下2026-04-04
python操作注冊(cè)表的方法實(shí)現(xiàn)
Python提供了winreg模塊,可以用于操作Windows注冊(cè)表,本文就來(lái)介紹一下python操作注冊(cè)表的方法實(shí)現(xiàn),主要包括打開(kāi)注冊(cè)表、讀取注冊(cè)表值、寫入注冊(cè)表值和關(guān)閉注冊(cè)表,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08
python獲取標(biāo)準(zhǔn)北京時(shí)間的方法
這篇文章主要介紹了python獲取標(biāo)準(zhǔn)北京時(shí)間的方法,實(shí)例分析了Python通過(guò)www.beijing-time.org的官網(wǎng)獲取標(biāo)準(zhǔn)北京時(shí)間的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
Python基于pandas爬取網(wǎng)頁(yè)表格數(shù)據(jù)
這篇文章主要介紹了Python基于pandas獲取網(wǎng)頁(yè)表格數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
基于python實(shí)現(xiàn)微信收紅包自動(dòng)化測(cè)試腳本(測(cè)試用例)
這篇文章主要介紹了基于python實(shí)現(xiàn)微信收紅包自動(dòng)化測(cè)試腳本,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-07-07

