torchvision.transforms包的使用
生活随笔
收集整理的這篇文章主要介紹了
torchvision.transforms包的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
torchvision.transforms是專門用來對數據進行相關的處理。我們可完成的操作如下:
- 歸一化
- PIL.Image / numpy.ndarray 與Tensor的相互轉化
- 對PIL.Image進行裁剪、縮放等操作
通常,在使用torchvision.transforms,我們通常使用transforms.Compose將transforms組合在一起。
PIL.Image/numpy.ndarray與Tensor的相互轉換
PIL.Image/numpy.ndarray轉化為Tensor,常常用在訓練模型階段的數據讀取,而Tensor轉化為PIL.Image/numpy.ndarray則用在驗證模型階段的數據輸出。
import numpy as np import cv2 import torch from torchvision import transforms img_path = "" # here is your img path transform = transforms.Compose([transforms.ToTensor(), # convert range [0, 255] to range [0, 1] ])# ndarray -> tensor img = cv2.imread(img_path) print(type(img)) # <class 'numpy.ndarray'> print(img.shape) # (300, 300, 3) H, W, C img1 = transform1(img) print(type(img1)) # <class 'torch.Tensor'> print(img1.shape) # torch.Size([3, 300, 300]) C, H, W print("img max value :",np.max(img), " img1 max value:", torch.max(img1)) # img max value : 255 img1 max value: tensor(1.)# PIL.Image -> tensor from PIL import Image img3 = Image.imread(img_path) print(type(img3)) #<class 'PIL.Image.Image'> img4 = transform1(img3) print(type(img4)) # <class 'torch.Tensor'> print(img4.shape) # torch.Size([3, 300, 300]) C, H, W img3.show() # present the img print("img3 max value :",np.max(img4), " img4 max value:", torch.max(img4)) # img3 max value : 255 img4 max value: tensor(1.)# tensor -> PIL.Image transform2 = transforms.Compose([transforms.ToPILImage()]) img5 = transform2(img4) img5.show()歸一化
歸一化對神經網絡的訓練是非常重要的,那么我們如何歸一化到[-1.0, 1.0]呢?只需要將上面的transform1改為如下所示:
transform1 = transforms.Compose([transforms.ToTensor(),transforms.Normalize(mean = [0.5, 0.5, 0.5], std = [0.5, 0.5, 0.5])] )transforms.Normalize使用如下公式進行歸一化:
channel=(channel-mean)/std這樣一來,我們的數據中的每個值就變成了[-1,1]的數了。
# follow the code above transform = transforms.Compose([transforms.ToTensor(),] ) transform1 = transforms.Compose([transforms.ToTensor(),transforms.Normalize(mean = [0.5, 0.5, 0.5], std = [0.5, 0.5, 0.5])] ) img1 = transform(img) img2 = transform1(img) print("img1 minimun valus is: ",torch.min(img1)," img2 minimnu valus is: ",torch.min(img2)) # output: # img1 minimun valus is: tensor(0.) img2 minimnu valus is: tensor(-1.)PIL.Image的縮放裁剪等操作
使用transforms.RandomCrop來達到目的。
文檔中對該函數的其中一句描述如下:Crop the given PIL Image at a random location.
參考
圖像基本操作
總結
以上是生活随笔為你收集整理的torchvision.transforms包的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pytorch的梯度计算以及backwa
- 下一篇: 转置卷积/反卷积