日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

torchvision.transforms包的使用

發(fā)布時(shí)間:2025/3/19 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 torchvision.transforms包的使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

torchvision.transforms是專(zhuān)門(mén)用來(lái)對(duì)數(shù)據(jù)進(jìn)行相關(guān)的處理。我們可完成的操作如下:

  • 歸一化
  • PIL.Image / numpy.ndarray 與Tensor的相互轉(zhuǎn)化
  • 對(duì)PIL.Image進(jìn)行裁剪、縮放等操作

通常,在使用torchvision.transforms,我們通常使用transforms.Compose將transforms組合在一起。

PIL.Image/numpy.ndarray與Tensor的相互轉(zhuǎn)換

PIL.Image/numpy.ndarray轉(zhuǎn)化為T(mén)ensor,常常用在訓(xùn)練模型階段的數(shù)據(jù)讀取,而Tensor轉(zhuǎn)化為PIL.Image/numpy.ndarray則用在驗(yàn)證模型階段的數(shù)據(jù)輸出。

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()

歸一化

歸一化對(duì)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練是非常重要的,那么我們?nèi)绾螝w一化到[-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使用如下公式進(jìn)行歸一化:

channel=(channel-mean)/std

這樣一來(lái),我們的數(shù)據(jù)中的每個(gè)值就變成了[-1,1]的數(shù)了。

# 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來(lái)達(dá)到目的。
文檔中對(duì)該函數(shù)的其中一句描述如下:Crop the given PIL Image at a random location.

# follow the code abovetransform3 = transforms.Compose([transforms.ToTensor(), transforms.ToPILImage(),transforms.RandomCrop((100,100)),]) img6 = transform3(img3) print(img6.size) # 100 * 100 img3.show() img6.show()

參考

圖像基本操作

總結(jié)

以上是生活随笔為你收集整理的torchvision.transforms包的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。