pytorch 數(shù)據(jù)處理:定義自己的數(shù)據(jù)集合實(shí)例
數(shù)據(jù)處理
版本1
#數(shù)據(jù)處理
import os
import torch
from torch.utils import data
from PIL import Image
import numpy as np
#定義自己的數(shù)據(jù)集合
class DogCat(data.Dataset):
def __init__(self,root):
#所有圖片的絕對(duì)路徑
imgs=os.listdir(root)
self.imgs=[os.path.join(root,k) for k in imgs]
def __getitem__(self, index):
img_path=self.imgs[index]
#dog-> 1 cat ->0
label=1 if 'dog' in img_path.split('/')[-1] else 0
pil_img=Image.open(img_path)
array=np.asarray(pil_img)
data=torch.from_numpy(array)
return data,label
def __len__(self):
return len(self.imgs)
dataSet=DogCat('./data/dogcat')
print(dataSet[0])
輸出:
( ( 0 ,.,.) = 215 203 191 206 194 182 211 199 187 ⋮ 200 191 186 201 192 187 201 192 187 ( 1 ,.,.) = 215 203 191 208 196 184 213 201 189 ⋮ 198 189 184 200 191 186 201 192 187 ( 2 ,.,.) = 215 201 188 209 195 182 214 200 187 ⋮ 200 191 186 202 193 188 204 195 190 … (399,.,.) = 72 90 32 88 106 48 38 56 0 ⋮ 158 161 106 87 85 36 105 98 52 [torch.ByteTensor of size 400x300x3] , 1)
上面的數(shù)據(jù)處理有下面的問題:
1.返回的樣本的形狀大小不一致,每一張圖片的大小不一樣。這對(duì)于需要batch訓(xùn)練的神經(jīng)網(wǎng)絡(luò)來說很不友好。
2. 返回的數(shù)據(jù)樣本數(shù)值很大,沒有歸一化【-1,1】
對(duì)于上面的問題,pytorch torchvision 是一個(gè)視覺化的工具包,提供了很多的圖像處理的工具,其中transforms模塊提供了對(duì)PIL image對(duì)象和Tensor對(duì)象的常用操作。
對(duì)PIL Image常見的操作如下;
Resize 調(diào)整圖片的尺寸,長(zhǎng)寬比保持不變
CentorCrop ,RandomCrop,RandomSizeCrop 裁剪圖片
Pad 填充
ToTensor 將PIL Image 轉(zhuǎn)換為Tensor,會(huì)自動(dòng)將[0,255] 歸一化至[0,1]
對(duì)Tensor 的操作如下:
Normalize 標(biāo)準(zhǔn)化,即減均值,除以標(biāo)準(zhǔn)差
ToPILImage 將Tensor轉(zhuǎn)換為 PIL Image對(duì)象
版本2
#數(shù)據(jù)處理
import os
import torch
from torch.utils import data
from PIL import Image
import numpy as np
from torchvision import transforms
transform=transforms.Compose([
transforms.Resize(224), #縮放圖片,保持長(zhǎng)寬比不變,最短邊的長(zhǎng)為224像素,
transforms.CenterCrop(224), #從中間切出 224*224的圖片
transforms.ToTensor(), #將圖片轉(zhuǎn)換為Tensor,歸一化至[0,1]
transforms.Normalize(mean=[.5,.5,.5],std=[.5,.5,.5]) #標(biāo)準(zhǔn)化至[-1,1]
])
#定義自己的數(shù)據(jù)集合
class DogCat(data.Dataset):
def __init__(self,root):
#所有圖片的絕對(duì)路徑
imgs=os.listdir(root)
self.imgs=[os.path.join(root,k) for k in imgs]
self.transforms=transform
def __getitem__(self, index):
img_path=self.imgs[index]
#dog-> 1 cat ->0
label=1 if 'dog' in img_path.split('/')[-1] else 0
pil_img=Image.open(img_path)
if self.transforms:
data=self.transforms(pil_img)
else:
pil_img=np.asarray(pil_img)
data=torch.from_numpy(pil_img)
return data,label
def __len__(self):
return len(self.imgs)
dataSet=DogCat('./data/dogcat')
print(dataSet[0])
輸出:
( ( 0 ,.,.) = -0.1765 -0.2627 -0.1686 … -0.0824 -0.2000 -0.2627 -0.2392 -0.3098 -0.3176 … -0.2863 -0.2078 -0.1765 -0.3176 -0.2392 -0.2784 … -0.2941 -0.1137 -0.0118 … ⋱ … -0.7569 -0.5922 -0.1529 … -0.8510 -0.8196 -0.8353 -0.8353 -0.7255 -0.3255 … -0.8275 -0.8196 -0.8588 -0.9373 -0.7647 -0.4510 … -0.8196 -0.8353 -0.8824 ( 1 ,.,.) = -0.0431 -0.1373 -0.0431 … 0.0118 -0.0980 -0.1529 -0.0980 -0.1686 -0.1765 … -0.1608 -0.0745 -0.0431 -0.1686 -0.0902 -0.1373 … -0.1451 0.0431 0.1529 … ⋱ … -0.5529 -0.3804 0.0667 … -0.7961 -0.7725 -0.7961 -0.6314 -0.5137 -0.1137 … -0.7804 -0.7882 -0.8275 -0.7490 -0.5608 -0.2392 … -0.7725 -0.8039 -0.8588 … [torch.FloatTensor of size 3x224x224] , 1)
項(xiàng)目的github地址:https://github.com/WebLearning17/CommonTool
以上這篇pytorch 數(shù)據(jù)處理:定義自己的數(shù)據(jù)集合實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 使用sklearn進(jìn)行對(duì)數(shù)據(jù)標(biāo)準(zhǔn)化、歸一化以及將數(shù)據(jù)還原的方法
- pytorch中的自定義數(shù)據(jù)處理詳解
- Pytorch 神經(jīng)網(wǎng)絡(luò)—自定義數(shù)據(jù)集上實(shí)現(xiàn)教程
- pytorch 圖像預(yù)處理之減去均值,除以方差的實(shí)例
- 關(guān)于Pytorch的MNIST數(shù)據(jù)集的預(yù)處理詳解
- 計(jì)算pytorch標(biāo)準(zhǔn)化(Normalize)所需要數(shù)據(jù)集的均值和方差實(shí)例
相關(guān)文章
python使用tensorflow深度學(xué)習(xí)識(shí)別驗(yàn)證碼
這篇文章主要介紹了python使用tensorflow深度學(xué)習(xí)識(shí)別驗(yàn)證碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04
Python實(shí)現(xiàn)合并同一個(gè)文件夾下所有PDF文件的方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)合并同一個(gè)文件夾下所有PDF文件的方法,涉及Python針對(duì)pdf文件的讀取、判斷、解密、寫入合并等相關(guān)操作技巧,需要的朋友可以參考下2018-04-04
修改python plot折線圖的坐標(biāo)軸刻度方法
今天小編就為大家分享一篇修改python plot折線圖的坐標(biāo)軸刻度方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12
淺析pytest?鉤子函數(shù)?之初始鉤子和引導(dǎo)鉤子
這篇文章主要介紹了pytest?鉤子函數(shù)?之初始鉤子和引導(dǎo)鉤子,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09

