第一塊:
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) #將所有最開始讀取數(shù)據(jù)時(shí)的tensor變量copy一份到device所指定的GPU上,之后運(yùn)算都在指定的GPU上進(jìn)行。這些tensor多是最開始讀取數(shù)據(jù)時(shí)的變量,后面其衍生出的新變量也會(huì)在已指定的GPU上運(yùn)行計(jì)算。
第三塊:
Tensor & Numpy 都是矩陣,區(qū)別在與Tensor可以在GPU上運(yùn)行,Numpy只能在CPU上運(yùn)行。(天吶,我現(xiàn)在才知道!)Tensor與Numpy互相轉(zhuǎn)化很方便,類型也比較兼容,Tensor可以直接通過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ù)