PyTorch,Dataset 재 작성/재 작성 및 Dataloader 불 러 오기

머리말
Dataset 과 Dataloder 는 pytorch 에서 데 이 터 를 불 러 오 는 위 젯 으로 알려 져 있 습 니 다.데 이 터 를 불 러 온 후 심도 있 는 학습 모델 훈련 을 해 야 한다.pytorch 의 일부 사례 교학 에서torchvision.datasets자체 가 가 진 MNIST,CIFAR-10 데이터 세트 를 자주 사용 합 니 다.일반적인 절 차 는 다음 과 같 습 니 다.

#         
train_dataset = torchvision.datasets.CIFAR10(root="       ",download=True)
# load  
train_loader = torch.utils.data.DataLoader(dataset=train_dataset)
그러나 우리 자신의 모델 훈련 에 서 는 비공 식적 으로 자체 제작 한 데이터 세트 를 사용 해 야 한다.이 럴 때 는 어떻게 해 야 하나 요?
우 리 는 고 쳐 쓰기torch.utils.data.Dataset중의__getitem____len__를 통 해 우리 자신의 데이터 세트 를 불 러 올 수 있다.__getitem__데이터 가 집 중 된 데 이 터 를 가 져 오고__len__전체 데이터 집합의 길이(즉 개수)를 가 져 옵 니 다.
고 쳐 쓰다
pytorch 홈 페이지 사례 에서 제공 하 는 얼굴 landmark데이터 세트를 사용 합 니 다.데이터 에는 landmark 를 저장 하 는 csv 파일 이 집중 되 어 있 지만,우 리 는 이 글 에서 사용 하지 않 습 니 다.

import os
import torch
from skimage import io, transform
import numpy as np
import matplotlib.pyplot as plt
from torch.utils.data import Dataset, DataLoader
from torchvision import transforms, utils

plt.ion()  # interactive mode
torch.utils.data.Dataset은 추상 적 인 유형 으로 우리 자신의 데이터 세트 는 계승Dataset한 다음 에 상기 두 가지 함 수 를 고 쳐 야 한다.

class ImageLoader(Dataset):
  def __init__(self, file_path, transform=None):
    super(ImageLoader,self).__init__()
    self.file_path = file_path
    self.transform = transform #           ,      ,   None
    self.image_names = os.listdir(self.file_path) #       
    
  def __getitem__(self,idx):
    image = self.image_names[idx]
    image = io.imread(os.path.join(self.file_path,image))
#    if self.transform:
#    	image= self.transform(image)
    return image
         
  def __len__(self):
    return len(self.image_names)

#             , plot      
imageloader = ImageLoader(file_path="D:\\Projects\\datasets\\faces\\")
# imageloader.__len__()       #        (  ),  71
# print(imageloader.__getitem__(0)) #        
plt.imshow(imageloader.__getitem__(0)) #        
plt.show()
받 은 그림 출력:

받 은 데이터 출력,:

array([[[ 66, 59, 53],
    [ 66, 59, 53],
    [ 66, 59, 53],
    ...,
    [ 59, 54, 48],
    [ 59, 54, 48],
    [ 59, 54, 48]],
    ...,
    [153, 141, 129],
    [158, 146, 134],
    [158, 146, 134]]], dtype=uint8)
위 에서 보 듯 이dytpe=uint8실제 훈련 을 할 때float의 데이터 형식 으로 변경 해 야 한다.사용 가능:

#     pytorch  tensor  float   
#     numpy      float  
to_float= torch.from_numpy(imageloader.__getitem__(0)).float() 
고 쳐 쓰기 가 완료 되면train_loader =torch.utils.data.DataLoader(dataset=imageloader)로 불 러 오기Dataloader에 직접 사용 하면 사용 할 수 있 습 니 다.
아래 코드 를 실행 해 볼 수 있 습 니 다.똑 같은 그림 결과 가 나 왔 습 니 다.

train_loader = torch.utils.data.DataLoader(dataset=imageloader)
train_loader.dataset[0]
plt.imshow(train_loader.dataset[0])
plt.show()
PyTorch 의 Dataset 재 작성/재 작성 및 Dataloader 불 러 오기 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 PyTorch 재 작성/Dataset 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기