torch.reshape()
官方文檔的大致意思是:
返回與輸入具有相同數據和元素數量的張量,但是具有指定形狀。如果可能,返回的張量將是輸入的視圖,也就是說原本的tensor并沒有被改變,如果想要改變那么就將改變的tensor賦值給原本的就行,即:tensor_temp = torch.reshape(tensor_temp, xxx))。
個人理解是給數組一個新的形狀,數據和元素數量及順序不變,按照形狀截斷、重新拼起來成為一個張量,可以使用reshape用來增加數組的維度。
代碼示例:
import torch
a=torch.tensor([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
print("a的shape:",a.shape)
b=torch.reshape(a,((4,3,1)))
print("b:",b)
print("b的shape:",b.shape)
a的shape: torch.Size([2, 2, 3])
b: tensor([[[ 1],[ 2],[ 3]],[[ 4],[ 5],[ 6]],[[ 7],[ 8],[ 9]],[[10],[11],[12]]])
b的shape: torch.Size([4, 3, 1])
占位符-1:
import torch
a=torch.tensor([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
b=torch.reshape(a,(-1,))
c=torch.reshape(a,(-1,1))
d=torch.reshape(a,((-1,1,1)))
e=torch.reshape(a,((-1,1,1,1)))
f=torch.reshape(a,((-1,3,4)))# a的shape:torch.Size([2, 2, 3])
# b的shape:torch.Size([12])
# c的shape:torch.Size([12, 1])
# d的shape: torch.Size([12, 1, 1])
# e的shape: torch.Size([12, 1, 1, 1])
# f的shape: torch.Size([1, 3, 4])
-1表示表示其具體值由其他維度信息和元素總個數推斷出來。
一個使用場景:
對于torch.nn.functional.conv2d這個函數
torch.nn.functional.conv2d(input, weight, bias=None, stride=1, padding=0, dilation=1, groups=1)
其中參數input – input tensor of shape (minibatch, in_channels, iH, iW)是一個4D張量,如果要把下面這樣一個輸入矩陣,變為4D張量,就可以使用reshape函數。
[[1,2,0,3,1],
[0,1,2,3,1],
[1,2,1,0,0],
[5,2,3,1,1],
[2,1,0,1,1]]
input = torch.reshape(input,[1,1,5,5])
torch.transforms.Resize()
transforms.Resize()可以作為數據預處理管道中的一個步驟,用于將輸入的圖像按照指定的大小或縮放因子進行調整。這樣可以確保輸入的圖像滿足模型的輸入要求,或者保持不同數據樣本具有相同的輸入尺寸,在訓練或推理過程中方便批次處理。
用來調整PILImage對象的尺寸,注意不能是用io.imread或者cv2.imread讀取的圖片,這兩種方法得到的是ndarray,input只能是PIL Image or Tensor。
from torchvision import transformsimg_path = "xxx"
img = Image.open(img_path)trans1 = transforms.Resize([h, w]) # 同時指定長寬,寫為trans1 = transforms.Resize((h, w))也是可以的,transforms.Resize 接受的參數可以是整數、元組或列表。
trans2 = transforms.Resize(x) # 將圖片短邊縮放至x,長寬比保持不變img1 = trans1(img)
img2 = trans2(img)
resize雖然會改變圖片的長寬比,但是本身并沒有發生裁切,仍可以通過resize方法返回原來的形狀。
要注意的一點是PILImage對象size屬性返回的是w, h,而resize的參數順序是h, w。
參考:
https://blog.csdn.net/qq_51533157/article/details/122816008
https://blog.csdn.net/qq_35008185/article/details/118224044
https://segmentfault.com/a/1190000043683736